2012-05-20

SECCON CTF つくば大会 2日目

(昨日 の続きです)

最終的に 2507 点、13 チーム中 4 位で終わりました。やったね!

開始直後 2 位から、徹夜で問題を持ち帰っていじっていた連中が一気に通していった所為で 7 位に転落して諦めていたけど、なんだかんだ最終的に 4 位まで戻れた。

(うちのチームは家等で問題の続きをやったりは全くしなかった)

自力で解いた問題

  1. "newcomer architecture" (400, バイナリ)
* ファイルは軽量 Ruby こと [mruby](https://github.com/mruby/mruby) の中で使われてる VM, RiteVM のバイトコード, RiteBinary (mrb) ファイル。
* mruby を取ってきてビルドしたが、当時の HEAD だと OS X でビルドが通らなかった。Linux でも malloc 周りでいろいろ問題が出てたっぽいですね。OS X でビルドが通らなかったのは、ちょっとHEAD を巻き戻して解決。
* 普通の Ruby で動くスクリプトをそのままコンパイルしただけなので、`Kernel.#gets` とかがないせいで NoMethodError で普通に実行すると落ちます
* `--verbose` をつけるとバイトコードを人間に読める形にダンプしてくれるので、あとは `OP_*` を見ながら気合で手動で Ruby スクリプトを書いて行きました
* key を入力して、key に対して一文字ずつ処理をして、encrypted_message の同じ位置の文字と等しくないならエラーを出す形
* encrypted_message.each を叩いて、1文字ずつブルートフォースした
  1. コマンドインジェクションの奴 (300, Web)
* `' || echo hi` で hi と出力される事を確認。
* エラー出力をリダイレクトしたりする必要があったので `' || コマンド 2>&1 #` という形で実行して探っていく事にした
* 見当たるホームディレクトリは `/home/ctf4` のみ。しかし、ユーザーが違って読み取り権限がないため permission denied.
* `cat /etc/sudoers` すると、あるユーザーは ctf4 で`/bin/ls`, `/bin/cat` を NOPASSWD で実行する事が許可されていた
* `id` するとそのユーザーは自分だった。`sudo -u ctf4 /bin/ls /home/ctf4` してファイルを確認、`sudo -u ctf4 /bin/cat /home/ctf4/kotae.txt` を実行して答えを取得。
  1. うるう秒の奴 (OS)
* ググったら `xtime_lock` という変数が怪しい事がわかる ("linux 2.6.21 leap second deadlock" とかでググった)

  * <http://www.joabj.com/blog/?p=48>

* `objdump -DlF vmlinuz|grep xtime_lock` で先頭のアドレス的な奴を入力してたら通った。

協力して解いた問題

  1. SQL インジェクションの奴 (400, Web)
* ログインには一瞬で成功して、そして [@tyage](https://twitter.com/tyage) 君がパスワードを表示する所までやってくれた。
* でもログインできず。
* ヒントで出るまでわからなかったが、パスワードは暗号化されていた。確かにターゲットのユーザーのパスワードのバイトをちょっとズラしていくと `pa{sword` みたいな感じ(うろおぼえ)になって怪しいなとは思ったが、その元のその部分をググったら ROT13 だった。アルファベットで13文字ズラす。
* 通った!
  1. OOM Killer の奴 (OS)
* 手元に VMware がなかったので、`malloc` と `fork` で爆弾を作ってもらった。1 分放置してもだめで諦めかけていたが、適当にもっと放置してたらいつのまにか答えが出ていた。

こんなところ。

まとめ

運営の皆さんと他のチームの皆さんもお疲れ様でした。とても楽しかったです!

Published at 2012-05-20 21:51:22 +0900 | Permalink