はじめに
今回はHackTheBox(HTB)のSauという問題をWalkthrough無しで自力で解けたので、どういう手順で解いたのかを記事にしてみようと思いました。
まだrootまでは取れておらず、sauユーザーに対するアクセスだけですが、今後rootが取れたら追加でwriteupも書いていこうと思います。
初めて自力で解けた問題なので、詳しく解説していこうと思います。
情報収集(1)
まずはポートスキャンを行い、空いているポートとサービス名を確認します。
sshとサービス名が不明な55555番ポートが開いています。少し調べてみたところ、request-basketsというサービスのデフォルトポートが55555と分かりました。(https://github.com/darklynx/request-baskets)
そしてこのサービスはHTTPリクエストを受け取るので、ブラウザーで開けないか試してみました。
無事ブラウザーで開けました。次はこのrequest-basketsが何をするものなのかを詳しく調べていきます。
公式の説明によると(上記のrepo参照)ウェブサイト上に任意の名前のページを作り、そこに来たリクエストを監視するというサービスだそうです。
どうやらこのページのことをbasketと呼ぶらしいです。
さらに続いて面白いことが書かれていました。このサービスはリダイレクト機能を有いしているらしいです。
これが気になり色々調べていると、ある脆弱性に関するレポートが見つかりました。(https://github.com/entr0pie/CVE-2023-27163)
このレポートによると、リダイレクト機能はwebサーバーがHTTPリクエストを任意の場所にリダイレクトし、その結果をリクエストを送った人に返すというもので
Proxyのような役割をする仕組みであり、このリダイレクト先はwebサーバーがいる内部ネットワーク内に対しても有効であるというものでした。
この機能を使って外部からのアクセスからが許可されていないwebサーバーに対してアクセスができるということです。
Exploit(1)
試しにこのrequest-basketsサービスを動かしているサーバーの中にローカルで動くwebサーバーがないか調べてみます。
まずは新しくbasketを作ります。
すると作成したbasketの設定画面に行けるようになるので、そこからリダイレクトの設定をしていきます。
先ほどのレポートに従い、このように記述します。
Forward URLはリダイレクト先になるので、localで動いてるwebサーバーに行くようなURLを指定します。
そしてProxyResponseとExpand Forward Pathをtrueにしたら設定完了です。
ではlocalでwebサイトが起動しているか確かめてみます。
情報収集(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引数にVillainペイロードを入れただけです。
それでは実際にスクリプトを実行してみましょう。
無事コマンドが実行され、コネクションが確立されました。
あとはフラグを取るだけです。
感想
今回はヒントも無しで正真正銘一人で解けた最初のマシーンだったので、ものすごい達成感でした。
次はrootを取らなくてはいけないので、取れた時にはwriteupをあげたいと思います。