変態の駄文置き場

ぼちぼち書いていきます。

【エクマス11日目記事】CTFについて語りたい

※この記事はやきゅ氏企画のアドベントカレンダー、エクマス11日目の記事です。

技術系に興味のない方向けの裏番組
アイマスから始めるオーディオ入門 - 変態の駄文置き場

初めに

タピオカって飲み込むタイミングがわからないよね。どうもゆがぽです。
さてエクマスを開催するということは聞いていましたが、何を書くのか全く決まっていない状況で軽率に登録したからさあ大変。
そして前後はツヨイ人。
プレッシャーがとんでもないですが一応書いていきたいと思います。

今回のエクマスでは、自分が最近始めたCTFについて語っていきたいと思います

CTFとは何ぞや

CTFというのは、コンピューターを使った知恵の輪のようなスポーツです。

CTFでは、FLAGと呼ばれる特定の文字列を見つけ出し、そのFLAGを提出することで得点を得られます。
FLAGを隠し、見つける手法は数えきれないほどあります。
今日は例題を用いながら、CTFの軽い入門をしてみたいと思います。

CTFの始め方

Web上には数多くの常設CTFが用意されています。
今回例に出すのはMacnica Networks CTF、略してMNCTFというイベント開催だったCTFが常設化されたものを例題として取り扱います。
(入門なので齧る程度ですが)
それでは初めて行きましょう!

問題を解いてみる

さて、MNCTFのサイトのURLはこちらになります。
mnctf.info
このサイトの右上のボタンを押しユーザー登録をします。
パスワードとユーザー名を登録すれば、CTFを始める準備は完了です。
ログインしたら、悪意部品という問題を選びます。
そして、その問題の本文中にあるファイルをリンク先を保存します。

このファイルは一見拡張子がpngなので画像のように見えますが、これは画像ではありません。
さて、これを読んでみましょう。
バイナリエディタというツールを使います
これについてはお好みのものを使ってください。(オススメはStirling)
たぶんこうなると思います

f:id:ygp_tech:20191210113506p:plain
バイナリエディタで開いたところ

さて、なんのこっちゃわかりませんね。
そこで出るのが次のヒントです。
問題内のリンクをクリックします。
https://blogs.jpcert.or.jp/ja/2018/05/linopid.html
さて、このリンク先のページによると
このファイルは「RC4」という暗号化形式で暗号化されており、そしてその先頭の0x20が暗号化のカギになっている…と書かれています。
ですので
43 2c c9 de 28 e2 a6 c0 52 98 41 ef bc bf a5 12 88 9e c2 3d 0a c9 10 eb 51 08 ef 49 94 e0 e9 b7
がカギになります。
そして復号していきます。
CyberChefというツールを使います。
gchq.github.io

まず、先頭の32バイトが邪魔なのでこれを取り除きます。
左側の検索ボックスに「Drop」と入力してください。

f:id:ygp_tech:20191210114440p:plain
これからDrop bytesを選択

そして、DropbytesをRecipeという欄にドラッグアンドドロップします。f:id:ygp_tech:20191210114646p:plain
そして上の図のように設定します。この設定では最初の32byteを切り捨てるということになります。

次に、このままでは復号できないのでHexに変換します。
検索ボックスに「To Hex」と入力します。そして出てきたTo Hexを使います。
これも上の図と同じようにドラッグアンドドロップしますが、Drop bytesの下においてください。

f:id:ygp_tech:20191210114930p:plain
置いたところ
さて、このようになったと思います。

最後に、検索ボックスに「RC4」と入力し、RC4を一番下に配置します。
そして、Passphraseに先ほどのカギをコピペし、Input FormatをHexに、Output FormatをLatin1にしてセッティングは完了です。

f:id:ygp_tech:20191210115125p:plain
セッティングしたところ


完成品です
https://gchq.github.io/CyberChef/#recipe=Drop_bytes(0,32,false)To_Hex('Space')RC4(%7B'option':'Hex','string':'43%202c%20c9%20de%2028%20e2%20a6%20c0%2052%2098%2041%20ef%20bc%20bf%20a5%2012%2088%209e%20c2%203d%200a%20c9%2010%20eb%2051%2008%20ef%2049%2094%20e0%20e9%20b7'%7D,'Hex','Latin1')
このリンクを踏めばこの手順をかっ飛ばせます。

そしてInputという欄に先ほどのlogo.pngドラッグアンドドロップで読み込ませます
f:id:ygp_tech:20191210115458p:plain
するとOutputはこのようになるはずです。
ここに書かれている何やら.comで終わるいかにもドメイン名っぽいのがこの問題のFLAGとなります。これを.comまでコピーして、先ほどの問題の解答欄に張り付け、回答を押せばこの問題はクリアとなります。

f:id:ygp_tech:20191210115549p:plain
出力結果


と、ここまで急ぎ足でやってきましたが、いかがでしたでしょうか?
難しそう、よくわからない。という人も多いと思います。
それでも最初は大丈夫です。少しずつやっていけば、大抵の簡単な問題は解けるようになってきます。
今回の記事を通して、少しでもCTFというものに興味を持ってくだされば幸いです。

明日は宮野さんの記事です。

それではまたどこかでお会いしましょう!

ゆがぽ