Military Grade

IPv4アドレスとポート番号、そしてサーバのソースコードmain.goが与えられた。
指定のアドレスとポート番号をFirefoxのアドレスバーに入れてアクセスすると、 十六進数の列が表示された。

main.goを読むと、時刻に基づく値と適当な数をビットANDした値で疑似乱数生成器を初期化し、 それを用いて鍵とIVを生成し、flagをAESで暗号化したものを出力していることが読み取れた。
そこで、このmain.goのコードを利用し、 あり得る全ての鍵とIVの組み合わせを出力するプログラムgen_keys.goを作成した。

A pair of an IPv4 address and a port number, and a source code of the server main.go were given.
Accessing to the site by putting the address and the port number to the address bar of Firefox, it showed a sequence of hexdecimal characters.

Reading main.go, I realized that it is firstly initialzing the psuedo-random number generator with bitwise-AND of some value based on the time and some fixed value, then generating a key and IV with the PRNG, and finally printing the flag encrypted using AES with the key and IV.
Seeing this, I created a program gen_keys.go that prints all possible pairs of key and IV based on the progran main.go.

gen_keys.go

そして、このgen_keys.goの出力をもとにサーバから出力された値の復号を全通りの鍵とIVで行い、 結果を出力するプログラムbruteforce.plを作成した。

Then, I created a program bruteforce.pl that decrypts what is printed from the server with all possible keys and IVs based on the output of gen_keys.go and prints their results.

bruteforce.pl

bruteforce.plの出力からractfを検索することで、flagが得られた。

I obtained the flag by searching for ractf from what bruteforce.pl printed.

ractf{int3rEst1ng_M4sk_paTt3rn}

RACTF 2021