以下是对您提供的关于unlink漏洞堆基础知识的markdown文档进行伪原创处理后的版本。请注意,图片的位置和原始格式保持不变,语言和大意也未改变。
【B站在线观看】
https://www.php.cn/link/8141c60e393b72d67396df39cdda9c1e
【视频、图示以及文档下载地址】
https://www.php.cn/link/b9b3736658339a45ba4369383702a4fe 提取码: 1udc
以下是视频中的Markdown文档,供大家学习和复制使用:
深入了解unlink漏洞与Linux堆内存管理
有关Linux堆内存管理的深入分析,请参考以下链接:
- 上篇:https://www.php.cn/link/3e6bf902e857e7ce80846480c79ded99
- 下篇:https://www.php.cn/link/0d3132155b700d53e2684d499a3c30f3
关于unlink的详细知识,请查看以下资源:
- wooyun-drops_Linux堆溢出漏洞利用之unlink:https://www.php.cn/link/4a176d0569e599f0513ff3356f0c0f6a
- wooyun-drops_堆溢出的unlink利用方法:https://www.php.cn/link/da2bc1ee176b88e66b5b75b78cc2bde5
- ctf-wiki_unlink:https://www.php.cn/link/6bea0302f5aaab6a0700a70eaf85605e
- [Unlink] 2014-HITCON-stkof | LiuLian:https://www.php.cn/link/b0bad21adb7b77a1503abfc43a27f934
内存分布图
系统内存分布图
malloc与mmap
free chunk的结构
已分配的chunk:

未分配的chunk:

bins的分类:
- fastbins:范围0x10-0x80
- unsorted bins
- small bins
- large bins

bins的详细分类:
- fastbins的范围
- small bins
- large bins
- free_unlink
- unsortedbins
- fdbktop_chunk
unlink操作的本质是将P所指向的chunk从双向链表中移除,这里BK与FD用作临时变量:
/* unlink操作的实质就是:将P所指向的chunk从双向链表中移除,这里BK与FD用作临时变量 */
#define unlink(P, BK, FD) { \
B = P->fd; \
A = P->bk; \
B->bk = A; \
A->fd = B; \
...}
unlink问题分析:glibc无法识别chunk结构
B->bk != P || A->fd != P P -> fd = *P - 0x18 P -> bk = *P - 0x10 B -> bk = *P - 0x18 + 0x18 = *P A -> fd = *P - 0x10 + 0x10 = *PB = P->fd; A = P->bk; B->bk = A; P = P - 0x10 A->fd = B; P = P - 0x18
unlink漏洞的结果:我们可以向某个内存地址写入一些内容
解决一些问题:
- 伪造fd, bk
- *P 0x6020c8
- system()的地址
- 通过show函数来获取例题










