こんにちは、ゆるいぞITチャンネルです。
それでは今回はターゲットサーバの操作を奪った後に管理者権限を取得するまでの流れを解説していきたいと思います。
管理者権限というのは「root権限」や「admin権限」とか言われたりもしますが、要するに「その権限があると何でもできちゃいますよ」っていう権限のことになりますね。
今回はTryhackmeの「RootMe」という演習環境(ルーム)を使用します。
「ハッキングラボの初期構築」、「TryHackMeへの接続方法」については下記のページをご参照ください。
※Youtubeでは動画版をご視聴いただけます。
- ハッキングスキルについて知りたい
- セキュリティの知識を学習したい
- ITインフラの知識を学習したい
※実務や演習等を除き、インターネット上のサーバへクラッキングすることは違法行為となりますのでご注意ください。
1.ラボ環境構築の流れ
ソフトウェア
- 仮想環境 : Virtual Box
- 攻撃用サーバ : Kali Linux
- ターゲットホスト : TryHackMeのWebサーバ
演習環境

2. 演習の流れ
大まかな流れとしてはKali LinuxからTryHackMeのWebサーバに接続し、サーバ内に仕込まれたフラグを回収することでゴールを目指すという流れになっています。
最終的な目標はターゲットサーバに保存されている「user.txt」と「root.txt」に書かれたフラグ(記載内容)の入手なります。
3. 偵察(Reconnaissance)

ゆるいぞIT
まずはターゲットホストに対する偵察を実施していきましょう。
問1:Scan the machine, how many ports are open?
「ターゲットマシンをスキャンした結果いくつのポートが開いているでしょうか?」
まずはターゲットホストに対してポートスキャン(nmap)を実行して解放されているポートを確認しましょう。
$ nmap -Pn -sS -sV -T4 <ターゲットホストのIPアドレス>
スキャン結果から「22番のSSH、80番のHTTP」が確認できたので、問1の答えは「2つ」になります。

問2:What version of Apache is running?
「実行されている Apache のバージョンは何ですか?」
これはスキャン結果(nmap)のHTTPの項目を見ると答えが分かります。
※「Apache」はWebサーバのソフトウェアのこと

問2の答えは「Ver2.4.29」になります。
問3:What service is running on port 22?
「ポート22で実行されているサービスは何ですか?」
こちらもスキャン結果(nmap)からポート22はSSHということが分かります。

問3の答えは「SSH」になります。
問4・問5:Find directories on the web server using the GoBuster tool. / What is the hidden directory?
「Gobusterを実行して隠しディレクトリを見つけましょう。」
設問の通りGobusterを実行してとディレクトリ情報を取得してみましょう。
$ gobuster dir -u http://10.10.136.220 -w /usr/share/wordlists/dirb/common.txt
スキャン結果を見てみると「/panel」、「/uploads」が隠しディレクトリとして見えています。

問4・問5の答えは「/panel、/uploads」になります。
4. シェルの取得(Getting a shell)

ゆるいぞIT
次のフェーズではシェルの取得を実施します。
リバースシェルの詳細については下記ページで解説しているので、そちらをご参照ください。
問1:user.txt
「一つ目(user.txt)のフラグを取得しなさい。」
フラグ取得系の演習問題は、基本的には偵察フェーズで見つけた情報を辿っていくとゴールできるようになってるので、まずはGobusterで見つけたディレクトリを見てみましょう。
/panel にアクセスすると「Select a file to upload」ということで、演習サーバにファイルをアップロードできることが分かります。

試しに適当なファイルをアップロードしてみましょう。

/uploads のディレクトリにアクセスしてみると、アップロードしてファイルが確認できます。

ファイルをアップロードできるということは、操作権限を奪うためのシェルを仕込んでターゲットホストの操作を奪取できるかもしれませんので、その方法を試してみましょう。
今回はPHPベースのシェルがKali Linuxにデフォルトで用意されているので、そちらのファイルを使用して実行してみます。
/usr/share/webshells/php/php-reverse-shell.php

IPアドレスの部分だけKali Linuxのアドレスに変更しておきましょう。
ポート番号はデフォルトのままで問題ありません。

このファイルを先ほどの「file to upload」のページからアップロードしてみると…

「PHPは使用できません」というエラーが表示され、アップロードすることができませんでした。

「.exe」や「.php」などの怪しいプログラムが実行できそうなファイルはホスト側で制限しておりブロックされる可能性が高いです。
こういった場合は拡張子の変更が有効な手段になります。
ファイルの拡張子を「.phtml」に変更して再度アップロードしてみると…
$ mv php-reverse-shell.php php-reverse-shell.phtml
今度は問題なくアップロードできましたね。


他にも「.pht .phtml .php3 .php4 .php5 .inc」といった拡張子が使えたりします。
シェルのアップロードが完了したので、あとはKali Linux側で待ち受け処理を実行しておきます。
$ nc -lvnp 1234
これで操作を奪うための準備ができたので、先ほどアップロードしたシェルを実行してみましょう。
「php-reverse-shell.phtml」をダブルクリックします。
「connect to <IPアドレス>」ということで、Kali Linux側で操作できるようになったら接続成功になります。

これで操作権限が奪えたので目的である「user.txt」を取得しましょう。
$ find / -name ‘user.txt’

一つ目のフラグを取得することができました。
$ cat /var/www/user.txt

問1の答えは「THM{y0u_g0t_a_sh3ll}」になります。
5. 権限昇格(Privilege escalation)

ゆるいぞIT
最後に権限昇格を実施してroot権限を取得していきましょう。
問1:Search for files with SUID permission, which file is weird?
「SUID権限を持ったファイルを検索してみましょう。」
まずはSUID権限を持ったファイルを探してみましょう。
$ find / -perm -u=s -type f 2>/dev/null
検索が完了するとSUID権限がついたファイルがズラズラと表示されますが、注目するのは「/usr/bin/python」になります。
「/usr/bin/python」にSUID権限がついているとPythonスクリプトが実行し放題ということになります。
なので今回はPythonを足掛かりとしてroot権限に昇格してみましょう。
問1の答えは「/usr/bin/python」になります。
問2:Find a form to escalate your privileges.
「root権限へ昇格するための方法を見つけましょう。」
以前も使用しましたが「GTFOBins」というサイトに権限昇格についてのテクニックが纏まっているので、そちらのサイトを参考にします。
/python にSUIDが付与されている場合は、下記コマンドを実行することでroot権限になれるようなので実行してみましょう。
/usr/bin/python -c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’

何も表示されませんが権限を確認してみるとroot権限に昇格していることが分かります。

これで目的だったroot権限に昇格でたので、最後に「root.txt」を確認して全てのタスクが完了になります。
$ cd /root
$ cat root.txt

問2の答えは「THM{pr1v1l3g3_3sc4l4t10n}」になります。
ということで、今回は管理者権限を取得するまでの一連の流れを実施してみました。
初見だと「シェルの取得」や「権限昇格」のあたりが少し難しいと思いますが、落ち着いて情報を辿っていくと必ずゴールまで辿り着けるようになっているので、興味が出た方は各サイトを参考に挑戦してみてはどうでしょうか。
ということで、今回はここまでにしたいと思います。
それではまた次回お会いしましょう!
