TCPサーバの接続情報と、サーバのプログラム (C言語のソースコードとバイナリ) 、
そしてファイルDockerfile
とdatabase.txt
が与えられた。
与えられたソースコードを読むと、主に以下の処理をしていた。
fgets
関数で入力を読み込むadmin
の情報を作成するadmin
の情報をfree
関数で開放するuser
の情報を作成するadmin
のrole
がROLE_GOD
ならば、FLAG
を出力する
role
はname
の後に配置されると予想でき、十分な長さの入力が許されるので、
入力によってrole
の値を設定することが可能である。
また、admin
の情報を開放した後にuser
の情報を作成するが、
このとき確保する領域の大きさは同じなので、領域が再使用されると予想できる。
これらの仮定に基づき、以下のデータを
Information to connect to a TCP server, the program of the server (C source code and binary),
and files Dockerfile
and database.txt
were given.
Reading the source code given, I found the program is mainly doing following things:
fgets
admin
admin
via the function free
user
using the data readrole
of admin
is ROLE_GOD
, print the FLAG
role
looked being placed after name
and enough length of input is allowed,
so it is possible to set the value of role
by the input.
Also, the data for user
is created after deallocating data for admin
.
The size of buffer for them are the same, so the buffer may be reused.
Based on these assumptions, sending this data via "Send File" on