第04回目は「RootMe」のwalkthroughやっていきます。私は2025年のBlack Fridayセールの際に課金したので、Premium Roomでも学習してます。今年も同時期にセールをしてくれればなあ・・・
<Task2 Reconnaissance> ※Task1はQuestionがないためtask2からやっていきます。
First, let's get information about the target.
ーQ1 Scan the machine, how many ports are open?ー
まずはターゲットマシンの偵察(nmap)からやっていきます。

↓

22,80番がopenしていますね。
【Answer:2】
ーQ2 What version of Apache is running?ー
nmapの結果からApacheのバージョンは「2.4.41」だとわかりますね。
【Answer:2.4.41】
ーQ3 What service is running on port 22?ー
nmapの結果から22番ポートを使用しているサービスは「SSH」だとわかりますね。
ーQ4 Find directories on the web server using the GoBuster tool.ー
Webページはこのようになっています。

公開されていないディレクトリを見つけるため「gobuster」を使っていきます。

今回使うワードリストはコマンドを参照(約22万件のワードリスト)
↓

uploads、css、js、panelなどのディレクトリが見つかりました。
ーQ5 What is the hidden directory?ー
gobusterの結果のうち、問題の答えになるのは「/panel」のようです。
【Answer:/panel/】
<Task3 Getting a shell>
Find a form to upload and get a reverse shell, and find the flag.
ーQ1 user.txtー
いきなりuser.txtと言われても(汗)。このWebサイト内に何かしらありそうなので、まずは見つけたディレクトリも含めてサーフィンしてみます。

「/uploads」 名前からしてアップしたファイルの保存先でしょうか?

「/panel」 アップロードフォームのようですね。せっかくなのでnmapで使用した「nmap.txt」をアップしてみましょう。

↓

アップロードできたみたいです。では/uploadsを見てみましょう。

nmap.txtがアップされていますね。この状況は使えそうです。
「リバースシェル」をアップロードして実行させられれば、ターゲットマシンに侵入できるかもしれません。準備をします。
リバースシェルはgithubやExploitDBなどから入手することができます。今回はgithubからダウンロードします。
検索BOXで「reverse PHP」でヒットします。今回使用するリバースシェルはコレです。

↓

↓

「Download raw file」からダウンロードします。

ダウンロードできました。内容を修正していきます。

「nano -l」でエディタに行番号を表示させるとわかりやすいです。49、50行目を修正します。
<after>

49行目を自分の端末のIPアドレスに変更(tun0)
50行目をリバース接続したときに待ち受けるポート番号に変更(そのままでもOK)
これで準備OKですね。このPHPファイルをアップしてみましょう。

↓

げ、拒否されましたね。文面から察するに「PHP」がダメなようです。
では「Burp Suite」を使って「アップロードできる拡張子の判定」をやってみます。
Burp Suiteを起動し「proxy」タブから「open browser」で専用ブラウザを起動します。そして先ほどのアップロードページまで進みます。

↓

そして再度、nmap.txtをアップします。(※判定のために必ず.txt拡張子のファイルをアップしてください)

アップロードが終わったらBurp Suiteに戻り、「Proxy」タブ内「HTTP history」の「POST」メソッドの履歴を確認(今回は#10)します。filename="nmap.txt"となっているのが見えていればOKです。

では#10のリクエストを選択して右クリックし「Send to Intruder」を選択します。そして「Intruder」タブに移動すると・・・

先ほどのリクエストが表示されているはずです。

Burp Suiteでは拡張子の判定のための辞書攻撃を行うことができます。拡張子のワードリストを利用して辞書攻撃を行い「レスポンスのデータ長」で判定します。やっていきます。
filename="nmap.txt"の「txtの部分」をドラッグして「Add\$」をクリックします。すると「\$txt\$」に変化します。この\$~\$部分を辞書攻撃していきます。

Add\$をクリックしたときに右側にメニューが開いたはずです。
「Load」から辞書ファイルを選択します。今回は「extensions-most-common.fuzz.txt」を使っていきます。

準備完了です。「Start attack」をクリックすると攻撃を開始します。ポップアップが出たらOKを押します。別ウィンドウが立ち上がります。

↓

↓

31件の拡張子の辞書攻撃が終わりました。結果を見てみましょう。

Lengthでソートすると、phpのみ明らかに数値が違うのがわかります。各列をダブルクリックして「response」を見るとさらに詳しくわかります。
以上の結果から今のところ、「phpのみ拒否される」ということがわかりました。また今回使った辞書に載っている拡張子は使用できる、ということもわかりました。
調べたところ、.phpは「.phtml」でも動作するらしいので、拡張子を変えてアップしてみます。今回の辞書にも載っていましたね。

↓

アップロードできました。アップロードしたファイルはTask3で見つけた「/uploads」にあるかもしれません。見てみましょう。

ありました。また辞書攻撃の残骸も多数ありました・・・。本来このような痕跡を残すのはよくありません、気に留めておきましょう。
さて、リバースシェルを動かしていきますが、待ち受けの準備をします。新しくターミナルを立ち上げて↓のコマンドを入力します。

4444はポート番号です。リバースシェルを編集した時のポートと同じにしないとつながりません。
準備ができました。先ほどのブラウザ上で「php-reverse-shell.phtml」をクリックします。

すると先ほど開いた(ncで待ち受けしていた)ターミナルにプロンプトが表示されました。リバースシェルでの接続成功です。
色々やってみましょう。ユーザ確認をしたり、ディレクトリをのぞいてみたり・・・。ある程度満足したら目当ての「user.txt」を探しましょう。

ありましたね。

【Answer:THM{Y0u_g0t_a_sh3ll}】
<Task4 Privilege escalation>
Now that we have a shell, let's escalate our privileges to root.
ーQ1 Search for files with SUID permission, which file is weird?ー
SUIDのついたファイルを探すいいコマンドがあります。↓

↓

たくさん出てきましたが、これのうち「weird(奇妙な)」になるのはどれでしょうか?こういう時は自分のPCと比べてみましょう。また今回は権限昇格(root)を目指しているので、/usr/bin配下のファイル(コマンド)に絞っていきます。
・
・
・
見比べたところ「/usr/bin/python2.7」が目につきました。これが正解のようです。
【Answer:/usr/bin/python】
ーQ3 root.txtー
SUIDがついたpythonを使って権限昇格を目指します。情報収集するサイトは「GTFOBins」です。
このサイトは、各コマンドを使って権限昇格やファイルの読み込みなどができる手法を掲載しています。早速pythonで調べてみます。

見たところいろいろできそうですね。「Shell」がrootへの権限昇格、「File read」が権限が必要なファイルを閲覧できる、というものです。今回は「root.txt」が目的なので、このどちらかが刺されば良さそうですね。

Shellをとるにはsudo、SUIDが付与されているときに↓のコマンドを実行すれば良さそうです。
Shellの方を試しましたがうまくいきませんでした。なので、File readの方をやっていきます。目的のroot.txtですが、おそらく一般ユーザ権限では見れない/rootディレクトリにある可能性があります。とりあえず「/root/root.txt」であると信じでやってみます。

↓

おお、でました。これがroot.txtの中身です。
【Answer:THM{pr1v1l3g3_3sc4l4t10n}】
<今回の要点と感想>
・リバースシェル
・GTFOBins
<独り言>
shellをとれなかったのは残念です。他のwalkthroughをみて原因がわかったら追記もしくは別記したいと思います。





