Harekaze CTF 2018やってみた

久しぶりにCTFやれる、まとまった時間が作れたので参加してみた。全体での順位は230ptで131/447だった。修行が足りなすぎる。

ObfuscatedPasswordChecker

配布されるsrc.zipを展開してみるとhtmlファイルとjsファイルが含まれている。htmlファイルをブラウザで開いてみるとパスワードフォームが表示される。ここに何かの入力値を入れると、何か起きそうだと考えた。

試しに開発者ツールのNetworkタブを開きながら、適当な文字列を入力してボタンをおしてみる。タブ内に変化はなく、リクエストは送信されていないと分かる。つまり、このhtmlとjsで構成されるクライアント側で完結するアプリだと考えられる。

次に、JavaScriptの挙動を追跡してみる。ブラウザの開発者ツールから「ボタンが押された時」に関するイベントを探してみる。

bundle.jsの1行目にボタンを押した時の処理があることが分かる。実際にbundle.jsを表示して整形してみる。

次にボタンが押された時に、「入力値がどのように判定されているか」を調べてみる。ボタンが押された後の処理は311行目から319行目までの範囲にかかれている。

この中にif文がふくまれている。このソース全体は軽めな難読化がされているのでif文の内部の処理を分析してみる。

ブラウザのConsoleで変数やメソッドなどを展開できるので、これを使って値の中身を確認する。するとsuccessという文字列が314行目で代入されていることが分かる。次に315行目ではcongraz! the flag is: という文字列と変数_0x256968の値が文字列結合されていることが分かる。

つまり、変数_0x256968がFLAGに関わっていると考えられた。この変数に着目すると313行目で変数_0x5d7c01と比較されており、305行目で宣言と代入が行われていることが分かる。

試しに305行目の代入値をConsoleで確認してみるとFLAGの中身であった。おそらく変数_0x5d7c01がブラウザのフォームでの入力値だったと考えられる。

HarekazeCTF{j4v4scr1pt-0bfusc4t0r_1s_tsur41}

Lost_data

ファイルlost_data.zipを解凍すると xxxxx.zip と data.zipが出てくる。さらに data.zip を解凍すると1, 2, 3というファイルが出てくる。テキストエディタなので開いてみるとファイルがバイナリファイルであることが分かる。

バイナリエディタやhexdumpなどで中身を覗いてみるとPNGファイルにみられるチャンクとよばれる構造が確認できる。ファイル構造を確認するとヘッダにPNGの特徴であるASCII表現された「PNG」が見られない。

hexdump -C 1
00000000  89 2e 2e 2e 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |............IHDR|
00000010  00 00 00 6f 00 00 00 6f  01 03 00 00 00 d8 0b 0c  |...o...o........|
00000020  23 00 00 00 06 50 4c 54  45 7d c7 ff ff ff ff 97  |#....PLTE}......|

そこで、バイナリエディタでその部分を書き換える。

hexdump -C ../../data/1
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 00 00 6f 00 00 00 6f  01 03 00 00 00 d8 0b 0c  |...o...o........|
00000020  23 00 00 00 06 50 4c 54  45 7d c7 ff ff ff ff 97  |#....PLTE}......|

そして、画像ビューワなどで開くと2次元コードの画像が計3枚でてくる。これらをスキャンして結合すると HarekazeCTF{Y0u_G0t_FuNNy_F1ag_?DF?_T?_is_xxxxx} が出てくる。

この後に xxxxx を置き換えることが必要になるが、ファイル xxxxx.zip が関連していることは分かったが何をすればいいのか方針が立たない。ひとまず放置しておいた。

後からヒントでファイルシステムという単語と xxxxx.zipに含まれるファイル一覧から何となく「FAT(16|32|64)」あたりで試したらフラグが落ちてきた。

HarekazeCTF{Y0u_G0t_FuNNy_F1ag_?DF?_T?_is_FAT32}

Sokosoko Secure Uploader

ソースコードを読んでSQLiであることまで分かった。入力値があらかじめ決められた形式でないと弾かれると特定して、それに合う形式で入力値を組み立てるところで上手く行かずに時間切れ。いろいろトライした形跡が残っていたので貼っておく..。
'OR 2=10-1OR3-2=22-(100-1)OR
id LIKE'5a%'
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
21313134-3413-3134-3143-311232131231
'OR 1=1;--222-2222-2222-222222222222
'OR id LIKE
'|| id LIKE '9e5a%' --    -    -    -
1=1 --222-2222-2222-22222222222'

21313134-3413-3134-3143-311232131231
'||1=100-1000-1000-1000-1||
'OR id/*-0000-0000-0000-*/9e5a

21313134-3413-3134-3143-311232131231
'OR id BETWEEN '9e5a0' AND '9e5a1'

21313134-3413-3134-3143-311232131231
'OR id LIKE '%e5a%';
'OR id LIKE CONCAT('%e5a%';
あとでWriteUp見たらコメントアウトで良かったと知って絶望した。
もっと精進していきたいと思った。あとCTF面白いね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です