BOF

TCPサーバの接続情報が与えられた。
また、ELFファイル chall と、C言語のソースコード bof.c が与えられた。

bof.c を読むと、gets 関数を用いて入力を読み込む部分と、flagの内容を出力する部分があった。
TDM-GCCのobjdumpでchallを逆アセンブルすると、入力は -0x40(%rbp) に読み込まれ、リターンアドレスは %rbp の8バイト先にあることがわかった。
すなわち、入力の最初から 0x48 バイト先がリターンアドレスである。

Tera Termでサーバに接続し、 リターンアドレスをflagの内容を出力する部分のアドレスに書き換える以下のデータを「ファイル送信」することで、flagが得られた。

Information to connect to a TCP server was given.
Also, an ELF file chall and a C source code bof.c were given.

Reading bof.c, I found a part to read input using the function gets, and a part that prints the contents in flag.
Disassembling chall using "objdump" from TDM-GCC, I found that the input is stored to -0x40(%rbp) and that the return address is 8 bytes ahead from %rbp.
This means that the return address is 0x48 bytes ahead from the beginning of the input.

I connected to the server using Tera Term and sent this data to rewrite the return address to the address of the part that prints the contents in flag via "Send file" to obtain the flag.

payload.bin

FLAG{D0_y0U_kN0w_BuFf3r_0Ver_fL0w?_ThA2k_y0U_fOR_s01v1ng!!}

WaniCTF 2021