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

Shi0shishi0

とても眠い。

MNCTF2016 >>> Writeup

CTF セキュリティ

TLを眺めていたらMacnica Networks DAY 2016で行われたMNCTF2016の問題がWebに公開された、という情報が目に止まったので、とりあえずやってみました。


常設CTF扱いになりそうですし、マクニカネットワークスさんから公式のWriteupが出そうな気がしますが、一応まとめておくことに。


f:id:echoha610:20160710201926p:plain

暗号新聞(CRYPT40)

クロスワードを埋めるとフラグが出る問題。
問われているのはセキュリティの用語でした。

FLAG : 7554525ad9e33e7e1c596a0b25ca96d1

同一集団 ~ 同一集団5(MISC4 or MISC8)

shinobot.com が攻撃者の持つドメインであることがわかったので、この攻撃者グループが所有している他のドメインも調べてプロキシサーバしたい。そのために、WHOISの登録情報から同一攻撃者が保持している他のドメインを調査して欲しいという問題。

みんな大好きwhoisコマンドを使い、Registrant Emailに登録されているメールアドレスを確認。(ryo_no_ryo-master@yahoo.co.jp)

このメールアドレスをViewDNSというサイトの「Reverse Whois Lookup」に入力。
検索結果のうち、shinobot.com以外の5件のドメインがFLAG。

FLAG : mnctf.info
FLAG : mnd2015.info
FLAG : noitalumis.info
FLAG : shinolocker.com
FLAG : shinosec.com

難読記録(MISC40)

ログから必要な情報だけを取り出すための正規表現を考える問題。

以下の条件を満たすための正規表現が必要らしい。

先頭は「AD\」から始まる(ドメイン名)
そのあとに16進数が6文字続く
英字はすべて大文字

(例)
AD\012345
AD\F1B3CD
AD\FFFFFF

とりあえず正規表現をぽちぽち入力して試してみました。

AD\\[A-Z0-9]{6}

これだと、AD\の後ろに6文字以上の16進数文字列があるダミーも拾ってしまう。(例えば、AD\AAAAAAAAのようなもの)
ログを眺めて見ると、本物のPC名は「AD\XXXXXX . 」のように、16進数文字列のすぐ後ろに半角スペースがあることがわかる。
また、「AD\DUMMYZ . 」というダミーはADの前に文字列がくっついているが、本物は半角スペースが入っている。

\sAD\\[A-Z0-9]{6}\s

半角スペースで挟んでやる形にするとFLAGが出ました。

FLAG : R3G3X_M4573R

超持株会(Web40)

てしがわら君に株を1000口(百万株)を買わせるのが目的の問題。

例としてやまもと君の株申し込みページのURLが記載されている。
やまもと君のURL内にあるクエリストリングには「id=71a842cd29f851f722069ee64c6ec5a8」という値が含まれている。

何らかの値のMD5ハッシュ値に見えるなと思ったので、やまもと君の社員番号のMD5ハッシュ値を取ってみると、この値と一致した。
なので、てしがわら君の社員番号A20050023 のMD5ハッシュを取得し、その値をid=以下にくっつけてみるとてしがわら君の株申し込みページにアクセスできた。

購入株数を選ぶプルダウンを確認すると、選択肢が100口までしかなく、1000口は選択できなかった。

f:id:echoha610:20160710030316p:plain

f:id:echoha610:20160710030111p:plain

入力情報は以下のようにPOSTされていたので、ここのstockの値を1000に変えてあげれば1000口購入させることができそう。

id=A20050023&price=112&stock=100&submit=%E7%94%B3%E8%AB%8B

Fiddlerを起動し、Rules - Automatic BreakPoints - Before Requests にチェックを入れて入力データをPOSTするタイミングで内容を書き換えた。

f:id:echoha610:20160710030728p:plain

f:id:echoha610:20160710030752p:plain

書き換えたデータでPOSTするとFLAGが出た。てしがわら君は株の代金をちゃんと払えるのだろうか。

FLAG : ST0P_ST0CK_STUCK

権限昇格(BINARY40)

マルウェア検体が入ったZIPファイルが問題として提供されている。
このマルウェアが悪用する脆弱性のCVE番号を答えれば良いらしい。

とりあえずハッシュ値VirusTotalで検索。検出名にCVE番号を含むものがあったので入力したら正解だった。

f:id:echoha610:20160710031257p:plain

FLAG : CVE-2016-0099

一行挿入(WEB60)

株式会社マクニキのWebサイトが改ざんされており、Webサイト内に不審なスクリプトファイルが埋め込まれているらしい。
このスクリプトファイルの解析をしてFLAGを探す問題。

埋め込まれているスクリプトの中身を見てみると、パッカーで難読化されていることがわかる。

f:id:echoha610:20160710031835p:plain

アンパックしてスクリプトの内容を確認したところ、このスクリプトはUserAgentを見て条件分岐を行なっている。
FireFoxプラグインを使って自分のUserAgentを「ShinoBrowser 1.0.0.1」に書き換え、その状態で改ざんサイトにアクセスすると誘導が実行された。

問題文には攻撃者のページのファイル名を特定するべしと書かれているので、誘導先のhtmlファイル名を入力した。

FLAG : SikqsGXV.html

超標的型(BINARY60)

exeファイルが渡される。このexeファイルはマルウェアで、特定の端末でしか動かないらしい。
その特定の端末を判断するために使われている文字列を調査する、という問題。

exeファイル内部の文字列をStringsコマンドで出力して確認すると、「Computer Name: 」や「This host is not the target.」といった文字列があることがわかった。

f:id:echoha610:20160710200648p:plain

IDAでこのexeファイルを開き、text検索で上の文字列がある場所に飛んでみると、GetComputerNameA()をCALLしていた。

f:id:echoha610:20160710200704p:plain

もう少し下を見ると何らかの文字列を1文字ずつコピーしている露骨に怪しい箇所があり、更に下を見ると攻撃対象/非攻撃対象の条件分岐もあった。

f:id:echoha610:20160710200934p:plain

取得したコンピュータ名がこのexeファイルにハードコードされている文字列と一致していれば動作し、そうでなければ動作しないという作りなのだろうと推測できた。
比較に使われる文字列はどれなのかだが、とりあえず先ほどの1文字ずつコピーされていた文字列を確認してみるとこれが「TESHIGAWARA-PC」となっていた。

f:id:echoha610:20160710201212p:plain

おそらくこれがFLAGなのだろうと思い入力してみたら当たりだった。てしがわら君だけが狙われているので、確かに超標的型ですね。

FLAG : TESHIGAWARA-PC


こんな感じで一通り問題をやってみましたが結構面白かったです。
来年はMacnica Networks DAYにも参加して、現地でCTFやったり講演を聴いたりしたいなと思います。(今年は仕事の都合で行けなかった…)

丸文字文の問題は解いていないのでそのうちまた。