setodaNote

忘れる用のメモ書き

TUCTF 2019 Writeup

この週末に開催されていた TUCTF 2019 にチームで参加していました。

解いた問題について Writeup を記載します。


(Reversing) object

以下のような問題文と共に、run.o というファイルが与えられます。

f:id:soji256:20191130142845p:plain:w450
(Reversing) object

とりあえず file コマンドで確認してみます。

f:id:soji256:20191130142937p:plain
file run.o

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 で見てみます。

f:id:soji256:20191130143349p:plain
run.o - IDA pro

簡潔ッ・・・!

 

関数も少なく関数名も親切で、内容も読みやすそうな感じでした。

とりあえず main や checkPassword という核心部分っぽいところを見てみることにします。

 

処理を眺める。

 

・・・

 

ざっと見た感じ、やっぱり checkPassword が核心っぽいので特に眺める。

 

たぶんこんな感じなんだろうと推測する。

f:id:soji256:20191130144639p:plain
checkPassword - IDA pro

とすると、実行ファイルのどこかに xor された状態のパスワード(たぶんフラグ)がありそう。

 

IDA pro で処理以外のバイナリ部分を見てみる。

 

・・・

f:id:soji256:20191130144850p:plain
DATA XREF: .data.rel.local:password - 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 が見えます。

それを踏まえて処理を組み立てていきます。

f:id:soji256:20191130145738p:plain
From Hex, 3 more - CyberChef

が、うまくフラグにならない。

なぜ・・・。

 

処理を眺める。

文字列処理の数値を変えてみる。

sub が必要なのかなと試してみる。

 

が、うまくフラグにならない。。。

 

うーむ・・・。

 

・・・

 

・・・?

 

もしかして、これパスワード復元するなら Shift の向き、逆じゃない?

ということで向きを left から right に変えて実行します。

f:id:soji256:20191130150412p:plain
Flag

やったぜ。

  • フラグ: TUCTF{c0n6r47ul4710n5_0n_br34k1n6_7h15_fl46}

(Reversing) core

以下のような問題文と共に、core と run.c というファイルが与えられます。

f:id:soji256:20191130150516p:plain:w450
(Reversing) core

過去に解いた問題を思い出し、 run.c をコンパイルして実行した際のダンプコアが core なのだろうなと理解します。

 

ソースと core があるのでデバッグしたら解けるのかなぁ・・・

でも core って実行中のメモリ内容とかだよね・・・

それって中にフラグがそのまま埋もれていそうだなぁ・・・

 

と、胸アツな展開に思いを馳せます。

 

とりあえず run.c をテキストエディタで確認してみます。

f:id:soji256:20191130150855p:plain:w300
run.c - サクラエディタ

ふむふむ。

フラグ周りでなんかしていますね。

・・・

 

もう core が気になってそれ以上は思考が働かなかったので早々に閉じます。

 

core を strings にかけてみます。

f:id:soji256:20191130151146p:plain:w300
core - strings

ひときわ異彩を放つ文字列を見つけます。

xor をかけます。

f:id:soji256:20191130151300p:plain
XOR Brute Force - CyberChef

やったぜ。

  • フラグ: TUCTF{c0r3_dump?_N3v3r_h34rd_0f_y0u}

(PWN) runme

以下のような問題文と共に、runme というファイルが与えられます。

f:id:soji256:20191130151350p:plain:w450
(PWN) runme

PWN ではめずらしく接続先なしでバイナリのみの問題でした。

 

runme は易しい問題でよく見かける気がするなぁ、などと思います。

 

ファイル名からして、動かせればフラグが出力されるのかも。

でもその前に IDA pro で見てみます。

f:id:soji256:20191130151623p:plain
runme - IDA pro

・・・

f:id:soji256:20191202113715p:plain
空気を読まない仕事の鬼、IDA さん

 

 
 

やったぜ。

  • フラグ: TUCTF{7h4nk5_f0r_c0mp371n6._H4v3_fun,_4nd_600d_luck}

更新履歴

  • 2019/12/02 新規作成。誤字を修正。