高専セキュリティコンテスト

KOSENセキュリティコンテスト2017に香川高専高松のUDONチームの一人として出ました。 初日の問題はJeopardy形式で、Binary、Crypto、Misc、Network、Webから5問ずつ程度です。

解いた問題

一日目

傘と家の鍵とPCの電源アダプタを忘れて帰りました。つらい。 Miscは気がついたら便利なプロトコル以外解かれてて、その他の問題は強い先輩方がやってくれてました。

Jeopardy2 ファイル名を探せ

q.gzというバイナリをダウンロード出来るやつです。q.gzをgzipで回答した後fileで調べるとtarなのでtarでファイル名の目録出してgrep 'SCKOSEN'すれば見つけられます。 base64では!?など錯乱しほげほげしてて時間を溶かしました。

gzip -d q.gz
tar tf q | grep 'SCKOSEN'

Jeopardy1 フラグを答えろ

ELFのバイナリをダウンロードするやつです。対話形式でFLAGを入力すると正しいかどうか判定するやつで、内部でstrcompでリテラルと比較しているだけで暗号化もされてないのでstringsで探せば目星が付けられます。というかvimでSCKOSEN探せば見つかりました。 完全な文字列ではなかったので無限に???して時間を溶かしましたが逆アセンブルすれば良かっただけな気はしないでもないです。 僕が持ち込んだArch Linuxマシン以外Linuxマシン無かったので少し危なかった。

Jeopardy17 ファイル送信pcap

pcapファイルが与えられるのでファイルを復元して、出てきた暗号化zipファイルの中身を出すとFLAGがあるやつです。zipファイルの中にはLenna.pngとflag(テキストファイル)が入っていて暗号化されています。zipファイルと内部のLenna.pngファイルの平文までは先輩が用意してくれたので既知平文攻撃で特だけでした。暗号化zipの既知平文攻撃にはpkcrackというツールがあるのでそれを使い解きました。 実質ツール使っただけ。

zip P.zip Lenna.png
pkcrack -C lock.zip -P P.zip -p Lenna.png -c Lenna.png -d decrypto.zip
unzip decrypto.zip
cat flag

-Pを付けずやってて無限に時間を溶かしました。どんな絵葉書を書くか考えないと...

Jeopardy20 Web1

候補ありの穴埋め形式のJavaScriptを完成させて答えを出すやつです。JavaScriptではobj["member"]がobj.memberと同じになので、それを元にそれっぽいところに関数を入れていきます。map、fromCodePoint、joinは自明で、evalとcallを入れれば関数は完成します。あとは結果を見ながらリテラルをはめ込めば終わりです。これはFLAGがかなりエントロピーの高い値になりました。

二日目

台風で登校できず忘れ物回収不可能な事が判明し台風への殺意を高めた。 なし。家のArchマシンでひたすら #ArchLinuxVPSConnectBattle してました。途中でWindowsに切り替えたり、その時にWindowsWindows Update掛け始めては?になったりしましたが1100にはつなげました。Web1を頑張ってましたがJavaScript触ったことがなく頭捻っただけでした。

まとめ

見返すと簡単な問題しか解いておらずアですが非CTF勢でセキュリティのセの字も知らないしがない電気科高専生としては良かった気はします。初日は7位だったものの2日目で落ちて13位でした。 簡単な問題は案外解けることが分かりましたが、KoHやOreNoFSのwriteup見てるとプロへの道は遥かに遠いことがわかります。来年はもう少し解けるよう頑張りたい...