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:
こういうこともできるけど、だから何……。
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点)
XSS。XSSなんてどうやって問題にするのだろうと思っていたら、予選から
こんな感じのプログラムが使われていた。ちなみにちゃんと難読化はされているので、素直に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
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
18. 箱庭XSS決勝戦Stage5(Web、100点)
Stage5は「<>XSx'」が使用不可。
" onclick="alert(/XSS/.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時間ということで重い問題は外したのかもしれない。