TCPサーバの接続情報と、プログラム main.py
が与えられた。
main.py
の処理内容は、以下のものだった。
random.getrandbits(32)
により、正解の値を生成する。
random.getrandbits(32)
はメルセンヌ・ツイスタの genrand_int32()
の返り値を返すはずである。
さらに、メルセンヌ・ツイスタは、十分な数の出力を集めれば次の値を予測できることが知られている。
そこで、Zh3r0 CTF V2 の Twist and Shout で用いたコードを利用し、
Information for connecting to a TCP server and a program main.py
were given.
What main.py
does is:
random.getrandbits(32)
.
random.getrandbits(32)
should return what is returned from genrand_int32()
of Mersenne Twister.
Also, it is known that we can predict the next output of Mersenne Twister from enough number of output values.
Using a program I wrote for "Twist and Shout" in Zh3r0 CTF V2, I created this program to predict the next value via
このプログラムに指定のサーバとの通信をさせることで、flagが得られた。
I obtained the flag by having this program communicate with the specified server.