SECCON四国大会に参加してきました(Write up的な)
2013年10日20日に香川大学で開催されたSECCON CTF 四国大会に初参加してきました。
チーム名は「klab」で今回は3人での出場でした。
元々地元である福岡で開催された九州大会に出場する予定だったのですが、無念の先着漏れ。という訳で一番近い四国大会の出場登録を済ませました。
(あとから知ったのですが九州大会の応募は5-6時間で満員になったみたいですね、、、)
ついてきてくださった先輩と同期には感謝。
新幹線に乗って約2時間岡山行きです。岡山で一泊して次の日に香川大学へ向かいました。
結果は惨敗.... 300点という恥ずかしい結果に。
どの問題も発想力と注意力が問われる問題で非常に苦戦しました。
その中でも解けた問題やあともう一歩の問題があったのでそれについては詳しく書いてみようと思います。
Write Up....
>> まずは解けた問題から。
練習問題[100]
パスワードはsecconです!と詳細に書いてあったのでそれを入力して終わり。開始2秒程度で解けたチームが出たことを示すアラームが鳴りました。これは毎回同じ感じなのかな?
ネットワーク[100]pcapで遊ぼうシリーズ第n+2弾 問題ファイル:q7.pcap
配布されるq7.pcapをWiresharkで開くと、SYNしてSYN-ACKされ、すぐにRSTするパケット1ユニットが複数送られているのがわかった。
ざっと見渡しても回答になりそうなものは見当たらず。
とりあえず値が変わっている部分を見ていくと値が変化している部分が見つかる。パスワードは英語だ(ろう)から、16進数表記で値が変化している部分を見ると、Identificationとchecksumが見つけられた。
checksumは現実的に好きな値にするのは難しそうなので、Identificationを見ると、
[bash]
[SYN]0x4f00→[SYN-ACK]0x0000→[RST]0x0000
[SYN]0x6d00→[SYN-ACK]0x0000→[RST]0x0000
[SYN]0x6500→[SYN-ACK]0x0000→[RST]0x0000
[/bash]
となっていることが分かったので、SYNの部分の値を読み、ASCIIコードに直して終わり。
答え:Omedeto! Arigato! Matane!
Crypt[100]暗号解読せよ 問題ファイル:forcusing.zip
開くと砂嵐のような見た目同じの2つの画像が出てくるので、とりあえずPhotoshopか何かで透過度をそれぞれ50%にし、重ねあわせてみた。
するとうっすらと中心付近に数字の羅列らしきものが....
これを頑張って読もうとしてたのだけれど、さすがに無理でした。
そこで、2つの画像を横に並べて、立体視をしてみると数字が浮き出てきました。
その数字をASCIIコードに直せば答えです。The key is rest your eyes!!と出てくるので、
答え:rest your eyes!!
//余談
//他の一部の参加者は画像diffを使用して問題を解いたみたいです。こっちのほうが早いので競技としての正解は画像diffを使用することでしょうね
>>>次に解けそうで解けなかった問題
ネットワーク[200]本物はどれ?
192.168.58.0/24でサーバが動作しています。 本物はどれでしょう? a:本物のホストのIPアドレス b:上記ホストのTCPオープンポートのうち最も大きいポート番号 回答形式:"a:b"のsha1ハッシュ値 例) echo -n 192.168.58.1:8080 | sha1sum
サーバーが動作しているようなので、とりあえずnmapでスキャンを掛けてみることにしました。
[bash]
#nmap -sn -v 192.168.58.0/24
[/bash]
nmapでホストを見つけて、見つかったアドレスにポートスキャンをかければ終了かと思っていたのですが
スキャンをかけてみると、すべてのアドレスでHost is up.だったので、どうしたものかと。
また、一回のスキャンに結構な時間が取られてしまうので-P0つかったりポートを固定してやってみたりだとか色々試しましたが、結局ホストを見つけることができませんでした。
.58.255→.58.254→・・・・→.58.0のように逆順で処理させたりはできないのかなぁと思っていましたがどうなんでしょう。
//あとで聞いたところ、かーみーさんは、#nmap -sn -v 192.168.58.0/24の段階でホストがひとつしか開いていなかったとのこと。なんでだろう・・・・
プログラミング[200]↑↑↓↓←→←→
[c]
s=0 [ output(9); s:=s+1; ]
(s=1 | s=3) & accelX() > 0.7 [ output(13); s:=s+1; ]
(s=1 | s=3) & accelX() < -0.7 [ output(30); s:=s+1; ]
s=1 & accelY() < -0.7 [ output(0); s:=s+1; ]
s=3 & accelY() < -0.7 [ output(12); s:=s+1; ] (s=1 | s=3) & accelY() > 0.7 [ output(29); s:=s+1; ]
(s=2 | s=4) & accelY() > -0.7 [ s:=s+1; ]
(s=5 | s=7) & accelX() > 0.7 [ output(24); s:=s+1; ]
(s=5 | s=7) & accelX() < -0.7 [ output(25); s:=s+1; ]
(s=5 | s=7) & accelY() < -0.7 [ output(26); s:=s+1; ] s=5 & accelY() > 0.7 [ output(15); s:=s+1; ]
s=7 & accelY() > 0.7 [ output(22); s:=s+1; ]
(s=6 | s=8) & accelY() < 0.7 [ s:=s+1; ] (s=9 | s=13) & accelX() > 0.7 [ output(29); s:=s+1; ]
s=9 & accelX() < -0.7 [ output(5); s:=s+1; ]
s=13 & accelX() < -0.7 [ output(3); s:=s+1; ] (s=9 | s=13) & accelY() > 0.7 [ output(31); s:=s+1; ]
(s=9 | s=13) & accelY() < -0.7 [ output(30); s:=s+1; ] (s=10 | s=14) & accelX() > -0.7 [ s:=s+1; ]
s=11 & accelX() > 0.7 [ output(0); s:=s+1; ]
s=15 & accelX() > 0.7 [ output(20); s:=s+1; ]
(s=11 | s=15) & accelX() < -0.7 [ output(22); s:=s+1; ] (s=11 | s=15) & accelY() > 0.7 [ output(23); s:=s+1; ]
(s=11 | s=15) & accelY() > 0.7 [ output(24); s:=s+1; ]
(s=11 | s=15) & accelY() < -0.7 [ output(29); s:=s+1; ]
(s=12 | s=16) & accelX() < 0.7 [ s:=s+1; ]
s=17 [ output(6); s:=s+1; ]
[/c]
問題文がコナミコマンド(↑↑↓↓←→←→)で、AccelX(), AccelY()という関数があるので、コナミコマンドを入力するとパスが出ると予想。
とりあえずC#で書きなおしてみたところ、ある数字の羅列が出てきました。
ここでストップ。それからアスキーコードに直したり、何回かデコードしてみたりしましたが、答えが出ず。
・・・
あとから聞くところによると、コードの断片でググればコードの詳細や数字列の変換方法が出てくる模様。(0=A, 1=B, 2=C・・・のような感じだったと思いますが詳しくはわからず)
なんじゃそりゃーと思いましたが仕方ないです。ググる力を鍛えなければ・・・・・・
//余談ですがあとで報告したところボスがしょんぼりしてました。(身内ネタ)
>> 最後はわからなかった問題を少々。
crypt[100]ピカピカするんです。
なんと言ってるのか読み取ってください。問題ファイル:PicaCaps.exe
開くとコンソールが立ち上がり、行くよ?の文字が表示され、一定時間経つと終わったよ!の文字が出て終了。
最初は逆アセして解析かな?と思っていたのですが。
このプログラム、起動するとCapsLockがピカピカするんです。
読み取ってモールス信号に置き換えて終わり。
解きたかったなぁ。
other[100]SG ks
IENF REVD eFNF Q0NP TiB DVE YgQ2 hhb Gx lb mdlc
i4gS GF2Z SBm dW4 /IF Ro aX
MgbW Vzc2 FnZS Bpcy Bub 3Qg YSBm bGF nL CB zb3J
yeS 4= ??
意味不明です。base64で変換すると
Hi, CEDECxSECCON CTF Challenger. Have fun? This message is not a flag, sorry.
と表示される。答えがわかった人は教えてください.....
他にもForensics系の問題やWeb系の問題、Binary系の問題が複数ありましたがこれは誰かがWriteUpしてくれるはず.....
個人的にこの問題も解いてみようと思います。
今回は初参加で初心者丸出しのまま参戦しましたが、次回はもう少し知識をつけて出場したいと思います。
まずは復習からかな。