atum大佬视频的总结
第三章 课时2 堆漏洞的利用技巧
0X01 基础知识
1、操作系统中的内存布局(Linux)
- 内核空间&用户空间,堆、栈等;cat /proc/pid/maps
- 要了解ELF文件结构
2、什么是堆?
- 数据结构:父节点总大于/小于子节点的特殊的完全二叉树
- 操作系统:程序在运行时动态申请和释放的内存空间(malloc,realloc,free,new,del等)
3、不同操作系统对堆内存有不同的管理策略,对某些软件(如浏览器)会自己实现堆内存管理
- 多数Linux发行版(with glibc):ptmalloc/dlmalloc
- Android/firefox:jemalloc
- Windows:微软自己实现了一套内存管理机制
- Linux内核:slab,slub,slob分配器
4、了解内存管理的策略是玩转堆漏洞的关键
5、CTF题中堆管理机制:大多数是ptmalloc/dlmalloc,少数题中自己实现
6、ptmalloc/dlmalloc是glibc的默认内存管理机制,了解它对PWN堆题来说至关重要!
7、强烈推荐:glibc内存管理ptmalloc源代码分析.pdf (阿里巴巴的一位工程师写的) 建议先通读,再用作工具书
8、作业:精读“glibc内存管理ptmalloc源代码分析.pdf ”的1-27页,粗度28-130页(end)。arena,bin,chunk。Know it and pwn it!
0X02 堆溢出的利用思想与防护策略
1、堆漏洞的利用思想:
- 破坏堆内存管理的相关数据结构:如arena、bin、chunk
- 破坏堆内存中的用户数据:覆盖变量指针、函数指针、数据等
- 一般情况下都是为了构造任意内存读写以及控制流劫持
2、堆漏洞的防护方法:
- 保护堆内存管理相关的数据结构:Heap Canary、对数据结构进行加密、在堆管理代码中加入大量安全检查
- 通用防护:ASLR、DEP
- 以上保护机制在Win10中基本以及全部开启,但是在CTF环境中ÿ