SECCON 2013 横浜大会 Write-up

SECCON 2013 横浜大会に参加してきた。1564点で1位。誰も解けなかった3問以外は全部解いた(・∀・) 以下、私(と周囲の人)の解法。後で問題が公開されるという噂もあるので、自力で解きたい人は見ない方が良い。








1. 練習問題(タイトルを忘れた)(バイナリ、10点)

コピペ。

答え: seccon

2. SSBNewCommer(バイナリ、200点)

Androidのアプリを解析する問題。

クリックするとそのマス目の色が変わり、特定の配置になるとFLAGが表示される(らしい)。プログラムは、

x = マスの配置を文字列に変換
if (x[0]=='B' &&
    x[4]=='I' &&
    sha1(x)=='50e878fe75ee49b31e68d85ffd54fc7e3a2605c')
    dialog('Flag:'+x)

こんな感じ。探索するプログラムを書いて終わりかと思いきや、答えがヒットしない。よーく見ると、ハッシュ値が39文字……。このサイトが部分一致も検索してくれて助かった。何でこんな機能があるのだろう……。

答え: BKVDI

3. system32(バイナリ、100点)

system32以下のある実行ファイル3個を起動した状態でこのプログラムを実行しろという問題。ファイル名が4文字、6文字、6文字と分かっていたので、適当に試した。まとめて一気に起動したらPCがヤバいことになった(´Д`; ) 答えは、calc.exeとwinver.exeとdxdiag.exe。

答え: calcwinverdxdiag

4. 実行せよ(バイナリ、100点)

ARM 64bitのELFファイルが渡される。そんな環境を用意しているわけないだろ……と思ったけど、良く見ると、/lib64/ld-linux-x86-64.so.2をリンクしているし、コード部分が(16byte区切りで見て)縦に揃っていない。0x12バイト目の0x28を0x3eにしたら、x64のファイルとして実行できた。

$./shirat1_x64.sdx
key is: testkey123
答え: testkey123

5. パスワードクラック(バイナリ、100点)

パスワードを訊いてくるWindowsのプログラム。正解となるパスワードを答える問題だと思う。普通に解析できるけど、結局解けなかった。分かったことは、

  • SHA1を計算しつつ、入力されたパスワードの各文字が、s, u, s, h, iかどうかを調べている。
  • ただし、1文字目の処理はパスワードが64文字以上じゃないと実行されない。
  • でも、パスワードは31文字までしか読み込まれない。
  • 「sushi00000000000000000000000000000000000000000000000000000000000」を投稿してみたけど不正解(´・ω・`)

変数をインクリメントしながら各文字を調べて、最後にその変数が5かどうかをチェックしている。0クリアしていないので、

password: _u___
password: _u___
password: _u___
password: _u___
password: _u___
password OK
password:

こういうこともできるけど、だから何……。

6. 謎のpythonプログラム(Crypto、100点)

16進数が並んでいたので、decode("hex")して、実行するだけ。

答え: Hack the CTF.

7. 謎のグラフが問いかける(Crypto、200)

最初の正解者だった。

折れ線グラフが与えられる。最初の点はそのままの値、2個目以降は直前の点との差分の絶対値を取ると、
87, 104, 111, 112, 114, 111, 118, 101, 100, 80, 111, 105, 110, 99, 97, 114, 101, 99, 111, 110, 106, 101, 99, 116, 117, 114, 101
になる。

WhoprovedPoincareconjecture

Who proved Poincare conjecture
答え: Grigory Yakovlevich Perelman

8. キング・オブ・目grep?(フォレンジックス、200点)

解けなかった。zipの中に183874バイトのBMPファイルが隠されているらしいけど、zipの中には謎のバイナリファイルがあるだけ……。

9. 欠番?

10. たけ×さこ(フォレンジックス、200点)

最初の正解者だった。

PDFファイルが渡される。開こうとしたらFlashプラグインを入れろと言われたのでインストールした。どういうフォーマットなのか分からないけど、PDFの中に写真が貼り付けられた500個のPDFファイルが入っていて、竹迫実行委員長の写真が貼られたファイルを探す問題。手作業で頑張った。213.pdfにあった。

答え: 2A3384EF0F1FEA3117772A86046A8A559A17F2C7

11. 箱庭XSS勝戦Stage1(Web、10点)

XSSXSSなんてどうやって問題にするのだろうと思っていたら、予選から

こんな感じのプログラムが使われていた。ちなみにちゃんと難読化はされているので、素直にXSSしたほうが楽だと思う。.NET Reflectorだと簡単に正解したことにできたりするのだろうか?

Stage1は「<>XS」が使用不可。

' onmouseover='alert("xss".toUpperCase())

でalertが出て、フラグが表示される。

答え: f6d5ff

12. メッセージを探せ(ネットワーク、100点)

pcapファイルがダウンロードできる。pingのrequestとreplyで、dataの0x2fバイト目に文字が埋め込まれている。10.192.255.238が10.1.9.3にpingを打っているけど、いくつか逆の場合があるので、それを抜き出す。

import dpkt

A = B = ""
for t,b in dpkt.pcap.Reader(open('message.pcap','rb')):
    p = dpkt.ethernet.Ethernet(b).data
    src = p.src
    type = p.data.type
    c = p.data.data.data[0x2f]

    if src==chr(10)+chr(1)+chr(9)+chr(3) and type==8:
        A += c
    if src==chr(10)+chr(192)+chr(255)+chr(238) and type==0:
        B += c
print A
print B
This is not a key, boooo!!
5c15n3r0f y0jn3 si yek ehT
答え: 3nj0y f0r3n51c5

13. 箱庭XSS勝戦Stage2(Web、50点)

Stage2は「<>XSx」が使用不可。

" onclick="alert('\130\123\123')
答え: 846d5b

14. Game Creators(Crypto、200点)

解けなかった。mp3が問題ファイル。ビープ音で区切ってゲームの名前が読み上げられる。

ドラゴンクエストIV
電波人間のRPG

スナッチャー
ポリスノーツ
メタルギア

ハングオン
スペースファイアー
シェンムー

スーパードンキーコング3
ゴールデンアイ007
パーフェクトダーク

バンゲリングベイ
Spore
シムシティ

スペースマウス
ジーザス

サマーカーニバル'92 烈火
バトルガレッガ
鋳薔薇

ドアドア
ニュートロン
ドラゴンクエスト

テトリス

とびだせ大作戦
ハイウェイスター
ファイナルファンタジーIII

クインティ
ポケットモンスター

それぞれのゲームの開発者は、

山名 学
小島 秀夫
鈴木 裕
Grant Kirkhope
Will Wright
鈴木 孝成
矢川 忍
中村 光一
Алексей Леонидович Пажитнов
Nasir Gebelli
田尻 智

で、この後どうしろと……。

2013/8/26 追記

らしい。
スーパードンキーコング3ゴールデンアイ007パーフェクトダークの開発者はDavid Doakさんで、鈴木 孝成さんはペンネームの芸夢 狂人さんか。

Manabu Y amana
HideoK o jima
YuSuzu k i
DavidD o ak
WillWr i ght
Kiyoto G eiumu
Shinob u Yagawa
Koichi N akamura
Alexey P azhitnov
NasirG e belli
Satosh i Tajiri
答え: yokoigunpei

15. 箱庭XSS勝戦Stage3(Web、50点)

Stage3は「<>XSx\」が使用不可。

" onclick="alert('&#88;&#83;&#83;')
答え: 2bd135

16. アセンブラ短歌(プログラミング、100点)

5バイト、7バイト、5バイト、7バイト、7バイトの16進数が書かれたテキストファイル。x86として実行するだけ。

Manazuru

17. 箱庭XSS勝戦Stage4(Web、50点)

Stage4は「<>XSx&」が使用不可。

" onclick="alert('\130\123\123')
答え: 924dd8

18. 箱庭XSS勝戦Stage5(Web、100点)

Stage5は「<>XSx'」が使用不可。

" onclick="alert(/&#88;&#83;&#83;/.source)
答え: 924dd8

19. 箱庭XSS勝戦Stage6(Web、100点)

Stage6は「<>XS'"&\」が使用不可。最終問題なのに何で「x」が使えるのだろう……。toUpperCase()でも可。

` onclick=`alert(decodeURI(decodeURI(/%58%53%53/.source)))
答え: 59ef9a

20. クロスワード・パズル(プログラミング、100点)

Linuxシステムコールクロスワードパズル。
本番では、D, E, F, Gだけの周囲だけ解けて、辞書ファイルから検索した。

ptraceが2回出てきているのが怪しいけど、設問が「デバッグに利用」と「デバッガが使います」だしなぁ……。

tsuruya

感想

面白かったけど、サーバーを攻撃する問題が無くてちょっと物足りない。会場の都合でサーバーを用意できなかったからだろうか。解くのに時間がかかる問題が少なかったし、個人戦5時間ということで重い問題は外したのかもしれない。