ヾノ*>ㅅ<)ノシ帳

技術ブログに見せかけて、ジャンル制限のないふりーだむなブログです。

SECCON 2015 オンライン予選 Writeup

SECCON 2015 オンライン予選にチームPing-Micで参加しました。 僕にとって初めてのPing-Micでの活動になります。

※友利奈緒ですがTomoriNaoとしての参加は見送りました><

ctf.seccon.jp

結果は1100 pts で170位でした。すぐ上にkatagaitaiがいたのはなんとも偶然…

f:id:katc:20151206174929p:plain

まあリーダーが日曜日お出かけしていたり、メンバが忙しそうだったのでしゃあないって感じですね。

僕がフラグを取った650点分のWriteup書きます。

  • Start SECCON CTF (50)
  • SECCON WARS 2015 (100)
  • Exec dmesg (300)
  • Steganography 1 (100)
  • Steganography 3 (100) ※チームメイトにヒントもらった

Start SECCON CTF (50)

1対1対応で対応していたのでそれを見ながらちまちまやりました

ex1

Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ{}
ex2

Cipher:EV}ZZD{DWZRA}FFDNFGQO
Plain: {HELLOWORLDSECCONCTF}
quiz

Cipher:A}FFDNEVPFSGV}KZPN}GO
Plain: ?????????????????????
       SECCON{HACKTHEPLACET}

SECCON WARS 2015 (100)

文字が後ろで流れていて、前面にボケたQRコードが出てくる動画が示されていました。 youtube-dlでダウンロードして、ffmpegでシーケンスで書き出し、何十枚か選んでPhoshopで開きます。 正確には1つのキャンバスの上に何十枚か「配置」しました。

QRコードの黒マスが有る場所は必ず暗いのでレイヤー合成を「比較(明)」にすれば結構綺麗に出てきます。 あとはスマホアプリで認識させて終了です。

f:id:katc:20151206175644j:plain

Exec dmesg (300)

TinyCore Linux のisoイメージが渡されたので、Virtual Boxでブートしました。 シェルやコマンドはbusyboxで提供されているのですが、applet not found とか言ってdmesgコマンドを実行できません。 コマンドがあるように見えて実は容量を気にして入れないことがあるそうです(ソース)。

方法としてはbusyboxをビルドし直すのも手ですが、何かmakeが途中で止まってしまうので、util-linuxを入れて実行するという方針で行きました。

tce -wi util-linux
/usr/local/bin/dmesg | /usr/local/bin/grep SECCON
(結果は下の画像参照)

flag: SECCON{elf32-i386}

注意としてはこのままだとbusyboxのコマンドと置き換わらないのでwhich dmesgで新しいコマンドのlocationを確認して実行するという点ですね。

ただ、SECCON終了後のIRCで他の解法が発言されていて、

  • cat /dev/kmsg | grep SECCON
  • Virtual Box でブートしたらスナップショットを取って、grepする

というものでした。

1つめのは確かに同じ結果が取れました。

f:id:katc:20151206180644p:plain

Steganography 1

ファイルを開くとSECCON {としか表示されないgifのようなもの渡されました。まずファイルの構造を010 Editorのテンプレート機能で確認しました。

f:id:katc:20151206182440p:plain

約1時間かけてMrFusion.gpjbからそれに紛れ込んでいる画像ファイル探して、ファイルにおこす作業をしました。 PNG, JPG, GIF, BMP は以下のサイトを参考にすればすぐ見つけられますがエディタでコピーして貼り付ける作業が大変つらいものでした><

BMPの部分が大量の0x00を含んでいるのでそれと気づくのが難しく、そこで時間取られました。

f:id:katc:20151206184740j:plain

比較(明)で合成して、Please input flag like this format-->SECCON{*** ** **** ****}とあるのでフラグは

flag: SECCON{OCT 21 2015 0728}

@mrtc0氏「バイナリから取り出すのってforemostとかで十分でないレベル?」

アッ…ハイ

sudo pacman -S foremost
foremost -i MrFusion.gpjb
ls output/*(D)

f:id:katc:20151206181720p:plain

Steganography 3 (100)

まずAcrobatに画像中のELFのバイト列をテキスト認識させ、おかしな所は手作業で直してバイナリに落とし込みましたが、objdumpできない、実行させてもセグフォする変なバイナリでした。ちなみに010 EditorにCtrl+Shift+vすると Hex to Binary(xxd -r -p) みたいな貼り付け方ができます。

Slackで騒いでいたらmumumu氏からいいアシストを受けられました。

mumumu「winのペイントで、白い余白の塗りつぶししたらどうなりますか?」

最初にSaiで塗ってしまって、答えが出なかったのですが(まあお絵かきソフトなので)、Photoshopで塗ったらちゃんとflagが出てきました。

f:id:katc:20151206183008j:plain

まあこれはmumumu氏の手柄ですね。


運営の皆さんお疲れ様でした~楽しい24時間ありがとうございました。

↓ ↓ ↓ ↓ ↓

反省会

やるだけ問の Individual Eledin を日曜の夜に解きました。坂井さんのcrossを使えば難なくいけます~(ビルドが大変なのでLinuxのイメージを使いましたが)

gist.github.com