HITCON CTF 2015

今回は fuzzi3 というなんか卑怯な人の多さのチームに混ぜてもらいました。用事もあったのでゆるく参加するつもりが割と頑張ったけ。けどゆるく参加しても貢献度変わらなかったんじゃね?という感じの成果でした。

チームがものすごいので4位。他人の成果に乗っかってなんかするのができるのはラクだなーというのと、ちゃんと自分の成果を後に引きつげるように考えるべきだなーとか思った。

https://ctf2015.hitcon.org/scoreboard

hard to say

なんか shell 呼べる Ruby で記号しばり 10B で cat flag しろ、という問題。4つにわかれてる問題で、1つ目とかは結構サイズ制限ゆるい。とりあえず任意コードの記号化プログラム的なものが手元にあるのでそれで1問目終了。全チーム最初の1以上の得点だったと思う。

2,3とうーんどっちかというとshell芸だなーと思いつつ m4 flag とかしてこなす感じで。4つ目は全然わからなくて、1つ目で環境見て遊んでる最中に書き込める領域見つけたのでそこに cat flag て内容のファイル書いて実行して終わり。

https://gist.github.com/shinh/4999b3d154aafc774b91

本当は $0 が /bin/sh だからそれ使えば良かったらしい。

おでかけに行く。

babyfirst

出先で docs を見ると、空白と改行と \w+ だけで shell のコード適当に動かせるよ、 wget で色んなファイル置けるよ、ただファイル名指定できない、ということをチームの人が発見していた。ファイル名指定できないと index.html になるので、 . が使えないと実行できない。うんテザリングであれこれ試すにはちょうどいいくらいかな…とあれこれ試す。

まー redirect っしょーと色々やるも、どうもファイル名が index.html になる。 ftp どうよ、と ftp://.../robots.txt にリダイレクトすると robots.txt という名前で落ちてくる。ああこれいけるなーと思ったけど anonymous write できる ftp わからんかったし ftp サーバ出先で上げるのは困難な気がしたので(よく考えると VPS 使えばできたが)、チャットで言ったら他の人が終わらせてくれた。

risky

酒飲んで帰って、適当に見てると risky というのが x86 でない謎アーキテクチャで僕好み。見る。適当に PLT とか見て命令推測…とか少しやってたけどよく docs 見ると RISC-V であることはわかってたぽいので、ツールチェインインストール…とかやってたけどよく見ると他の人が objdump の結果はってた。

適当にアセンブリを方程式にするコード書いて、でこれどうやって解くかな、と思いつつ結果を docs に貼ってたら、他の人が z3 にかけて終わらせてくれた。なるほどこういう時に使うのかーと。これは解析的にも解けたと思うけど、まああきらかに便利そうだから使いかた覚えよう。。

https://gist.github.com/shinh/c67ed9379ef8e5ef4740

unreadable

他の問題解いてる間に足されてて、 xxd したら終わった。

http://shinh.skr.jp/tmp/unreadable.png

moonglow

心を砕いた問題。フラグのファイル名を知らないプロセスから、同じUIDで動いてる、フラグを知ってるプロセスにフラグの内容を送って、あってるか間違ってるかをチェックしてもらう、って問題。

chroot の中にいるので /proc/*/cmdline とか見てコマンドラインに渡されてるフラグの名前を調べたりできないし、フラグの置かれてるディレクトリは x しか立ってないので中を見ることはできない。 ptrace は yama に殺されている。

なんかマイナーなシステムコールを使うか、チェックにかかった時間を計測するしかないかなーとあれこれする。 prlimit がなにかに使えそうだなーとコアを吐くように変更してみたりするもダメ。 Ubuntu だと apport かなんかに投げるのと、あとそもそも core て chroot されてると出ないらしい。知らなかった。

あと試したのは inotify syslog などなど。時間はかる方も、なんかの間違いで wait4 できねーかなーとやってみたり少し待ってから kill 送って死んだか死んでないかで分離できないか一応チェックしたり。まあ無理に決まっていた。

答えは perf_event_open だったらしい。なるほど perf かー。思いついても良いレベルだった気がするなあ…と悔しい。

waterleaf

なんか波ぽいノイズが乗った動画の中の steganography 。画像化とかはぷよAIの時のがあるのでさっくりできるし、まあ画像系は苦手ではない…ということで見てた。ヒントが出て、波の方向とかにデータ乗ってる、としか思えなくて脊髄反射的に波の方向を調べてどうこうするプログラム書いたり、波の方向目で見てフラグぽい文字列が出ないか…と頑張ってた。

答えは FFT しろってことだった。ヒントも波の形もあきらかにそういう感じでした。。。物理やってたんなら見覚えあるだろうに。。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h