网络安全CTF-PWN

初识堆喷射及事例(暴雷漏洞)分析

2018-11-26  本文已影响33人  看雪学院


一.堆喷简介

打开Poc利用文件,发现使用了HeapSpray(堆喷技术),堆喷射实现的主要因素为以下两点:

堆喷射将shellcode放置在了堆中,在堆中执行代码。

1. 使用浏览器程序打开我们的poc样本时,它会执行我们样本文件中的JavaScript代码。

2. 控制程序eip,使其指向0x0C0C0C0C地址。

下面我们来了解一下堆喷射的实现流程:

我们首先创建一个大小为1mb的堆块,并使用0x0C0C0C0C填充。

为什么使用0x0C0C0C0C填充呢?有两点因素:

(1)0x0C0C0C0C会被程序解释成 OR AL,0C 可以作为滑板指令(即执行此种指令不会对程序的后续行为产生影响),有人说为什么不使用0x90(也是滑板指令)呢?请看下一条。

(2)之前说过,我们的shellcode会被放到堆中去执行,也就是所谓的使eip指向0x0C0C0C0C这个地址,而0x0C0C0C0C这个地址从0计算的话,大概在192mb左右,但0x90909090就不言而喻了,需要申请的堆空间那就相当大了。又有人会说为甚麽一定要让我们的eip指向0x0C0C0C0C呢?继续往下看。

计算好shellcode的字节数,将shellcode的代码贴到我们申请的1mb堆块的尾部,控制总大小刚好为1MB:

创建一个成员数为200的数组,数组的每个成员都是这样的堆块(为什么是200MB呢?因为可以保证0x0C0C0C0C这个地址指向我们所构造的这个数组中):

为什么有很大概率指向我们的滑块指令0x0C0C0C0C ( 此处作为滑块指令)?而不是ShellCode代码呢?

一般我们的ShellCode的大小在500字节左右(也许会更小),而一个块的大小为1MB,相当于我们的Shellcode只占了整个块1/2000。当eip指向我们的滑板指令0x0C时,会一点点地往后执行到我们的ShellCode,此时我们的漏洞就算利用成功了。我们从事例中讲解堆喷的实现。

二.事例分析

1. 暴雷漏洞环境

虚拟机环境:WinXpSP3

漏洞软件:ie6.0

调试工具:OD、IDA

样本文件缀至文末

2. Poc样本中堆喷块的详细构造流程

3. 漏洞分析

3.1 配置环境

虚拟机环境就不多说了,ie的环境大家可以下载一个 IECollection ,里面有IE各版本的集合。

3.2 触发漏洞

(1)修改Poc样本,不构造堆块,直接触发漏洞溢出(换言之就是将poc样本中的前 三个步骤删掉直接触发漏洞),同时修改OD的异常选项,使其不忽略任何异常。

(2) OD附加,拖入样本,中断至下图所示:

(3)追栈,查找溢出点:

(4)77f5f87b下软断,0x13df98下硬断(凡是被覆盖的点都可以,最好选择中间位置下断),查找何时溢出。

(5)查看此时的edi(0x13DEFA被我们覆盖的栈),esi(0x1885D8A好像是个堆地址)

(6)IDA查看相关代码:

(7)我们继续往上追esi的来源,即ebp - 0x94(ida中的pszUrl)(0x13A090),硬断写入0x13A090,当该地址内被填充为一个明显堆地址时断下,此时,堆地址已被填充为0x1000字节的图片原路径:

(8)至此,我们便可以下结论了,由于程序员的疏忽,并未对图片源路径的长度做限制,在对图片源路径拷贝时,造成了栈溢出,覆盖了栈中的重要指针,从而使eip指向0x0C0C0C0C。

3.3利用流程如下

① 栈被覆盖后,从栈中取出指针(0x0C0C0C0C)赋值给eax。

② 由于堆喷射原理,所以0x0C0C0C0C地址内的数据大概率还是0x0C0C0C0C(滑块),此时ecx = 0x0C0C0C0C。

③ 同理,ecx + 0x18该地址内大概率也是0x0C0C0C0C(滑块),从而滑向我们的ShellCode。

4.漏洞利用(具体利用流程参照Poc样本)

(1) 先将自己的shellcode由ascii格式转换成unicode格式,具体转换方式如图:

(2) 制作滑板数据

每个滑板块均为1mb;

申请1024*1024 - 32 - 4 -2 字节的空间。

具体填充方式如图:

注意:填充内容为0x0C,而不是图中的0x90。

(3) 制造200个这样的数据,形成堆喷区.

(4) 触发漏洞,使eip指向0x0C0C0C0C:

(5) 利用成功,哈哈哈 ,窗口全部拆解(个人ShellCode功能为拆解桌面所有窗口):

原文作者:噗咚Four

原文链接:https://bbs.pediy.com/thread-247937.htm

转载请注明:转自看雪学院

更多阅读:

1、[原创]BugkuCTF-WEB-矛盾

2、[原创]2018东华杯momo_server详解

3、体验加壳过程

4、[翻译]虚拟化是如何工作的(第二部分)

上一篇 下一篇

猜你喜欢

热点阅读