ヾノ*>ㅅ<)ノシ帳

技術ブログに見せかけて、ジャンル制限のないふりーだむなブログです。

Trend Micro CTF 2017 Qual - rev100, osint100, misc100 の Writeup

日本時間で2017/6/24 13:00 - 6/25 13:00に開催されたTrend Micro CTF(TMCTF)にPing-Micで参加しました。時間は24時間です。 ぼっちだったので時間が全然足りんかったです。

以下の3問のWriteupを書きます。18時間かけて成果がこれですよ、はい。

  • Reversing 100
  • OSINT 100
  • misc 100

結果はチームとして300点(内300点submit)のTODO位です。

Reversing 100

初見でやるだけの自明な問題と分かるタイプの問題でした。バイナリ解析とx64dbgのリハビリとして解きました。良いリハビリになりました。

手順:

  1. fileコマンドでファイル形式を確認して展開→PEと暗号化済みzipが出てきた
  2. 32ビットのPEバイナリは動的解析をうまくしながら静的解析(※後述)
  3. 1つ目のパスワードmacaronがでてきるので暗号化済みのzipを復号
  4. 最終ステージに突入。画像ファイルの末尾にPKの文字があり、後ろにzipがあることが自明。1つ目のキーワードcreamという文字が書かれたtxtファイルが出て来た(※後述)
  5. 2つ目の32ビットPEバイナリを動的解析して2つ目のキーワードchouxを得た(※後述)
  6. biscuit4というファイルにはフラグ生成の指示が書かれている。それをもとにありえるflagを全通り試す(※後述)

1つ目のPEバイナリ(biscuit1)の解析

32ビットときたら久々のIDA Freeの出番です!x64dbgでstackを観察する限り、main関数相当の関数でargv, envを読み取ってから何か情報を得ている様子がないのと、プログラムからcost char[]ではない文字列の出力がないので内部でsecretを生成するタイプのバイナリと判断しました。

f:id:katc:20170625183627p:plain

IDAによる静的解析でスタックに文字列を積んでその後のループでこねくり回しているいかにもな箇所を発見しました。あとはx64dbgでステップ実行しながらスタックを人力で監視してmから始まるスイーツの名前が出て来るのを待ちます。

f:id:katc:20170625183646p:plain

よく見るとmarcaronという文字列が生成されたのがおわかりいただけると思います。

画像ファイル(biscuit3)の解析

最終ステージで出てきた怪しげな画像ファイル。そこに何もflagのヒントがないということは少ないので010 Editorにぶち込みます。 画像ファイルの終わりに怪しげなPKの文字。zipファイルを付加されているのが自明です。

f:id:katc:20170625184108p:plain

2つ目のPEバイナリ(biscuit5)の解析

先と同じノリで静的解析してsecretを生成しているルーチンを探します。5文字という決め打ちの値でループを回しているところが怪しいです。

f:id:katc:20170625184721p:plain

x64dbgでは0401656にソフトウェアブレークポイントを張って、Runさせながらメモリがどう書き換わるのかを観察しました。元々"biscuit"だった5文字が何に変わるのでしょうか。

f:id:katc:20170625184802p:plain “choux"が出てきましたね。

flag生成

biscuit4にはこう書かれていました。

Please create flag.

hint:

Flag = TMCTF{biscuit3_ biscuit5}

この場合、biscuit5でのトラップを考えると、flagは次の10+5通りがありえます。

  • TMCTF{cream_ choux}
  • TMCTF{cream choux}
  • TMCTF{cream_choux}
  • TMCTF{CreamChoux}
  • TMCTF{Cream Choux}
  • TMCTF{Choux Cream}
  • TMCTF{ChouxCream}
  • TMCTF{choux cream}
  • TMCTF{choux_ cream}
  • TMCTF{choux_cream}
  • TMCTF{cream_ biscuit}
  • TMCTF{cream_biscuit}
  • TMCTF{cream biscuit}
  • TMCTF{Cream Biscuit}
  • TMCTF{CreamBiscuit}

あとは片っ端から試して、この問題のフラグはTMCTF{choux_cream}

OSINT 100

問題文:

Category: Iot/osint/scada
Points: 100

Today you received an email that seemed to be from an online shopping site that you use - but when you followed the link something definitely did not seem right. It appears that the world's worst phisher must have set up the page - and has targeted you with a phishing attack!

The email text said you needed to visit a link to update the security of your acccount. However the link actually lead to the site ctf.superpopularonlineshop.com.definitelynotaphishingsite.com

For this challenge you must find the "Real Person" who is behind this attack - leveraging your Open Source Intelligence (OSINT) skills.

The Flag will be found on one of their social profile pages


NOTE: Pen Testing the site will not help - in fact all you need to start the trail is in this email already

要するに、

  • ctf.superpopularonlineshop.com.definitelynotaphishingsite.com というFQDNをヒントに当事者の実名を見つけてくれ。
  • サーバーを調べても何も出てこないよ

ということです。

手順:

  1. whois情報を見る
  2. OSINTツールでひたすら辿る

うまくいく辿り方

  1. http://domainbigdata.com/definitelynotaphishingsite.tk
  2. Other TLDsで出てくるドメインをクリック
  3. http://domainbigdata.com/definitelynotaphishingsite.com
  4. RegistantのOsint Isfunをクリック
  5. http://domainbigdata.com/nj/0yFrGiv7y4k017TTe3o6UQ
  6. 個人所有っぽい t3m4.com にアクセス
  7. ホームページのタイトルがPersonal Home Page for T3-M4Haxor
  8. T3-M4Haxorでググる
  9. 実名っぽい(でもこれはコンテスト用のfake情報で、仮称もあり得る←実際どうなん?)LinkedInがヒットする→開く
  10. (*)が載っている。
  11. 13という文字からしてROT暗号。文字列を回してフラグ TMCTF{FTR0SINT101} を得た

(*)

プロジェクト
Trend Micro CTF 2017
Proud to have helped with the Trend Micro CTF 2017 - especially Secret Challenge “13” -> GZPGS{SGE0FVAG101}
チームメンバー:
Davik Surik

役に立たない情報/ひっかけ情報

  1. 電話番号でググるhttp://www.25cycle.com/ にたどり着く → whois で Abel Network という会社が出てくる → この会社のFacebookを見る限りCTFに関係なさそうな人物

misc 100

Wiresharkで見る前に、stringsで疑似Follow TCP Streamします。FTPでkeylog.txtファイルを送ったのが分かりました。中身がこちら:

CLIENT_RANDOM 9563c57725522ab0cebb420f2ff549cdcc214d05a2b7aa5601f1935bcd1ac7c3 c5e10df5dbd09bd97b5ea6f1b291d8cac7066178d6805cf371e12ea1095131d1e6096132d7d0e072c78005f6d1b7fe5b
CLIENT_RANDOM f51ac603ddd9c6d8146cd03028f129365e32a928a08629892be4c26a454634bb 0a9dea018920113ec333446e1a185fd072444a1db9d7a8a9b9b21f2472f39db3f92929a25e3d634d58259537a3b47d60
CLIENT_RANDOM 3e401f34cc591c8a35aeedaddf181f7c458a84e058392735d74679eb0393431a 89d66ea9f10d711b6ff8c54c86474096252b8e8173aa271d8441b38c720d9d4a5b569b14cb1d898df16473ebfa23a1d2
CLIENT_RANDOM 0e2d5ecede1cf0f7d1d75329e3e386e160d99ac89e0ec09187651096d79ba35a afe74535c230c9d7e5f08ace8ce02d8200b8078854e41c30703f7da4ab7bd405788956805e9403996aa9412e2a26d545
CLIENT_RANDOM 89e8225f13ed1b39406f25c3f634f0ec91da0be693b7dcb9044efbbf2fe9363e 60b8b92fd58faabbfe00bec7fbf1c39db21030ff3c215c079176be6bcfe167df4114f1950790aaf432312a1397be2cb6
CLIENT_RANDOM 55d1989b2b9005b72599552ff352c4eef03bdb7153aaddd9942d69a19441fdaf 07cc14d902872bbdbdf5d05463a918c585604d373d7524ff405c396a2d4adafffd82b6136de4b7204d33fd9f2ff8f113
CLIENT_RANDOM 3cd78f4befe06bdb4c5559930817c8056aa14fe0c6a67d806ea0cc34c317fa51 ac7be48df12853bae2896042829a2011225e56ccdb63a05520b574b6d9f4aedd3f6c8377d47130e995f16a588dad5858
CLIENT_RANDOM cfaf0c18297c00ba7541ae55012df1fe825727a32ab94e38e1aeb985f9cf3ce5 3f81b68f0b9df5b719a54bb364505cb29209ae7a30d0525bb5a873e375bdbc9ac77ff24aa21def886d61f7cdcc0b06d5
CLIENT_RANDOM a77cdcf8084d073ec7059933e454408e25c6a01c8dbb888e9a3a862b609d8503 b5e7230fc735a87666fd2aee430917fd97bcf5f961b4099b979453b51176c0496629fe5af17da7f52204953782c90fdb
CLIENT_RANDOM d2d06ea94000a9204ea9e2d8272e77e4758958caaff0e9b4bfa7dbe4228d9251 bb716b4ff6de9730d0cd85446f3b5682b9055a54ac071279326ad2739083f54f0d13e689b47fcbb88a0dddb9ddd44175
CLIENT_RANDOM 4955c52a45946483854a4f333493870baa838a5c54c7112252a2828931393cd3 45aef6edb24a058b613559847db56db375b2f4286f9633f26735799ac2e8b0679853e72c1ec4188908bfa9b021c829cd
CLIENT_RANDOM 2acd97c21e8d33bb349d9612cb5b6220f10e5e4106d9449bf7dc5c933292f59e f70dc2ce8a96da62b9c6c5e2dea8aa776a666908c46a34d71dd297a002ba9e6a55b39e1cc8e845a7e058c779b400f82f

Wiresharkでの初見の印象はSSLFTPだったので、頭の中の過去問データベースから推論して、既知のpre master secret keyからのSSL通信の復号がメインテーマっぽいと考えました。 確か特殊な環境変数の元でブラウザを起動すると指定した場所にpre master secret keyを保存してくれましたよね。Slideshareとかでサーバーの秘密鍵がなくても通信の中身が見れるよーっていうスライドを以前に見たことがあります。 ファイルに特徴的なCLIENT_RANDOMでぐぐっても同じ結論に至ると思います。

keylog.txtをWiresharkに食わせてSSL暗号化を解除しました。HTTP2が見えるようになりました。 SECCON 2016 QualsのときはHTTP2のヘッダを解析してくれなかったんですが今は対応してますね。

f:id:katc:20170625194403p:plain

見つけたHTTP GET Requestは次の通りです:

  • index.html
  • main.css
  • 404.html
  • 画像2枚

あとは、それぞれのペイロードをCopy > Bytes > Offset Hex(Cypy > … as Hex Dump)でコピーしてテキストエディタでいらないところを置換で消去してから保存。 次に、xxd -r -p FILE.hex > FILE.bin。 HTTP Response Headerからhtmlとcssgzip圧縮がかかっていることが分かるので、画像以外は gzip -d FILE.bin.gz > FILE.binも必要。 main.cssはあとでブラウザで読み込むのでファイル名をちゃんと合わせておきます。

index.htmlをブラウザで確認すると、Lorem ipsumのような文字列と画像が2枚、モザイク状の画像が2つあるのがわかります。 画像はビールとブルーベリーで元ネタはフリー素材です。ブルーベリーだけお尻が切れた(SOSからEOIが未完結な)jpeg画像でした。 モザイク状の画像はCSSのbackgroud-image: url()で与えられたものです。2枚表示されますがどちらも同じです。サイズは8の倍数で01の2値情報を含んでいるかと思って復号してみましたが乱雑なデータしか出てこないのでノーチャンです。

f:id:katc:20170625194541p:plain

もう一度htmlのコードをよく見ると64行目に、

    <samp>HINT: visual cryptgraphy</samp>

と書いてあるのを見つけました。Visual CryptographyでググるWikipediaのページが出てきました。

Visual cryptography - Wikipedia

f:id:katc:20170625193838g:plain

これ、ほぼ答えですねー。Photoshopでモザイク状の画像のレイヤーを2つ用意して一方を上下方向に1ピクセルずつずらしてフラグゲットしました。

f:id:katc:20170625194142p:plain

fllag: TMCTF{CanYouSeeThis?}


@運営:
当初から掲げていた、サイバー犯罪・サイバーセキュリティの最前線の追体験を重視したCTFが体現されてましたし、今までよりもずっと洗練されてきています。 今の路線で続けてほしいと思っています。 あと知的興味を刺激されたいいCTFでした。


問題を解くのに変に時間をかかってしまう病がまた発病してますね。これじゃCTFを始めた頃と同じですわ。 負け惜しみみたいな文面になりますが、他のWriteupを見る限りForensic 100とAnalysis-Defensive 200はやるだけの簡単な問題でしたね。ノーチェックでした>< 過去に類似の問題が出ているので、この問題のflagをsubmitしてないのはguiltyなレベルですわ。 今回は普段CTFで出題されないような問題(特にOSINT)を解くことを重視したので、自分の中でその問題をノーチェックだったのはまあ仕方ないといということにしておきます。

チームに2人以上いれば、誰でも解ける段階まで解けたら他の人に投げて別の問題を解くということもできるんですが、最近の有名どこのCTFは皆が忙しいときに開催されるので人数が揃わないんですよね。 CTFが超好きで、予定を調整して参加するほどの人ってなかなか居ないのが最近の悩みです。

解きたかった問題: