IPv4アドレスとポート番号、そしてサーバのソースコードmain.go
が与えられた。
指定のアドレスとポート番号を
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
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
の出力をもとにサーバから出力された値の復号を全通りの鍵と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
の出力からractf
を検索することで、flagが得られた。
I obtained the flag by searching for ractf
from what bruteforce.pl
printed.