首页
社区
课程
招聘
[原创]PWN堆利用:House Of Orange
发表于: 2020-11-18 18:58 7675

[原创]PWN堆利用:House Of Orange

2020-11-18 18:58
7675

下面这段代码翻译自 how2heap

主要解决没有 free 功能的时候获得 unsorted bin,攻击方面涉及到了 IO_FILE 但是我还没学到,就只是把用到的讲一下吧Orz


一开始申请了一个 chunk,此时 top chunk 的 size 是 0x20c00

image.png

假设有个溢出的漏洞,可以把 top chunk 的 size 给修改掉,改成一个小的数

image.png

再去 malloc 一个比较大的大小的时候,原本的 top chunk 不够分给它的,所以就会被放到 unsorted bin 中,可以看到 fd、bk 被改成了 unsorted bin 的地址

image.png

然后 unsorted bin 的地址跟 _IO_list_all 的地址偏移是 0x9a8,可以得到 _IO_list_all 的地址

image.png

修改掉 unsortedbin 的 bk 指针,等到 malloc 的时候利用 unsortedbin attack 把 _IO_list_all 改为 unsorted bin 的地址,然后把 old top chunk 写上 '/bin/sh' 并且去修改掉 old top chunk 的 size 为 0x61,为啥改为这个大小后面会说

unsorted bin attack 的原理可以看之前的文章


下面的操作涉及到 IO_FILE 相关的内容了,要想成功执行,_IO_list_all 结构需要满足一些条件:

1、fp->_mode 要等于 0

2、fp->_IO_write_base 要小于 fp->_IO_write_ptr

再伪造一个叫 vtable 的结构,vtable[3] 是待会要执行的函数,即 system 函数(这里是 winnner)

因为 unsorted bin 被改掉了当 malloc 的时候会出错,会依次调用 malloc_printerr、 __libc_message、abort()、_IO_flush_all_lockp(),在调用 _IO_flush_all_lockp() 的时候需要在 vtable 的 vtable[3] 中找 _IO_OVERFLOW,而 _IO_OVERFLOW 我们已经覆盖掉为 winner 的地址了,而早在之前我们就把前面写上了 '/bin/sh' 这样就可以达到执行 system('/bin/sh') 了


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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