CSAW CTF 2014 Quals Writeup


CSAW CTF 2014 Qualsに参加しましたのでWriteupの方を書きたいと思います。

Forensics

dumpster diving [100]
「Firefoxのメモリなんて知らないよ」と暫く悪戦苦闘していましたがやけくそになってstringsコマンドを使ったらあっさりクリア
[bash]
root@kali:~/CTF/csaw2014/firefox# strings firefox.mem | grep flag{
ZZZZZZZZflag{cd69b4957f06cd818d7bf3d61980e291}
[/bash]
flag{cd69b4957f06cd818d7bf3d61980e291}

Obscurity [200]
pdfの問題でした。
こんな画像が埋め込まれています。

スクリーンショット 2014-09-21 1.01.21

画像のとある場所にマウスカーソルを置くとカーソルの形が変わりました。試しにダブルクリックしてみると以下の様な文字列が

スクリーンショット 2014-09-21 1.01.36

恐らく正しい解き方ではない
flag{security_through_obscurity}

Reverse Engineering

eggshells [100]
解凍して見てみるといくつかPythonスクリプトが存在します。
この中でutils.pycが浮いているので中を見てみるとURLが書いてあるのが見えます。
http://kchung.co/lol.py
このPythonスクリプトをダウロードして中を見てみるとフラグが書かれています。
[python]
import os
while True:
try:
os.fork()
except:
os.system(‘start’)
# flag{trust_is_risky}
[/python]

flag{trust_is_risky}

csaw2013reversing2.exe [200]
Windowsのバイナリが降ってくる。
Ollydbgで適当に処理を眺めるだけ。

flag{reversing_is_not_that_hard!}

Exploitation

pybabbies [200]
coding:ROT13とかかと思ったらどうも通らない。
しょうがないので[Pyexec CTF writeup]といった感じでググると良さそうなサイトが。
今回の問題はPythonのバージョン3が使われていたらしく、Pythonのprintは()を付けないと使えないということを知らなかったので暫く止まる。
チームメイトにそのことを教えてもらい以下の文字列を送信するとフラグが表示されます。
[python]
classes=().__class__.__bases__[0].__subclasses__();fileclass=classes[40];fd=fileclass(‘./key’,’r’);key=fd.read();print(key)
[/python]

スクリーンショット 2014-09-21 1.35.29

flag{definitely_not_intro_python}

感想
 今回は1年ぶりのCTFということもあり色々苦戦するかと思われたがCTF現役バリバリのチームメイトにかなり救われた。
正直な話ここ最近やってるforensicsの内容が全く生かせなかったのは残念だった(主にシステムファイルや画像系の過去問をやっていたので)が1,2問解ければいいと思っていたにも関わらず予想以上に問題を解くことが出来た。
また「ほぼ答えが載っているサイトがある」「たまたまpdfをダブルクリックしたらフラグが出た」といった運の良さに助けられる面もあった。CTFは競技なので様々な要素が絡んでくる。今回はそんな様々な要素の中の1つである「運」に恵まれていたのだと思う。本心を言えば実力で解きたかったが。
 反省としては、exploitやバイナリ力が1年前と比べガタ落ちとまではいかなかったが全く伸びていなかった。ここ1年はもっぱらWebに傾倒していたためバイナリが疎かになっていた(そのWebも他のチームメイトが解いたが)。その為ARMアーキテクチャのバイナリ問題などには手も足も出なかった。バイナリやexploitはCTFの問題の中でも高得点問題として出題されることが多いので今後はこれらのジャンルの学習も欠かさずにしようと思う。
また今回もう一つの反省としてネットワーク問題があった。大きなデータと見慣れないbittorrentのパケットに気を奪われ完全にtelnetのことなど忘却の彼方だった。思い込みって怖いですね。