首页
社区
课程
招聘
[原创]how2heap调试学习(三)
发表于: 2020-12-6 12:30 9278

[原创]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

每个例子开头都标着测试环境


how2heap调试学习(一)

how2heap调试学习(二)


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)

image.png

free 掉 chunk3,因为它的大小不属于 fastbin 的范围,所以放到了 unsorted bin 中,所以他的 fd、bk 指针指向了 unsorted bin 的地址

image.png

再去 malloc 回来一个 0x60 大小的 chunk,会从之前的那个 unsorted bin 中划分出来(这块就叫 chunk3_1)

image.png

计算出 __malloc_hook 的地址,完全是根据偏移算出来的

image.png

free 掉 chunk4 和 chunk1

把 chunk1 的 fd 指针的末尾改为 0x00,这样它的 fd 指针就指向了 chunk3_1,同时把 chunk3_1 的 fd 从本来的 unsorted bin 的地址改为 __malloc_hook - 0x23

image.png

malloc 两次时候再去 malloc 的时候就会申请到修改的 fd 指针那里,也就是 __malloc_hook - 0x23

(这个 chunk 称为 malloc_hook_chunk)

image.png

再去 malloc 一个用 chunk5 来进行 unsorted bin attack(后面还申请一个 0x30 的防止与 top chunk 合并)

free 之后修改 chunk5 的 bk 指针为 __malloc_hook - 0x10

image.png

然后 malloc 执行 unsorted bin attack,把 malloc_hook 改为 unsorted bin 的地址

(这么做应该是因为没法泄漏 libc 基址,所以通过这种方法把高位的几个字节直接放好,只修改后面的就行了)

image.png

修改低几个字节,把 system 或者 one_gadget 的地址通过前面的 malloc_hook_chunk 写入 __malloc_hook

image.png

这样 __malloc_hook 就是 system 的地址了,然后去 malloc 的时候就能拿到 shell 了

image.png


下面这几个都发过了,就放个链接不占用资源了


ubuntu18.04 glibc 2.27


[原创]#30天写作挑战#Tcache Attack原理学习


ubuntu18.04 glibc 2.27


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//