HackTheBox Sau Writeup

# はじめに

今回はHackTheBox(HTB)のSauという問題をWalkthrough無しで自力で解けたので、どういう手順で解いたのかを記事にしてみようと思いました。
まだrootまでは取れておらず、sauユーザーに対するアクセスだけですが、今後rootが取れたら追加でwriteupも書いていこうと思います。
初めて自力で解けた問題なので、詳しく解説していこうと思います。

# 情報収集(1)

まずはポートスキャンを行い、空いているポートとサービス名を確認します。
![portscan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/61917b46-5d8f-dc9a-ab0d-20388ea1331b.png)
sshとサービス名が不明な55555番ポートが開いています。少し調べてみたところ、request-basketsというサービスのデフォルトポートが55555と分かりました。(https://github.com/darklynx/request-baskets)
そしてこのサービスはHTTPリクエストを受け取るので、ブラウザーで開けないか試してみました。
![target_website_screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/16e02224-7ef4-f125-ca2a-330b9d9fd080.png)
無事ブラウザーで開けました。次はこのrequest-basketsが何をするものなのかを詳しく調べていきます。
公式の説明によると(上記のrepo参照)ウェブサイト上に任意の名前のページを作り、そこに来たリクエストを監視するというサービスだそうです。
どうやらこのページのことをbasketと呼ぶらしいです。
さらに続いて面白いことが書かれていました。このサービスはリダイレクト機能を有いしているらしいです。
これが気になり色々調べていると、ある脆弱性に関するレポートが見つかりました。(https://github.com/entr0pie/CVE-2023-27163)
このレポートによると、リダイレクト機能はwebサーバーがHTTPリクエストを任意の場所にリダイレクトし、その結果をリクエストを送った人に返すというもので
Proxyのような役割をする仕組みであり、このリダイレクト先はwebサーバーがいる内部ネットワーク内に対しても有効であるというものでした。
この機能を使って外部からのアクセスからが許可されていないwebサーバーに対してアクセスができるということです。

# Exploit(1)

試しにこのrequest-basketsサービスを動かしているサーバーの中にローカルで動くwebサーバーがないか調べてみます。
まずは新しくbasketを作ります。
![basket-name.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/b8cabad9-53e5-821c-83d8-786dcb0d4c58.png)
![basket-created.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/e74bc15d-489f-48d7-db73-9c81d9a7a91c.png)
すると作成したbasketの設定画面に行けるようになるので、そこからリダイレクトの設定をしていきます。
![basket-menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/afb50360-49eb-0be2-33ff-202790f0eabe.png)
先ほどのレポートに従い、このように記述します。
Forward URLはリダイレクト先になるので、localで動いてるwebサーバーに行くようなURLを指定します。
そしてProxyResponseとExpand Forward Pathをtrueにしたら設定完了です。
![basket-settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/f272d4aa-7f9e-d707-fa8f-2725fee2050f.png)
ではlocalでwebサイトが起動しているか確かめてみます。
![local_website.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/270733b4-c683-0bba-f565-0e09c21873b5.png)

# 情報収集(2)

案の定起動していました。少しこのwebサイトを調べてみましょう。
UIは真ん中にログイン画面があるだけの質素なデザインです。
その下にPowered by Maltrail (v0.53)とあるので、きっとMaltrailというのがサービス名でしょう。
少しこのサービスについて調べてみます。
するとこのようなレポートが見つかりました。(https://github.com/spookier/Maltrail-v0.53-Exploit)
内容は、Maltrail(v0.53)でOSコマンドインジェクションが行えるという内容のものです。
どうやらログインページのusernameというパラメーターに適切なサニタイジング処理が施されていないようです。
そこにコマンドを埋め込むことで、シェルが取れるというものです。

# Exploit(2)

今回はレポートにスクリプトが用意されていたので、それを使おうと思います。
C2サーバーに使うのはVillainです。(https://github.com/t3l3machus/Villain)
それでは、Villainのペイロードを生成していきます。
![villain_payload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/d01216af-2d91-3287-31c7-5a90a5896494.png)
Villainのペイロードを実行させるためにスクリプトを少し変更します。
変更と言っても、payload引数にVillainペイロードを入れただけです。
![exploit_script.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/7240c0ca-d933-69ed-e765-a95788c125bf.png)
それでは実際にスクリプトを実行してみましょう。
![rce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/8a4d9539-37fa-23f0-cfae-c7f6991e218e.png)
無事コマンドが実行され、コネクションが確立されました。
あとはフラグを取るだけです。
![user_flag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510659/98bfae3a-c243-ca6d-1b85-5112a1d1a33d.png)

# 感想

今回はヒントも無しで正真正銘一人で解けた最初のマシーンだったので、ものすごい達成感でした。
次はrootを取らなくてはいけないので、取れた時にはwriteupをあげたいと思います。