TCPサーバの接続情報が与えられた。
また、ELFファイル got
と、C言語のソースコード got.c
が与えられた。
got.c
を読むと、system("/bin/sh");
を実行する関数 win
のアドレスを出力した後、
書き込むアドレスとデータを指定して書き込める関数 vuln
を無限ループで呼び出していることがわかった。
この関数 vuln
は、関数 read
を用いる関数 get_val
を用いていた。
got
を逆アセンブルした結果の以下の部分から、関数 read
のメモリ上のアドレスは 0x601048
に格納されることがわかった。
Information to connect to a TCP server was given.
Also, an ELF file got
and a C source code got.c
were given.
Reading got.c
, I found it first prints the address of a function win
that executes system("/bin/sh");
,
and then infinitely calls a function vuln
that can write data with specifying the address and data to write.
The function vuln
uses a function get_val
that uses the function read
.
From this part of the disassembling of got
by "objdump" in read
on the memory is stored to 0x601048
.
書き込むアドレスにこの 601048
を、値に出力された関数 win
のアドレス 400807
を指定すると、シェルを起動できた。
ls -al
コマンドを実行するとファイル flag.txt
があることがわかり、cat flag.txt
コマンドを実行するとflagが得られた。
I succeeded to launch the shell by specifying this 601048
as the address wo write, and 400807
, which is the printed address of the function win
, as the value to write.
Executing a command ls -al
revealed that there is a file flag.txt
, and I obtained the flag by executing a command cat flag.txt
.