Break that Binary!

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

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

An ELF file program, a pair of an IPv4 address and a port number, an Username, and a Password were given. With these information, a server was available to be connected via SSH with Tera Term.

There are these files on the server. The file program on the server should be the same as the given file program.
Also, I cannot read the files flag.txt and keyfile directly, but they looked available from 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で暗号化した結果を出力するようである。

Decompiling program via Ghidra yielded following result.
This program generates a key and IV from the contents of keyfile and the time, encrypts the contents of flag.txt, and prints the ciphertext.

main.c

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

It was possible to rename the keyfile via mv command, so I changed keyfile to a file with known contents and had it print ciphertext with checking the time.

$ 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を出力させた。

Based on the displayed time, I used Convert Date & Time to Unix timestamp Calculator - High accuracy calculation to obtain a part of the value to be used for generating a key and IV.
Using this value, I used following program to generate all possible pairs of the key and IV.

keygen.c

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

Using the output of this program, I used following program to decrypt AES.

bruteforce.pl

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

I obtained the flag by searching for ractf via a text editor from the output of this program.

ractf{Curb_Y0ur_M3mOry_Alloc4t10n}

RACTF 2021