この週末に開催されていた TUCTF 2019 にチームで参加していました。
- TU CTF
https://tuctf.com/(サイト閉鎖済み)
解いた問題について Writeup を記載します。
(Reversing) object
以下のような問題文と共に、run.o というファイルが与えられます。
とりあえず file
コマンドで確認してみます。
ELF 64-bit と書かれているので、まぁ Linux なら動くんだろうなと理解します。
Exiftool にもかけてみますが、めぼしい情報はなしでした。
( Exiftool ) File Size : 3.2 kB File Type : ELF object file File Type Extension : o MIME Type : application/octet-stream CPU Architecture : 64 bit CPU Byte Order : Little endian Object File Type : Relocatable file CPU Type : AMD x86-64
ともかく実行ファイルらしいので IDA Pro で見てみます。
簡潔ッ・・・!
関数も少なく関数名も親切で、内容も読みやすそうな感じでした。
とりあえず main や checkPassword という核心部分っぽいところを見てみることにします。
処理を眺める。
・・・
ざっと見た感じ、やっぱり checkPassword が核心っぽいので特に眺める。
たぶんこんな感じなんだろうと推測する。
とすると、実行ファイルのどこかに xor された状態のパスワード(たぶんフラグ)がありそう。
IDA pro で処理以外のバイナリ部分を見てみる。
・・・
とっても怪しい感じの16進数が見つかる。
この部分のデコードを試みます。
FD FF D3 FD D9 A3 93 35 89 39 B1 3D 3B BF 8D 3D 3B 37 35 89 3F EB 35 89 EB 91 B1 33 3D 83 37 89 39 EB 3B 85 37 3F EB 99 8D 3D 39 AF
さっきの処理をもう一度眺めると、xor 以外に shl と not が見えます。
それを踏まえて処理を組み立てていきます。
が、うまくフラグにならない。
なぜ・・・。
処理を眺める。
文字列処理の数値を変えてみる。
sub が必要なのかなと試してみる。
が、うまくフラグにならない。。。
うーむ・・・。
・・・
・・・?
もしかして、これパスワード復元するなら Shift の向き、逆じゃない?
ということで向きを left から right に変えて実行します。
やったぜ。
- フラグ:
TUCTF{c0n6r47ul4710n5_0n_br34k1n6_7h15_fl46}
(Reversing) core
以下のような問題文と共に、core と run.c というファイルが与えられます。
過去に解いた問題を思い出し、 run.c をコンパイルして実行した際のダンプコアが core なのだろうなと理解します。
ソースと core があるのでデバッグしたら解けるのかなぁ・・・
でも core って実行中のメモリ内容とかだよね・・・
それって中にフラグがそのまま埋もれていそうだなぁ・・・
と、胸アツな展開に思いを馳せます。
とりあえず run.c をテキストエディタで確認してみます。
ふむふむ。
フラグ周りでなんかしていますね。
・・・
もう core が気になってそれ以上は思考が働かなかったので早々に閉じます。
core を strings にかけてみます。
ひときわ異彩を放つ文字列を見つけます。
xor をかけます。
やったぜ。
- フラグ:
TUCTF{c0r3_dump?_N3v3r_h34rd_0f_y0u}
(PWN) runme
以下のような問題文と共に、runme というファイルが与えられます。
PWN ではめずらしく接続先なしでバイナリのみの問題でした。
runme は易しい問題でよく見かける気がするなぁ、などと思います。
ファイル名からして、動かせればフラグが出力されるのかも。
でもその前に IDA pro で見てみます。
・・・
やったぜ。
- フラグ:
TUCTF{7h4nk5_f0r_c0mp371n6._H4v3_fun,_4nd_600d_luck}
更新履歴
- 2019/12/02 新規作成。誤字を修正。
- 2020/08/31 CTF サイトが閉鎖されていたのを反映。