git://www.github.com/shellphish/how2heap.git
git clone http://www.github.com/shellphish/how2heap
$ svn co --depth empty http://www.github.com/shellphish/how2heap
Checked out revision 1.
$ cd repo
$ svn up trunk
这里 repo 用于学习各种堆开发技术。 我们在 hack 会议中提出了这个想法,并实现了以下技术:
文件技术适用的解决first_fit.c | Demonstrating行为第一匹配的演示。 | |
fastbin_dup.c | 哄骗malloc通过滥用fastbin空闲项来返回已经分配的堆指针。 | |
fastbin_dup_into_stack.c | 哄骗malloc通过滥用fastbin空闲值来返回几乎任意的指针。 | 9447 -search-engine, 0ctf 2017-babyheap |
fastbin_dup_consolidate.c | 将一个已经分配的指针放在fastbin空闲列表和未排序的bin空闲列表中,诱骗malloc返回已经分配的堆指针。 | Hitcon 2016 SleepyHolder |
unsafe_unlink.c | 在损坏的块上释放自由以获取任意写入。 | ,Robots,Robots,Robots,Robots 。 |
house_of_spirit.c | 释放伪fastbin块以使malloc返回几乎任意的指针。 | hack.lu 协调器 2014-OREO |
poison_null_byte.c | 利用单个空字节溢出。 | PlaidCTF 2015-plaiddb |
house_of_lore.c | 哄骗malloc通过滥用smallbin空闲值来返回几乎任意的指针。 | |
overlapping_chunks.c | 在未排序的bin中覆盖已经释放的块大小,以使新分配与现有块重叠。 | hack.lu CTF 2015-bookstore, Nuit,hack 2016 -night-deamonic-heap |
overlapping_chunks_2.c | 为使新分配与现有块重叠,利用正在使用的块大小的覆盖 | |
house_of_force.c | 为了让malloc返回几乎任意的指针,利用顶块( 荒原) header | 波士顿主要 Party 2016-cookbook,BCTF 2016-bcloud 。 |
unsorted_bin_attack.c | 在未排序的bin空闲列表上覆盖释放的块,将大值写入任意地址 | 0ctf 2016-zerostorage |
house_of_einherjar.c | 利用一个空字节 overflow 欺骗malloc返回一个受控指针 | Seccon 2016-tinypad |
house_of_orange.c | 利用顶部块( 荒原) 来获得任意代码执行 | Hitcon 2016 houseoforange |
有个好例子在这里加? ! 尝试在一个单一的--中使用整个技术,这样学习起来更容易。
堆开发工具有一些堆开发工具在周围浮动。
jemalloc开发框架:https://github.com/CENSUS/shadow
检查gdb中的glibc堆: https://github.com/cloudburst/libheap
给定的malloc_playground.c
文件是一个程序的源,提示用户交互地分配和释放内存。
一些很好的堆开发资源,大致按它的发布顺序,是:
在glibc中嵌入了几个"hardening"度量,比如 export MALLOC_CHECK_=1
( 启用一些检查) 。export MALLOC_PERTURB_=1
( 数据被覆盖) 。export MALLOC_MMAP_THRESHOLD_=1
( 始终使用 mmap ( ) ) 。
更多信息:mcheck(), mallopt() 。
此外,还有一些跟踪支持作为 mtrace() 插件。malloc_stats() 插件。malloc_info() 。 memusage插件以及该系列的其他功能。