Trend Micro CTF 2017 Online Qualifier writeup

Trend Micro CTF 2017 Online Qualifier writeup

いつもの yharima で参加.
結果は 500pts で 88th でした.微妙.
Windows バイナリを解析する力が足りない事を実感した.厳しい. 自分が解いた2問の writeup を書いておきます.

Reversing 100

記憶が微妙だけど落としてきたファイルを解凍すると, biscuit1biscuit2 が出てきたはず.
biscuit2 zip で暗号化されているので,まず biscuit1 を解析していく.
biscuit1Windows バイナリなので ollydbg に投げつけて実行してみる.
まず実行すると Please find sweets name staring from m for biscuit2. と出るので,
更にステップ実行しながらレジスタをみていると m から始まる英単語がいくつかでてくる.
適当にでてきたやつを入れていくと macaron で解凍できた.

解凍するとさらに biscuit3, biscuit4, biscuit5 が出て来る.
biscuit3jpeg で開いてもビスケットな画像だけ.
思考停止して binwalk してみると,

$ binwalk biscuit3.jpg

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
382           0x17E           Copyright string: "Copyright (c) 1998 Hewlett-Packard Company"
14253         0x37AD          Zip archive data, at least v1.0 to extract, compressed size: 5, uncompressed size: 5, name: biscuit.txt
14356         0x3814          End of Zip archive

なんか text ファイルが入っているので展開してみると中に, cream と書いてあるファイルがあるので,これがフラグの一部だと思われる.

続いて biscuit4 を見てるみるとただの text ファイルで以下のような内容.

$ cat biscuit4
Please create flag.

hint:

Flag = TMCTF{biscuit3_ biscuit5}

なるほど,ヒントで, biscuit3 は解析が終わっているのであとは biscuit5 を解析する必要がある.

biscuit5 はまた Windows バイナリなので ollydbg にかける.
適当にステップ実行して RET あたりのレジスタをみてみると choux という文字列が入ってるのでこれっぽい.

あとは,ヒントのよおり TMCTF{cream_ choux} とかで投げてみたけど通らない.
試行錯誤しているうちに最終的には TMCTF{choux_cream} で通った記憶.謎かった.

Analysis-Offensive 100

解凍すると Forensic_Encyption が出て来るので file にかけると,

$ file Forensic_Encyption
Forensic_Encyption: MS-DOS executable, MZ for MS-DOS

えっ…,ちょっと binwalk してみよう.

$ binwalk Forensic_Encyption

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
13390         0x344E          Zip archive data, at least v2.0 to extract, compressed size: 16181, uncompressed size: 20874, name: file_1
29607         0x73A7          Zip archive data, at least v2.0 to extract, compressed size: 378, uncompressed size: 418, name: file_2
30177         0x75E1          End of Zip archive

なんか埋め込まれてるので展開すると file_1file_2 が出て来る.

まず file_1 をみてみると. jpeg で開いてみるとなんか smily な画像が出てくるだけ.
binwalk してみても特に何もなさそうなので exiftool にかけると,

$ exiftool file_1
ExifTool Version Number         : 10.20
File Name                       : file_1
(snip)
User Comment                    : VHVyaW5nX01hY2hpbmVfYXV0b21hdG9u
(snip)

なんか怪しいユーザコメントがある. base64 っぽいのでデコードすると,

$ exiftool file_1 | grep "User Comment" | awk '{print $4}' | base64 -D
Turing_Machine_automaton

file_2 をみてみると zip で解凍しようとすると,

$ unzip file_2
Archive:  file_2
   skipping: key.txt                 unsupported compression method 99

なんか適当に調べていると 7z で解凍できるらしい.

$ 7z e file_2
// パスワードは `Turing_Machine_automaton`

で解凍できた. key.txt がフラグかーと思ってみてみると…

$ cat key.txt
src 192.168.30.211 dst 192.168.30.251
        proto esp spi 0xc300fae7 reqid 1 mode transport
        replay-window 32
        auth hmac(sha1) 0x2f279b853294aad4547d5773e5108de7717f5284
        enc cbc(aes) 0x9d1d2cfa9fa8be81f3e735090c7bd272
        sel src 192.168.30.211/32 dst 192.168.30.251/32
src 192.168.30.251 dst 192.168.30.211
        proto esp spi 0xce66f4fa reqid 1 mode transport
        replay-window 32
        auth hmac(sha1) 0x3bf9c1a31f707731a762ea45a85e21a2192797a3
        enc cbc(aes) 0x886f7e33d21c79ea5bac61e3e17c0422
        sel src 192.168.30.251/32 dst 192.168.30.211/32

あれ…,これは IPSec とかの通信を復号するときに使える鍵とかの情報….
でも pcap なんかなかったしどういうことなの…と思って,
元の Forensic_Encyption を strings してみると, file_3 なる文字列がみえる.
これは何か足りていないような気がするけどなんで binwalk で展開できないのかと思い,
バイナリエディタで開いて眺めてみると…,先頭は以下のようになっている.

0000000: 4d5a 0304 1400 0000 0800 f484 af4a bc79  MZ...........J.y

まあ先頭が MZ なんだから MS-DOS executable, MZ for MS-DOS なんだろう….
03 04 14 ってなんか特徴のありそうな16進数のように思えたのでググってみると,
50 4b 03 04 14 が PKZip らしい.あれこれ書き換えられてる…と思って 4d5a => 504b にして binwalk すると,

$ binwalk Forensic_Encyption

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Zip archive data, at least v2.0 to extract, compressed size: 13354, uncompressed size: 31112, name: file_3
13390         0x344E          Zip archive data, at least v2.0 to extract, compressed size: 16181, uncompressed size: 20874, name: file_1
29607         0x73A7          Zip archive data, at least v2.0 to extract, compressed size: 378, uncompressed size: 418, name: file_2
30177         0x75E1          End of Zip archive

file_3 でてきた.そしてこいつを wireshark で開くと開ける!
さっきの key.txt を Preferences => Protocol => ESP から入れて復号して,
192.168.30.211 でフィルタすると HTTP 通信があって index.html がある.
こいつを開くと,

$ cat index.html
<HTML>
<BODY>
M4 Navy
Reflector:C Thin, beta, I, IV, II (T M J F), Plugboard: L-X/A-C/B-Y

TMCTF{APZTQQHYCKDLQZRG}

APZTQQHYCKDLQZRG is encrypted.

</BODY>
</HTML>

まだ暗号化されてるのか…, M4, Naby, Reflector, Plugboard などで検索すると,
どうやらエニグマを使って暗号化されているらしい.
チーム部屋に投げると,エニグマのシミュレータが貼られたのでポチポチそれっぽい設定をする.
最終的には以下のような設定にすると,意味のあるワードになったので投げてみた(しかし設定ミスしていることにあとできづいた).
f:id:yharima:20170625172942p:plain

TMCTF{RISINGSUNANDMOON} がフラグだった.

Analysis-Offensive 200(WIP)

入力は 8文字の数字.これを AABBCCDD と表すと以下の条件を満たす必要がありそう.

  • 入力された8桁は素数
  • AA と BB は素数
  • CC は 平方数
  • (AABB ^ (CC * CC)) >> 8 が 0
  • AABBCCDDValidate Flag: を文字としてみて全部足した結果から 0x120 を引いた結果も素数

これの中でもっとも大きい数字は 43436447 っぽく,これを入れて出力される flag.txt は TMCTF{434364}
これを入力しても通らずほぼすべての時間を溶かして死亡しました…. :sob: