outBackdoor

TCPサーバの接続情報と、ELFファイル outBackdoor が与えられた。

このファイルをTDM-GCCobjdumpで逆アセンブルすると、 main関数内でgets関数を用いて入力を読み込んでいるのが見えた。
また、以下のsystem("/bin/sh")を呼び出すコードがあった。

Information to connect to a TCP server and a ELF file outBackdoor were given.

Disassembling the file via objdump in TDM-GCC, I found that the function gets is used to read some input in the function main.
Also, I found this code that calls system("/bin/sh"):

4011e7: 48 8d 3d df 0e 00 00 lea 0xedf(%rip),%rdi # 4020cd <_IO_stdin_used+0xcd> 4011ee: b8 00 00 00 00 mov $0x0,%eax 4011f3: e8 58 fe ff ff callq 401050 <system@plt>

さらに、gets関数が読み込んだデータは-0x10(%rbp)から読み込まれ、リターンアドレスは%rbpの8バイト先なので、 リターンアドレスはgets関数のデータの読み込み先から0x18バイト先にあることが読み取れた。

これらを踏まえ、Tera Termでサーバに接続し、 以下のデータを「ファイル送信」することで、シェルを起動できた。
シェルで ls -al コマンドを実行するとファイル flag.txtがあることがわかり、 cat flag.txt コマンドを実行することでflagが得られた。

Moreover, I found that the return address is 0x18 bytes ahead from where the function gets saves data read because it saves from -0x10(%rbp) and the return address is 8 bytes ahead from %rbp.

Based on these, I succeeded to launch the shell by connecting to the server via Tera Term and sending this data via "Send file".
I found that a file flag.txt exists by executing a commnand ls -al in the shell, and obtained the flag via a command cat flag.txt.

launch_shell.bin

DUCTF{https://www.youtube.com/watch?v=XfR9iY5y94s}

DownUnderCTF 2021