TryHackMe Writeup：Mr Robot CTF

# はじめに
今回取り組んだのはMr Robot CTFです！
仮面？のような顔をした紳士が特徴的ですね～

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/fbbf1c55-a3c4-3f13-eded-b9de665f36e4.png)


https://tryhackme.com/r/room/mrrobot

# Task 1

OpenVPNでTryHackMeの環境にアクセスする手順が書かれています。
やはり紳士ですね笑


# Task 2 Hack the machine
ここからが本題です！

## What is key 1?

まずはnmapから! 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/49a8f94d-0b3b-023a-3e18-527148767f51.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/2d039808-54dc-2f9f-03ec-a0c16a11db3d.png)


SSHとHTTP,HTTPSができるみたいですね


さっそくHTTP接続すると、何やら怪しいWebサイトが。。。
ちなみにHTTPSで接続しても同じWebサイトです

>12:43 <ミスター・ロボット> こんにちは、友よ。あなたがここに来たのなら、何か理由があって来たのでしょう。まだ説明できないかもしれませんが、あなたの中には、この世界に疲れ果てている部分があります... あなたが働く場所、会う人、憂鬱な銀行口座の残高をどう空にするか決める世界。これを読むために使っているインターネット接続でさえ、あなたの存在を徐々に削り取り、犠牲にしています。言いたいことがあるでしょう。もうすぐ私はあなたに声を与えます。今日、あなたの教育が始まります。


コマンドがうてるようですが、いろいろ見て回っても、めぼしいものはなかったので、dirbをしてみます


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/34dbd17b-ec6b-f2b3-763c-80eca12ca826.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/d130bdb7-d152-9b21-3dd9-08d530014103.png)

けっこういろいろあるのですが、ヒントに`Robots`とあったので、アクセスしてみます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/98f2a7a2-b6bf-6f8c-13d7-cbc432d834f2.png)

1つ目のKeyがありました！！


## What is key 2?

Robotsに`fsocity.dic`の記載もあったので、アクセスしてみるとファイルをダウンロードできました
みてみると、858160個のワードリストのようです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/854b539a-25c0-b6a0-f3dd-241d2ad20666.png)



ヒントには以下のような文章があります、、
>この単語リストには何か怪しいところがあります...なぜこんなに長いのでしょうか?


内容をみていくと、同じワードリストが続いているみたいです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/f5e576ba-3b1e-fc01-4401-8d6955b10971.png)

重複を削除して、新しいテキストファイルとして保存します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/2a3bb02b-cd9b-7c53-839e-5b66b9ffe36b.png)


それでも1万行ありますね、、、
明らかに総当たり攻撃のワードリストです。。。


dirbをしたときに`/login`があったので、適当に入力してみると、ユーザー名が違うとエラーがでました
ということは、ユーザー名があっていれば、別の表示になるんですね～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/9426a954-12df-ab0b-9edc-8ab328fed51d.png)


URLのパラメータには変化がなかったので、Burp Suiteで詳細な情報をみていきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/63a5bfba-f284-ec8e-af62-5dd8a97235a4.png)


他の方のWriteupも見つつ（カンニング）、以下のコマンドでブルートフォースしてきます
https://qiita.com/kk0128/items/fb2dd097b4f9d37caea0

```
hydra -L /home/kali/Documents/THM/Medium/MrRobotCTF/wordlist.txt -p test 10.10.123.213 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.123.213%2Fwp-admin%2F&testcookie=1:Invalid username" -t 30
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/645eb5fa-52fa-17fd-9777-47cf5c50fdca.png)

参考にしたWriteupに記載されていた内容にならってパラメータの補足をします
- `-L /home/kali/Documents/THM/Medium/MrRobotCTF/wordlist.txt`
    - ユーザー名をwordlist.txtから総当たりで選んでいきます
- `-p test`
    - パスワードは`test`を利用します
- `10.10.123.213 `
    - 攻撃対象のIPアドレスです
-  http-post-form
    -  POSTリクエストをしていきます
    -  構文は、[リクエストパス]：[POSTパラメータ]：[失敗時のメッセージ]
        - リクエストパス： `/wp-login.php`
    -  POSTパラメータ：`log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.123.213%2Fwp-admin%2F&testcookie=1`
    -  失敗時のメッセージ：`Invalid username`

パスワードは適当に`test`を入れているだけなので間違っていますが、ユーザー名があっていれば失敗時のメッセージが異なるため合っていると判定されます！

Hydraでみつかった`Elliot`を入れてみたところ、`Invalid Username`という表記はなくなっていますね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/b3839afc-9ec2-dd81-12d5-18ee606cf7ee.png)


同様にして、パスワードを探していきます！

```
hydra -l elliot -P  /home/kali/Documents/THM/Medium/MrRobotCTF/wordlist.txt  10.10.207.128 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.207.128%2Fwp-admin%2F&testcookie=1:ERROR" -t 30
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/09b7a818-5f31-dd81-3240-a2792ebaf683.png)


### 補足

Writeupに`/license`にログイン情報があると記載があったので、みてみると、ソースコードにBASE64でエンコードされていると思われる文字列が、、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/2a67a472-ae60-813d-46c0-1e5d8d5c021a.png)

さっそくデコードしてみると、あからさまなログイン情報がwww
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/d3c52f1c-5b7a-7b62-555a-dc455f769f42.png)

AppearanceのEditorでPHPファイルを直接編集できるみたい！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/1d715f0e-8ae8-e54c-ffdc-50d46094d45f.png)

404.phpをまるごと以下のPHPのリバースシェルに置き換え（ipアドレスはOpenVPNで払い出されているものを利用。まじで注意、、、）
`/usr/share/webshells/php/php-reverse-shell.php`

なぜ404.php?と思うかもしれませんが、リバースシェルは実行しないと意味がないです。404なら存在しないURLをたたけば、実行されるので、使い勝手がいいんです！

`daemon`で入ることができました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/060768c1-fb5f-2875-c5eb-02eefa0e3720.png)

key-2-of-3.txtは権限がなくてみれない、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/606ec094-029a-3f91-efb7-79b3f7134afd.png)


その代わり`password.raw-md5`がみれたので、ハッシュ化されたパスワードをClackStationでクラックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/46155c36-82d6-d006-10fd-7014ebc57281.png)

クラックしたパスワードがこちら（これはこれで入力しづらそう、、、）
`abcdefghijklmnopqrstuvwxyz`

root権限になろうと思ったのですが、terminalからしか`su`できないみたい。。。
どういうことだ、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/8d663daa-1921-a0aa-5da5-3ee459c103ba.png)



Writeupを見ていると、疑似端末をリバースシェルに割り当てる必要があるのだとか、、、
疑似端末とは
>仮想コンソール、端末装置、シリアルポートハードウェアなどを使用しないテキスト端末のインターフェイスを提供する。これらのハードウェアの代わりに、擬似端末セッションの役割をソフトウェア（プロセス）が代用する。

引用元：https://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E7%AB%AF%E6%9C%AB

個人的な理解としては以下になりました（あっているか分かりません、、、）
terminalからしか実行できない
＝端末からしか実行できない
＝リバースシェルのリモートからでは実行できない


そこで、ptyで疑似端末をリバースシェル上で構築して、その疑似端末でシェルを起動させます
```bash
python -c 'import pty; pty.spawn("/bin/sh")'
```

robotアカウントでログインできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/a15c6f39-537a-f9e2-545f-ae5415ea70f0.png)

key-2-of-3.txtも無事に確認できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/cb494316-7709-7914-41c7-a4271b6b0d53.png)


## What is key 3?

おそらく最後はRoot権限だろうということで、robotアカウントがRoot権限で実行できるコマンドを探しましたが、一つもなかったです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/199d6268-7102-788a-52ec-8e5471c03474.png)


そこで、所有者の権限で実行できるSUIDのビットがたっているファイルを探します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/f2b161d9-196f-77d0-9846-53261a4925a9.png)

ヒントに`nmap`とあったので、nmap


GTFOBinsという権限昇格するためのコマンドを集めたサイトがあることもここで学びました（恐ろしいサイトだ）
https://gtfobins.github.io/

そこのNmapを参考にしたら、Root権限がとれました！
https://gtfobins.github.io/gtfobins/nmap/


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/c0e625a9-f5ab-026e-ef38-fa058c230eab.png)

key-3-of-3.txtの中身を確認すれば、Flagがあります！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/0c414289-eb00-34b0-6970-a69f25b89fb2.png)


# 最後に

今回学んだことは以下4つです！！
- HydraでHTTP POSTを利用したブルートフォース攻撃の方法
- 直接PHPを編集できるということはリバースシェルを埋め込むチャンス
- 疑似端末の理解
- GTFOBinsという危ないサイトがある

# 参考にしたWriteup

https://qiita.com/kk0128/items/fb2dd097b4f9d37caea0