-
-
[原创]PWN堆利用:House Of Orange
-
发表于: 2020-11-18 18:58 7675
-
下面这段代码翻译自 how2heap
主要解决没有 free 功能的时候获得 unsorted bin,攻击方面涉及到了 IO_FILE 但是我还没学到,就只是把用到的讲一下吧Orz
一开始申请了一个 chunk,此时 top chunk 的 size 是 0x20c00
假设有个溢出的漏洞,可以把 top chunk 的 size 给修改掉,改成一个小的数
再去 malloc 一个比较大的大小的时候,原本的 top chunk 不够分给它的,所以就会被放到 unsorted bin 中,可以看到 fd、bk 被改成了 unsorted bin 的地址
然后 unsorted bin 的地址跟 _IO_list_all 的地址偏移是 0x9a8,可以得到 _IO_list_all 的地址
修改掉 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期)
赞赏
- 对某款智能手表的分析与攻击 6545
- [原创][车联网安全]使用STM32开发板实战汽车UDS诊断 15017
- [分享]binwalk路径穿越导致RCE(CVE-2022-4510) 9984
- [原创]Hack-A-Sat 2020预选赛 beckley 13586
- [原创]一个BLE智能手环的分析 31560