SECCON 2015 ONLINE CTF参加しました

チームp3r0zで参加してました.2000点,70位です.

チームメンバーはid:oboenikui, id:yueki1993, @bonprosoftの4人. 後ろの二人は2日目からの参加です.

解いた問題

チームで解いたのは以下のとおりです.

  • Start SECCON CTF
  • SECCON WARS 2015
  • Unzip the file
  • Reverse-Engineering Android APK1
  • Connect the server
  • Command-Line Quiz
  • Entry form
  • Exec dmesg
  • Decrypt it
  • Reverse-Engineering Android APK 2
  • Steganography 1
  • Steganography 3
  • 4042
  • Last Challenge

この内私が担当してたのがUnzip the file, Connect the server, Command-Line Quiz, Steganography 3, 4042です. SECCON WARSとExec dmesgとSteganography1も少し関わったので書いておきます.

id:oboenikuiが担当した問題はこちらに書いてあります. oboenikui.hatenablog.com

Write Up

僕が解いた問題は他の人も解いてるのであまり意味が無いようにも思いますが, とりあえずWriteUpを載せておきます.

SECCON WARS 2015

去年もあったなぁと思いながらYoutubeみたらQRコードが浮かんでいたのですぐわかりました. STARWARSによくある後ろに流れるアレの上に浮かんでいるので,QRコードリーダーでは読み込めないので どうにかして画像を重ねる必要があります. とりあえずとっさに画面をGIFキャプチャできるソフトを探して@GifGrabberというソフトを見つけたのでGIFをとってoboenikuiに投げました. 続きは上記ブログで.

Unzip the file

結論から言うと既知平文攻撃でした. とりあえず空いていたWindowsマシン上でLhaplusを使って総当りをしかけておきながら,zipの脆弱性を探します.「既知平文攻撃」が速攻でヒットしますが,unzip.zip内にある3つのファイル"backnumber08.txt","backnumber09.txt","flag"のどれも心当たりがありません. なにか別の攻撃方法ではないかとzipの構造を調べていましたが,ふと"backnumber08"でググってみようと思いつきます. (SECCON開催当時)トップでヒットしたのはCEDECのメルマガでしたが,SECCONもメルマガを出していたことを思い出しました. SECCONのバックナンバーからbacknumber08.txtを探し, pkclackを使ってパスワードを解除しました. パス解除後に出たflagをfileコマンドでみるとまたzipなのでunzipしたら,実はdocxファイルだったことが展開内容からわかります. ということでfile.docxに名前を書き換えて開くと真っ白なドキュメントが開かれます. あれ,間違ったか,メタ情報なのかなと思いましたが,ただ白文字で書かれていただけでした.

SECCON{1s_th1s_passw0rd_ weak?}

Connect the server

コンテスト中一番の謎だったんですが,ぶっちゃけコレは僕の手柄というより多分id:yueki1993の手柄でしょう. とりあえず問題文でアクセスしろと言われた login.pwn.seccon.jp:10000netcatsshを試しましたが空振りに終わりました.

% netcat login.pwn.seccon.jp:10000
Error: Couldn't resolve host "login.pwn.seccon.jp:10000"
% ssh -p 10000 login.pwn.seccon.jp
# 応答なし

そこで一旦放置して他の問題に取り組んでいる間にslackにyueki1993より

login.pwn.seccon.jp:10000
netcat

という謎の2行の書き込みがありました.てっきりなんとかして解けたんだと思って問題リストを見ましたが,待っても解答マークが付きません. おかしいな,と思ってURLをクリックしたらいきなりダウンロードが始まり,その中にflagが書いてありました. 別にmac付属のテキストエディタで普通に開けたので拍子抜けでした. 彼の行動と問題のアッサリ加減にコンテスト中首をひねっていました.

コンテスト後に聞いてみたところ,"まだ用事の真っ最中でできないけどどうせこれnetcatやろ"と思ってとりあえず投げたらしいです. netcatできなかったけど? と聞いて彼のmacで試してみたらダウンロードされたテキストファイルのflag以外の部分が表示されました. どうやら制御文字でflagが隠されており,それをどうやって読むかという問題だったようです.

SECCON{Sometimes_what_you_see_is_NOT_what_you_get}

Command-Line Quiz

SECCON側が用意したサーバーにログインし,置いてあるテキストファイルを開いてクイズの答えを環境変数に入れることの繰り返し. 正しい答えを環境変数に入れることで次の問題のテキストが開けるようになる仕組みです.問題の内容や答えよりどういう仕組みなのかが気になりました. クイズの内容は本当に簡単なコマンドに関するもので,"テキスト先頭一行目を開く時に使うコマンドは","テキスト末尾一行目を開く時に使うコマンドは","テキストを検索するときに使うコマンドは","テキストを編集するときに使うコマンドは"だとかだったと思います. それぞれ"head","tail","grep","awk"と答えると最後のテキストが開けて,「flag.txtはテキスト編集するコマンドを使えば開けるよ」とだけ書かれていました. とりあえずbinとsbinを覗いてawk以外にテキストの編集に使えそうなコマンドはvi, ed, sedあたりでした. 全部試すつもりでしたが,まぁawkつったらsedだろ,と一番初めに試したsedが正解でした.

SECCON{CaitSith@AQUA}

Exec dmesg

思い出したくない
僕がvirtualbox内でLinux内を探す一方でoboenikuiはisoをマウントして元のtinycorelinuxイメージとdiffをとっていました. 彼がbusybox内のenfthだと見つけてくれたので実行しましたが,ただのdmesg実行結果と差がわかりませんでした. まだここから何ステップかあるのでは? と萎えて諦めていたら「ちょっと貸して……(目grep)……あるじゃん」と言われました.
もうやだぼくしーてぃーえふやめる

Steganography 1

gpjbってなんだ?と思いfileコマンドを使った所gifと判定されたのでgifとして開くと"SECCON{"とのみ書かれた画像が開けます. の割には8.4MBと大きいファイルだったので中に埋め込まれているんだろうなぁとgifのファイル終端を検索します. 画像バイナリのマジックナンバー等についてはここにまとめられていて便利でした. qiita.com macで参戦していたのでバイナリエディタは0xEDを普段使っているのですが,何故か検索がうまくできません. それにバイナリの切り貼りも非常にしづらかったので,面倒になってwindows使ってたid:oboenikuiに投げました
こちらも続きは上記ブログで.

誰かmacで使える便利なバイナリエディタ知らないですか? もしくはemacsのhexlモードの機能をまとめてあるページを募集です.

投げた後に「全然足りないけど……」と言われて「じゃあjpegpngも……」と言いかけたところで問題タイトルの「MrFusion」と拡張子「gpjb」の意味を理解しました, gif, png, jpeg, bmpのfusionだったんですね.

Steganography 3

右下にペイントが開かれててこのスライドの75ページ目を思い出しました

www.slideshare.net まんまでした.

SECCON{the_hidden_message_ever}

4042

問題文に書かれていた2005年と問題タイトルの4042で検索したところ,すぐにRFC4042のUTF-9というジョークが見つかりました ここに符号化方法について書いてあったので,pythonでUTF-9からUTF-8化するコードを書きました. どうやって復号するのか最初は戸惑いましたが,non-network.txtには0から7までの数字しか書かれていないので3bitであることがすぐわかります. つまり数字を3つごとに区切れば9bitのバイナリが得られます.上記URLに先頭の1bitで可変長区切りを判断し,下位8bitがUTF-8の8bitになるとあります. pythonのint関数とunichr関数が非常に便利でした.

SECCON{A_GROUP_OF_NINE_BITS_IS_CALLED_NONET}

感想

結果から言えばほぼid:oboenikuiの独壇場でしたね.
コンテスト終わった後今もモリモリ解いていますし.

自分は小スコアな問題をちょこちょこ解いていくくらいしかできなかったので,400点越えの高得点問題も解けるようにならなければと思いました. ただ,その場合メンツをみるに足りてない分野がbinary, exploitあたりだとは思うんですが苦手な分野でどうしようかなという感じです. 嫌だ何だといってられないんでとりあえずIDAとOllyDbgの使い方を覚えようと思います.

久々に土日をコンテストで溶かした気がします.