0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

『初心者が解説するTryHackMe』第04回「RootMe」walkthrough

0
Posted at

 第04回目は「RootMe」のwalkthroughやっていきます。私は2025年のBlack Fridayセールの際に課金したので、Premium Roomでも学習してます。今年も同時期にセールをしてくれればなあ・・・

スクリーンショット 2026-04-22 195307.png

<Task2 Reconnaissance> ※Task1はQuestionがないためtask2からやっていきます。
First, let's get information about the target.

ーQ1 Scan the machine, how many ports are open?ー
 まずはターゲットマシンの偵察(nmap)からやっていきます。
スクリーンショット 2026-04-22 204600.png
 ↓
スクリーンショット 2026-04-22 204647.png
 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ページはこのようになっています。
スクリーンショット 2026-04-22 205626.png

 公開されていないディレクトリを見つけるため「gobuster」を使っていきます。
スクリーンショット 2026-04-22 210205.png
 今回使うワードリストはコマンドを参照(約22万件のワードリスト)
 ↓
スクリーンショット 2026-04-22 211313.png
 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サイト内に何かしらありそうなので、まずは見つけたディレクトリも含めてサーフィンしてみます。

スクリーンショット 2026-04-22 211636.png
 Topページのソースです。特に何もなさそう。

スクリーンショット 2026-04-22 211742.png
 「/uploads」 名前からしてアップしたファイルの保存先でしょうか?

スクリーンショット 2026-04-22 211827.png
 「/panel」 アップロードフォームのようですね。せっかくなのでnmapで使用した「nmap.txt」をアップしてみましょう。
スクリーンショット 2026-04-22 212256.png
 ↓
スクリーンショット 2026-04-22 212319.png
 アップロードできたみたいです。では/uploadsを見てみましょう。
スクリーンショット 2026-04-22 212346.png
 nmap.txtがアップされていますね。この状況は使えそうです。

 「リバースシェル」をアップロードして実行させられれば、ターゲットマシンに侵入できるかもしれません。準備をします。
 リバースシェルはgithubやExploitDBなどから入手することができます。今回はgithubからダウンロードします。
 検索BOXで「reverse PHP」でヒットします。今回使用するリバースシェルはコレです。
スクリーンショット 2026-04-22 213513.png
 ↓
スクリーンショット 2026-04-22 213543.png
 ↓
スクリーンショット 2026-04-22 213613.png
 「Download raw file」からダウンロードします。
スクリーンショット 2026-04-22 213921.png
 ダウンロードできました。内容を修正していきます。

スクリーンショット 2026-04-22 214452.png
 「nano -l」でエディタに行番号を表示させるとわかりやすいです。49、50行目を修正します。

<before>
スクリーンショット 2026-04-22 214623.png

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

スクリーンショット 2026-04-22 215113.png
 ↓
スクリーンショット 2026-04-22 215054.png
 げ、拒否されましたね。文面から察するに「PHP」がダメなようです。

 では「Burp Suite」を使って「アップロードできる拡張子の判定」をやってみます。
Burp Suiteを起動し「proxy」タブから「open browser」で専用ブラウザを起動します。そして先ほどのアップロードページまで進みます。
スクリーンショット 2026-04-24 203738.png
 ↓
スクリーンショット 2026-04-24 203230.png

 そして再度、nmap.txtをアップします。(※判定のために必ず.txt拡張子のファイルをアップしてください)
スクリーンショット 2026-04-24 203543.png

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

 では#10のリクエストを選択して右クリックし「Send to Intruder」を選択します。そして「Intruder」タブに移動すると・・・
スクリーンショット 2026-04-24 204925.png

 先ほどのリクエストが表示されているはずです。
スクリーンショット 2026-04-24 205252.png
 Burp Suiteでは拡張子の判定のための辞書攻撃を行うことができます。拡張子のワードリストを利用して辞書攻撃を行い「レスポンスのデータ長」で判定します。やっていきます。

 filename="nmap.txt"の「txtの部分」をドラッグして「Add\$」をクリックします。すると「\$txt\$」に変化します。この\$~\$部分を辞書攻撃していきます。
スクリーンショット 2026-04-24 205729.png
Add\$をクリックしたときに右側にメニューが開いたはずです。

 「Load」から辞書ファイルを選択します。今回は「extensions-most-common.fuzz.txt」を使っていきます。
スクリーンショット 2026-04-24 210316.png

 準備完了です。「Start attack」をクリックすると攻撃を開始します。ポップアップが出たらOKを押します。別ウィンドウが立ち上がります。
スクリーンショット 2026-04-24 210433.png
 ↓
スクリーンショット 2026-04-24 210631.png
 ↓
スクリーンショット 2026-04-24 211243.png

 31件の拡張子の辞書攻撃が終わりました。結果を見てみましょう。
スクリーンショット 2026-04-24 211415.png
 Lengthでソートすると、phpのみ明らかに数値が違うのがわかります。各列をダブルクリックして「response」を見るとさらに詳しくわかります。


スクリーンショット 2026-04-24 211548.png


スクリーンショット 2026-04-24 211630.png

 以上の結果から今のところ、「phpのみ拒否される」ということがわかりました。また今回使った辞書に載っている拡張子は使用できる、ということもわかりました。

 調べたところ、.phpは「.phtml」でも動作するらしいので、拡張子を変えてアップしてみます。今回の辞書にも載っていましたね。
スクリーンショット 2026-04-24 214232.png
 ↓
スクリーンショット 2026-04-24 214405.png
 アップロードできました。アップロードしたファイルはTask3で見つけた「/uploads」にあるかもしれません。見てみましょう。

スクリーンショット 2026-04-24 214748.png
 ありました。また辞書攻撃の残骸も多数ありました・・・。本来このような痕跡を残すのはよくありません、気に留めておきましょう。

 さて、リバースシェルを動かしていきますが、待ち受けの準備をします。新しくターミナルを立ち上げて↓のコマンドを入力します。
 スクリーンショット 2026-04-24 215137.png
 4444はポート番号です。リバースシェルを編集した時のポートと同じにしないとつながりません。

 準備ができました。先ほどのブラウザ上で「php-reverse-shell.phtml」をクリックします。
スクリーンショット 2026-04-24 215500.png
 すると先ほど開いた(ncで待ち受けしていた)ターミナルにプロンプトが表示されました。リバースシェルでの接続成功です。

 色々やってみましょう。ユーザ確認をしたり、ディレクトリをのぞいてみたり・・・。ある程度満足したら目当ての「user.txt」を探しましょう。

スクリーンショット 2026-04-24 220159.png
 ありましたね。
スクリーンショット 2026-04-24 220214.png
【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のついたファイルを探すいいコマンドがあります。↓
スクリーンショット 2026-04-24 220856.png
 ↓
スクリーンショット 2026-04-24 220812.png
 たくさん出てきましたが、これのうち「weird(奇妙な)」になるのはどれでしょうか?こういう時は自分のPCと比べてみましょう。また今回は権限昇格(root)を目指しているので、/usr/bin配下のファイル(コマンド)に絞っていきます。
 ・
 ・
 ・
 見比べたところ「/usr/bin/python2.7」が目につきました。これが正解のようです。
【Answer:/usr/bin/python】

ーQ3 root.txtー
 SUIDがついたpythonを使って権限昇格を目指します。情報収集するサイトは「GTFOBins」です。

 このサイトは、各コマンドを使って権限昇格やファイルの読み込みなどができる手法を掲載しています。早速pythonで調べてみます。

スクリーンショット 2026-04-25 145250.png
 見たところいろいろできそうですね。「Shell」がrootへの権限昇格、「File read」が権限が必要なファイルを閲覧できる、というものです。今回は「root.txt」が目的なので、このどちらかが刺されば良さそうですね。

スクリーンショット 2026-04-25 151500.png
 Shellをとるにはsudo、SUIDが付与されているときに↓のコマンドを実行すれば良さそうです。

スクリーンショット 2026-04-25 151515.png
 File reddも同様ですね。

 Shellの方を試しましたがうまくいきませんでした。なので、File readの方をやっていきます。目的のroot.txtですが、おそらく一般ユーザ権限では見れない/rootディレクトリにある可能性があります。とりあえず「/root/root.txt」であると信じでやってみます。
スクリーンショット 2026-04-25 150603.png
 ↓
スクリーンショット 2026-04-25 150611.png
 おお、でました。これがroot.txtの中身です。
【Answer:THM{pr1v1l3g3_3sc4l4t10n}】

<今回の要点と感想>
・リバースシェル
・GTFOBins

<独り言>
 shellをとれなかったのは残念です。他のwalkthroughをみて原因がわかったら追記もしくは別記したいと思います。

 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?