其他分享
首页 > 其他分享> > pwn - Heap Exploitation

pwn - Heap Exploitation

作者:互联网

今天整理了一下Heap部分的一些笔记,小汇总一下

在程序运行过程中,堆可以提供动态分配的内存,允许程序申请大小未知的内存。堆是程序虚拟空间地址的一块连续的线性区域,由地址向地址上增长

堆题漏洞一般在delete()函数上,多半是指针未清空导致成为野指针,从而可以进行UAF

实现堆利用的方法

ps:与系统交互的函数主要是(s)brk函数以及mmap,munmap函数,不是malloc或者free

malloc

malloc(size_t n)

free

free(void* p)

(s)brk

操作系统提供了brk函数,glibc库提供了sbrk函数,我们可以通过增加brk的大小来向操作系统申请内存

chunk

由malloc申请的内存为chunk,这块内存在ptmalloc内部用malloc_chunk结构体表示,当程序申请的chunk被free掉后,会加入到相应的空闲管理列表

字段 释意
prev_sizeimage-20220507005803636 如果该chunk物理相邻的前一个地址chunk(两个指针的地址差值为前一个chunk大小)是空闲的话,那该字段记录的是前一个chunk的大小,否则记录前一个chunk(低地址chunk)的数据
P->PREV_INUSE(P):上一个chunk是否使用中
M->MMAPED(M):chunk是否通过mmap生成
NON_MAIN_AREA(N):该chunk是否不属于main area
size chunk的大小必须是2*SIZE_SZ的整数倍;32位SIZE_SZ大小为4,64位SIZE_SZ大小为8
fd chunk处于分配状态,fd开始是用户数据;若chunk空闲,则fd指向下一个(非物理相邻)的空闲chunk.,bk指向上一个(非物理相邻)的空闲chunk;通过fd,bk将空闲的chunk块加入到空闲的chunk块链表进行统一管理

bin

用户释放掉的chunk不会马上返回给系统,会由ptmalloc管理heap和mmap映射区域中空闲的chunk,ptmalloc管理器会挑一块适合的给用户,这样可以避免频繁的系统调用,降低内存分配的开销

根据chunk的大小和使用状态将chunk初步划分为4类:fast bins,small bins,large bins,unsorted bins

除了fast bin是单链表,其余(small bin,large bin,unsorted bin)都是双链表

堆溢出

程序向堆块中写入的字节数超过了堆块本身可使用的字节数(可利用的字节数都不小于用户申请的字节数),因而导致了数据溢出,并覆盖到物理相邻的高地址的下一个堆块

Fast Bin

Unsorted Bin

Small Bin

Large Bin

Unsorted Bin

标签:bin,链表,chunk,free,Exploitation,大小,内存,Heap,pwn
来源: https://www.cnblogs.com/M1sceden4/p/16240903.html