読者です 読者をやめる 読者になる 読者になる

アレイドのブログ(勉強会等用)

CTFのWriteup(解法)や、その他勉強会の参加記などを載せていきます。

SECCON2016オンライン予選参加記

 

 

お久しぶりです。

今回、チーム FIT-HACKのメンバーとしてSECCON2016オンライン予選に参加してきました。チームとしての順位は62位でした(なお私はほとんどフラグ入力をしていない模様)。

 

Vegenere

ヴェジュネル暗号によって暗号化された文字列と、平文の一部(フラグフォーマット部分)、およびヴィジュネル方陣が渡され、そこから完全な平文に復号する問題。

とりあえず手作業で一文字ずつ、平文と暗号文を照らし合わせてKeyを探っていくと、8文字目(VEGENERE)まではKeyが特定できた。が、それと同時に、メンバーが先にフラグを入力したようだったので、ここで作業中断。

 

VoIP

何やらpcapファイルが渡された。何をキャプチャしたのか初めはわからなかったが、問題タイトルからVoIPIP電話)のキャプチャファイルと推測。

Wiresharkの電話タブから、pcapファイルの音声を復元したところ、1文字ずつフラグを読み上げていた。

若干聞き取りづらいな・・・と思いながら解読作業を進めていたところ、メンバーが先に解読完了、またも作業中断。

Cheer msg

指定されたIPに接続してみると、こんなメッセージが。

f:id:melt39miku:20161211160023p:plain

どうやら、最初にメッセージの長さを、次に本文、最後にユーザ名(?)を求められている模様。

以前に同じような問題を見たような気がするのでそのWriteupを参考に応用すれば解けるのではと思ったが、そのうえで重要となるプログラムのメモリアドレスを特定することができず。

途中でタイプミスして、メッセージ長の指定に負数が使えてしまったのは、何かヒントになったのだろうか・・・

 

PNG over Telegraph

youtubeへのリンクで、3本の棒が一定の形になるように動く動画が渡された。

手旗信号のようなものだろうと思ってしばらく見ていたが、チームメンバーがちょうど形が一致するような信号の画像を発見。ほぼ1秒間隔で機械の動きが止まっていたので、そこを狙って動画を止めて、対応する文字をメモし・・・

を繰り返す予定だったが、動画時間が51分あり、作業を継続すると大幅なタイムロスになると判断し、一旦別の問題に移った。

単純作業が長く続くことが予想されるからか、Twitter等でも大分批判を受けていたようである。

 

ropsynth

配布ファイルを解凍し、とりあえずropsynth.pyを開いた。

それから、「サーバーから渡されるbase64コードをデコードすればいいのかな?」と思い、Pythonでコードを書いて実行してみたが、別にそう簡単にいくはずもなく。別のソースコードバイナリファイルを読みながら解法を探ってみたが、今の私の力ではどうすればいいのか・・・

 

Backpacker's Capricious Cipher

暗号化のプログラムがRubyで渡され、とりあえずどんな処理をしているのか探ってみる。

分かったのは、このプログラムではpub_key.txt,priv_key.txt,enc.txtの3つを生成することと、pub_keyはpriv_keyを元に生成されることの二つ。

とりあえずpriv_keyを乱数によって生成して、問題のプログラムと同じアルゴリズムを用いて仮のpub_keyを生成し、元のpub_keyと比較した結果が等しければpriv_keyを出力するプログラムを組んでみたはいいものの、演算時間が足りずタイムアップ。

アルゴリズムの見直しもかねて、時間のある時にまた演算させてみようと思う。

 

まとめ

去年はSECCONオンライン予選に1人で参加して轟沈してきたので、今回こそは活躍したかったのだが、そうはいかなかった。フラグ入力の遅れについては、先に解法を見つけた人に解析を任せ、その間に別の問題を解いていくスタイルで今後改善していこうと思う。

余談だが、今回のイベントから、チーム内で試験的にTrelloを導入した。感想としては、CTFをやっていく中でもこれはなかなか有用なツールだった。リアルタイムに問題ごとの進捗状況の共有ができるのは非常に有り難い。