-
-
[原创]how2heap调试学习(三)
-
发表于: 2020-12-6 12:30 9278
-
字数限制,分开发了
代码:https://github.com/yichen115/how2heap_zh
代码翻译自 how2heap:https://github.com/shellphish/how2heap
本文语雀文档地址:https://www.yuque.com/hxfqg9/bin/ape5up
每个例子开头都标着测试环境
ubuntu16.04 glibc 2.23
直接看之前的文章吧:[原创]PWN堆利用:House Of Orange
ubuntu16.04 glibc 2.23
编译 gcc -g 1.c -ldl
一开始 malloc 了 4 块 chunk(这里称为 chunk1\2\3\4)
free 掉 chunk3,因为它的大小不属于 fastbin 的范围,所以放到了 unsorted bin 中,所以他的 fd、bk 指针指向了 unsorted bin 的地址
再去 malloc 回来一个 0x60 大小的 chunk,会从之前的那个 unsorted bin 中划分出来(这块就叫 chunk3_1)
计算出 __malloc_hook 的地址,完全是根据偏移算出来的
free 掉 chunk4 和 chunk1
把 chunk1 的 fd 指针的末尾改为 0x00,这样它的 fd 指针就指向了 chunk3_1,同时把 chunk3_1 的 fd 从本来的 unsorted bin 的地址改为 __malloc_hook - 0x23
malloc 两次时候再去 malloc 的时候就会申请到修改的 fd 指针那里,也就是 __malloc_hook - 0x23
(这个 chunk 称为 malloc_hook_chunk)
再去 malloc 一个用 chunk5 来进行 unsorted bin attack(后面还申请一个 0x30 的防止与 top chunk 合并)
free 之后修改 chunk5 的 bk 指针为 __malloc_hook - 0x10
然后 malloc 执行 unsorted bin attack,把 malloc_hook 改为 unsorted bin 的地址
(这么做应该是因为没法泄漏 libc 基址,所以通过这种方法把高位的几个字节直接放好,只修改后面的就行了)
修改低几个字节,把 system 或者 one_gadget 的地址通过前面的 malloc_hook_chunk 写入 __malloc_hook
这样 __malloc_hook 就是 system 的地址了,然后去 malloc 的时候就能拿到 shell 了
下面这几个都发过了,就放个链接不占用资源了
ubuntu18.04 glibc 2.27
[原创]#30天写作挑战#Tcache Attack原理学习
ubuntu18.04 glibc 2.27
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- 对某款智能手表的分析与攻击 6430
- [原创][车联网安全]使用STM32开发板实战汽车UDS诊断 15012
- [分享]binwalk路径穿越导致RCE(CVE-2022-4510) 9980
- [原创]Hack-A-Sat 2020预选赛 beckley 13583
- [原创]一个BLE智能手环的分析 31542