Trend Micro CTF 2017 - Raimund Genes Cup - Online Qualifier Writeup(rev100)
開催期間(JST)
06/24 PM1:00 ~ 06/25 PM1:00
結果
・チーム名:wabisabi
・得点:200pt
・順位:得点したチーム中,175/294
解いた問題
・rev100
取り組んだが解けなかった問題
・Analysis-Offensive100
・rev200
・IoT/OSINT/SCADA100
はじめに
参加してました.用事があったりで全部の時間は使えなかったけど割と楽しかった.
1問しか解けてないのはいつものこと.(1問アシストしたので1.5問みたいな感じだから・・・)
Writeup
rev100
配布されるファイルは,AESで暗号化されたものが渡される感じだった.復号してからfileコマンド.
$ file pocket pocket: Zip archive data, at least v2.0 to extract
解凍するとbiscuitという名前のrarで圧縮されたファイルがでてくる.
$ unrar e biscuit
biscuit1というPE32のものと,biscuit2というpasswordつきzipの2つのファイルがでてくる.
biscuit1を実行してみる.
$ ./biscuit1 Please find sweets name starting from m for biscuit2.
mから始まるお菓子・・・と思い調べた結果,マカロンではと思い"macaron"で解凍してみるといけた.
Archive: biscuit2 [biscuit2] biscuit4 password: inflating: biscuit4 inflating: biscuit5 inflating: biscuit3
biscuit3はjpgだったのでとりあえずExifを見てみるが,特に何もない.
stringsしてみると,末尾にzipがついているのがわかる.binwalkが手っ取り早いので,
$ binwalk -e biscuit3
すると,"cream"と書かれたbiscuit.txtがでてくる.
biscuit4を見る.これはテキストファイル.
$ cat biscuit4 Please create flag. hint: Flag = TMCTF{biscuit3_ biscuit5}
biscuit3のほうは手に入っているので,biscuit5をみていく.
$ file biscuit5 biscuit5: PE32 executable (console) Intel 80386 (stripped to external PDB), for MS Windows
実行しても特に何も表示されない.
objdumpで逆アセンブルして読んでみると,"biscu"という文字列を使って_shift_charという関数でゴニョゴニョやってる.
静的解析が辛くなったので,IDAのデモ版で実行しながらみていくことにした.
左下のルーチンを"biscu”という回数分繰り返すので,このルーチンの前あたりにブレークポイントを張って動的解析していく.
“biscu"という文字列を,先頭から順に1文字ずつ取り出して_shift_charに渡すという処理が計5回行われる.
call _shift_char
に対してステップインして中を見ていく.
最初に渡されるのは"b".
それを"abcdefg…..“というスタックに積んであるものに対して"b"が出てくるまで1文字ずつシフト.
その後,シフトした回数+1というか↑のルーチンを実行した回数分,"abcde…“という文字列を先頭から左にシフト.(正確に言うと,スタックにある"abcde…."のアドレスに回数分を加算)
すると,"b"の場合は"c",次の"i"は"h",次の"s"は"o"...となっていって最終的に"choux"となる.
よって,biscuit3の答えと合わせてTMCTF{cream_choux}でsubmitしてみるも通らない.
cream chouxで調べてみると,シュークリームが英語で"choux cream"らしく,(英語力の無さ)
TMCTF{choux_cream}にしたらいけた.
取り組んだが解けなかった問題
Analysis-Offensive100
$ file Forensic_Encyption Forensic_Encyption: MS-DOS executable, MZ for MS-DOS
これは最初,binwalkで取り出して3つのzipファイルに対してゴニョゴニョやってた.今年のPlaid CTF予選で出たZipperみたいにzipのバイナリを書き換えて修正していくものかなと思ってたけど,file_3がどうも見当たらない.
渡されたファイルのバイナリを見てみるとわかった.
00000000: 4d5a 0304 1400 0000 0800 f484 af4a bc79 MZ...........J.y 00000010: 17c2 2a34 0000 8879 0000 0600 0000 6669 ..*4...y......fi 00000020: 6c65 5f33 d45a 0958 1357 bb3e 618d c822 le_3.Z.X.W.>a.." .................
先頭のシグネチャがMZであることからMS-DOSかと思うが,file_3という文字列が見える.
これは実はzipのlocal file headerであり,もともとのシグネチャ0x504B0304の504Bを4d5aに書き換えられたものだった.
よって,そこを修正して解凍するとうまくいく.
出てきたファイルは3つ,jpg,passwordつきzip,pcapファイルがそれぞれ1つずつ.
ここからjpgをstringsしたりstegsolveで見てみたりしたけど進捗なし.
pcapファイルのほうもわからず途方に暮れていると,チームメンバーのkobadからslackが飛んできて,passwordつきのzipは解凍できたけどpcapファイルが見つからないとのこと.
そこで,自分がやった過程を共有して,あとはkobadに任せた.(プロなのですぐ解いてた.エニグマだったらしい)
rev200
RFIDの問題.
渡されたテキストファイル.
$ cat rawbits.txt Using Clock:64, Invert:0, Bits Found:625 ASK/Manchester - Clock: 64 - Decoded bitstream: 1110111110111000 1010011110111010 1100111111111111 1011101111011101 1110111110111000 1010011110111010 1100111111111111 1011101111011101 1110111110111000 1010011110111010 1100111111111111 1011101111011101 1110111110111000 1010011110111010 1100111111111111 1011101111011101 1110111110111000 1010011110111010 1100111111111111 1011101111011101 1110111110111000 1010011110111010 1100111111111111 1011101111011101 1110111110111000 1010011110111010 1100111111111111 1011101111011101 1110111110111000 1010011110111010 1100111111111111 1011101111011101
検索したら16進数に戻していたりしたので,適当にスクリプト書いて
DemodBuffer: EFB8A7BACFFFBBDDEFB8A7BACFFFBBDDEFB8A7BACFFFBBDDEFB8A7BACFFFBBDDEFB8A7BACFFFBBDDEFB8A7BACFFFBBDDEFB8A7BACFFFBBDDEFB8A7BACFFFBBDD
とかやってたぐらい.
全く知らない分野で厳しかった.
IoT/OSINT/SCADA100
これは,whoisで渡されたドメインを調べて,電話番号がわかって,同じ電話番号で登録されているドメインを見つけて,そこに書かれているメールアドレスを調べて....とかやってたぐらい.
まとめ
Google CTFよりかは難しくなかった.
rev力~~~~