[日本語] [English]

Break that Binary!

ELFファイルprogram、IPv4アドレスとポート番号、そしてUsernameとPasswordが与えられた。 これらの情報を利用し、Tera TermでSSH接続ができた。

サーバには以下のファイルが配置されていた。 ここのファイルprogramは、与えられたファイルprogramと同じであると予想できる。
また、ファイルflag.txtおよびkeyfileは、直接読むことはできないが、programからは参照できるようである。

$ ls -l
total 260
-rwx------ 1 root 0     34 2021-08-13 16:53 flag.txt
-rwx------ 1 root 0     16 2021-08-13 16:55 keyfile
-rwsr-xr-x 1 root 0 255840 2021-08-13 16:55 program

programGhidraで逆コンパイルすると、以下のようになった。
keyfileのデータと時刻から鍵とIVを生成し、flag.txtの内容をAESで暗号化した結果を出力するようである。

main.c

mvコマンドによるkeyfileの名前変更は可能だったので、 以下のようにしてkeyfileを既知の内容のものに差し替え、時刻を確認しながら暗号文を出力させた。

$ mv keyfile k
$ echo -n mikenekomofumofu > keyfile
$ date; ./program; date
Sun Aug 15 13:23:52 UTC 2021
ab4dbda80de2533a25744db7334a306b28288baac1005c39388773986ee9c417c7eed369f69e6a58bb73aa3a05b1b1be
Sun Aug 15 13:23:52 UTC 2021

表示された時刻をもとに、日付⇒UNIX時間変換 - 高精度計算サイトで鍵とIVの生成に使う値の一部を求めた。
これを利用し、以下のプログラムであり得る全ての鍵とIVを出力させた。

keygen.c

このプログラムの出力を利用し、以下のプログラムでAESの復号を行った。

bruteforce.pl

このプログラムの出力からテキストエディタでractfを検索することで、flagが得られた。

ractf{Curb_Y0ur_M3mOry_Alloc4t10n}

writeup by MikeCAT

RACTF 2021