2016.10.05
「Venus」-セキュリティ・キャンプ全国大会2016でのCTF 第2回
今夏開催された「セキュリティ・キャンプ全国大会2016」で行われたCTFのうち、「Venus」で出題されていた4つの問題について紹介していきます!Level1、Level2については前回の記事をご参照ください。
はじめに
セキュリティ・キャンプ全国大会2016でのCTF「Venus」で出題されていた4つの問題について紹介していきます。 前回「Problem #2」までを紹介しました、これをすべて解き終わってから表示される「Problem #3」の問題から取り組んでいきたいと思います。
問題紹介
[Venus] Level3
「Problem #2」をすべて解き終わると、「Problem #3」の問題が表示されました。「Please give operators」という文字列とともに、数と「?」が交互に並んだ式が表示されています。また、例題も表示されています。
・これは何の計算か
例題からこの問題を紐解いていきます。
1 ? 2 ? 3 ? 4 = 3
まず計算式は上のようになっています。
これに対する答えとして、
+,*,-
を送信しているようです。
また、表示されている文字列を改めて見てみると、「Please give operators」(和訳 : 演算子を与えて)とあるので、カンマで区切られた文字は演算子ではないかと推測することができます。
次に、この例題の「?」の部分に演算子を当てはめてみます。
1 + 2 * 3 - 4 =
これを計算してみると、「3」となり計算式が正しく構成されたことがわかります。
これらのことから、表示された計算式の「?」の部分に演算子を当てはめて、計算式が正しくなるようにすればよいということがわかりました。また、演算子はカンマで区切って送信すればよいことは例題からわかります。
・解答の送信
実際に1問目に表示されている問題を解いて、答えを送信してみます。ここでは、pythonを用いて演算子の組み合わせを求めてみます。
import itertools operators = list(itertools.product(('+','-','*','/'), repeat = 3)) answer = -11 for operator in operators: formula = '1 %c 4 %c 2 %c 6' % operator print(formula) if eval(formula) == answer: print('answer is ', formula) break
実行してみると、答えは「-,-,-」だということがわかるので、送信してみます。
「Correct!」と表示され、次の問題が表示されました。
[Venus] Level4
「Problem #3」をすべて解き終わると、「Problem #4」の問題が表示されました。今までとは異なり、謎の文字列が表示されています。
これは何の問題か
表示されている文字列の先頭を見ると、「b'」で始まり、いくつかの数がスペース区切りで表示され、最後は「'」で終わっていることがわかります。また、前述の「実行中のプロセスを調査する」の項目から、「Venus」はpythonで書かれたプログラムだということがわかります。これらをキーワードにして、Webで検索をしてみると、表示されている文字列は「バイト列」ではないかということが推測できます。
わかりやすい形に変換する
表示されている文字列はバイト列であると仮定して進めてみます。このバイト列をわかりやすい形に変換するために、「バイナリエディタ」に転記してみます。今回は、「Bz」というバイナリエディタを使用します。
文字列の正体は
ascii表記になっている部分を見ると、先頭部分に「PNG」と表示されています。どうやら、このバイト列はPNG画像を示しているようですので、これをPNG画像として保存してみます。
保存したファイルを開いてみると、画像はQRコードになっていました。このQRコードをQRコードリーダーで読んでみると、「raccoon」と出力されました。
答えとして、「raccoon」と送信してみると、
「Correct!」と表示され、次の問題が表示されました。
問題紹介まとめ
今回は、5つのゾーンのうち、「Venus」の問題のLevel1~4についてそれぞれ紹介を行いました。
「Venus」ではPPC(Professional Programming and Coding)と呼ばれるジャンルに該当する問題を出題していました。各Level、それぞれ、計算したりファイルに書き出したりといった処理を手動で進めていけば、いずれは確実に解ける問題ですが、競技時間が限られているCTFでは「いかに手間を省くか」ということが重要になってきます。
今回の問題では、Python等のプログラミング言語を用いて、サーバとの通信や計算処理などを全自動化して解くことが可能です。
また、CTFに限らず、その場でサクッと書けるプログラミング言語を1つ習得しておくと強力な武器になりますので、ぜひ勉強してみてください。
さいごに
いかがでしたか。セキュリティ・キャンプ全国大会2016では、対象が情報セキュリティ分野に関心の高い学生ということもあり、少々難易度が高めの問題を出題しましたが、普段のCTF for ビギナーズの勉強会では、初心者にも優しい内容となっています。CTFに興味はあるけど、どこから手を付ければよいかわからないという方は、「セキュリティコンテストチャレンジブック」をご覧頂いたり、CTF for ビギナーズの勉強会へ参加頂ければと思います。