前几天,我们发了一篇 Ubuntu 16.04 配置 pwn 环境的文章,遭到了部分朋友的反感,他们认为我们不应该写这么基础的东西,甚至有几个朋友怒而取关了 其实那篇文章就是为了这个视频来做铺垫的,免得一些兄弟原理懂了,实践不了 所以,如果这个视频有帮助到各位,帮我们转发转发,告知一下取关的几位朋友,都是误会嗷
【B站在线观看】
https://www.bilibili.com/video/BV1uF41177YY?share_source=copy_web
【视频、图示以及文档下载地址】
https://pan.baidu.com/s/1Ps2uKajjLP6s6rqzepZEXw 提取码: 1udc
下面是视频中的 markdown 文档,方便大家学习和复制
unlink 漏洞
堆基础知识
- Linux堆内存管理深入分析上 https://introspelliam.github.io/2017/09/10/pwn/Linux堆内存管理深入分析上/
- Linux堆内存管理深入分析下 https://introspelliam.github.io/2017/09/15/pwn/Linux堆内存管理深入分析下/
unlink 知识
- wooyun-drops_Linux堆溢出漏洞利用之unlink https://wooyun.js.org/drops/Linux堆溢出漏洞利用之unlink.html
- wooyun-drops_堆溢出的unlink利用方法 https://wooyun.js.org/drops/堆溢出的unlink利用方法.html
- ctf-wiki_unlink https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/implementation/basic/?h=unlink#unlink
- [Unlink] 2014-HITCON-stkof | LiuLian http://liul14n.top/2020/02/03/Unlink-2014-HITCON-stkof/
内存分布图
系统内存分布图
malloc & mmap
free
chunk 的结构
- allocated chunk;
img
- free chunk;
img
bins
- fastbins 0x10-0x80
- bins
- unsorted bins
- small bins
- large bins
img
感受 bins
magicheap https://github.com/bash-c/pwn_repo/tree/master/HITCON/hitconTraining_magicheap
- fastbins 范围
- small bins
- large bins
- free_unlink
- unsortedbins
- fd
- bk
- top_chunk
unlink
代码语言:javascript复制/*unlink操作的实质就是:将P所指向的chunk从双向链表中移除,这里BK与FD用作临时变量*/
#define unlink(P, BK, FD) {
B = P->fd;
A = P->bk;
B->bk = A;
A->fd = B;
...
}
img
unlink 问题分析
glibc 无法识别 chunk 结构
代码语言:javascript复制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 = *P
B = P->fd;
A = P->bk;
B->bk = A;
*P = *P - 0x10
A->fd = B;
*P = *P - 0x18
unlink 漏洞结果
我们可以向某一个内存地址写入一些内容
解决一些问题
- 伪造fd, bk
- *P 0x6020c8
- system() 的地址 通过show函数来获取
例题
hitconTraining_unlink——bamboobox https://github.com/bash-c/pwn_repo/tree/master/HITCON/hitconTraining_unlink