Trend Micro CTF 2017 – MISC 100 writeup

セキュリティTech

Trend Micro CTF 2017 - MISC 100 writeup

2017/06/23~24 の日程で、Trend Micro CTF 2017 に参加しました。
時間の都合もあり一部しか参加できませんでしたが、解けた1問の writeup を残しておきます。

MISC 100

与えられた .pcap ファイルを解析する問題です。

とりあえず覗く

なぜか Wireshark で開けないため、とりあえず strings コマンドで覗きます。
最後のあたりに FTP 通信が見えるので抜き出してみます。keylog.txt とやらを転送していますね。

220 Welcome to blah FTP service.
4c9@
USER user1
331 Please specify the password.
7c:@
PASS P@ssw0rd
230 Login successful.
Bc<@
PORT 192,168,2,10,250,19
200 PORT command successful. Consider using PASV.
9c=@
STOR keylog.txt
<c>@
150 Ok to send data.
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
4cA@
4cB@
226 Transfer complete.
(cC@
.cD@
QUIT
221 Goodbye.

CLIENT_RANDOM って何ぞやと調べてみたところ、HTTPS 通信を復号できる鍵であると判明。
https://www.m00nie.com/2015/05/decrypt-https-ssltls-with-wireshark/

一連の CLIENT_RANDOM 部分だけ抜き出して、 keylog.txt の名前で保存しておきます。

Wireshark で開く

バイナリで見ると先頭が a1 b2 c3 d4 となっているはずなのに、d4 c3 b2 a1 とマジックナンバーが逆になっている。(チームメンバが気づいてくれました)
手動で書き換えてみると、無事 Wireshark で開けるように。

WireSharkでファイルを確認

HTTP2 な通信ですね。
Edit → Preferences で設定画面を開き、 Protocols → SSL → (Pre)-Master-Secret log filename に、先ほど保存しておいた keylog.txt を読み込ませて復号します。

WiresharkでHTTPS通信を解析

データを抽出

HTTP2 の DATA を 適当に 選んで Follow → SSL Stream で開いてみます。(いい目星の付け方があれば知りたい)

WiresharkでHTTP/2の通信内容を確認

Show and save data asRaw にしてファイル保存します。(仮に data.bin とする)

Wiresharkで通信内容をバイナリ抽出

抽出したデータを確認

binwalk コマンドで調べてみると、以下のファイルが含まれていました。

$ binwalk -e data.bin

DECIMAL         HEX             DESCRIPTION
-------------------------------------------------------------------------------------------------------
324             0x144           LZMA compressed data, properties: 0x01, dictionary size: 16777216 bytes, uncompressed size: 559903 bytes
329             0x149           gzip compressed data, from Unix, NULL date: Thu Jan  1 09:00:00 1970
3016            0xBC8           TIFF image data, big-endian
47301           0xB8C5          TIFF image data, big-endian
91520           0x16580         gzip compressed data, from Unix, NULL date: Thu Jan  1 09:00:00 1970
102770          0x19172         gzip compressed data, from Unix, NULL date: Thu Jan  1 09:00:00 1970

gzip の中身が謎ですね。
file コマンドを叩いたり、直接開いて確認した結果、2つの HTML と、1つの CSS であることが分かりました。

HTML を確認

ブラウザで開いてみると、最後に怪しげな画像が2つ並んだページが表示されました。

抽出できた転送データ
抽出できた転送データ

HTML ソースを確認すると

<samp>HINT: visual cryptgraphy</samp>

の記載があるため、Visual Cryptgraphy でググると Wikipedia がヒット。
Visual cryptography – Wikipedia

Visual Cryptgraphy

なるほど、上手いこと重ねると答えが出そうですね。

画像データを取り出す

該当部分の CSS を見ると、BASE64 でデータが埋め込まれていたので、そこだけを抜き出してデコードし、画像ファイルに。

.sp {
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSU(略)ErkJggg==);
    background-repeat: no-repeat;
    display: block;
}

Base64 Online – base64 decode and encode

Visual Cryptgraphyの元データ

画像ファイルの高さが 106px であったことから、上下半分の 53px ずつに分割しました。
よく見ると、CSS にも以下の記載があるので間違いなさそうです。

.sp-0 {
    width: 440px;
    height: 53px;
    background-position: 0 0;
}

.sp-1 {
    width: 440px;
    height: 53px;
    background-position: 0 -53px;
}

画像ファイルを重ねる

どうやって重ねようかと考えていたところ、チームメンバが SiriusComp というソフトを見つけてくれました。
JPG と TIFF にしか対応していないようなので、Convert PNG to TIFF あたりを使用して PNG から TIFF に変換します。

上下 53px ずつに分割したファイルを重ねてみます。

Visual Cryptgraphyの解読

TMCTF{CanYouSeeThis?}

色々と遠回りをした気もしますが、無事にフラグゲットです。

おすすめ記事