[日本語] [English]

deadcode

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

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

  4011ef:	48 8d 3d d5 0e 00 00 	lea    0xed5(%rip),%rdi        # 4020cb <_IO_stdin_used+0xcb>
  4011f6:	b8 00 00 00 00       	mov    $0x0,%eax
  4011fb:	e8 50 fe ff ff       	callq  401050 <system@plt>

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

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

launch_shell.bin

DUCTF{y0u_br0ught_m3_b4ck_t0_l1f3_mn423kcv}

writeup by MikeCAT

DownUnderCTF 2021