首页
社区
课程
招聘
[原创]XP SP3, IE8, JavaScript 堆喷射经验值的修正及修正思路
发表于: 2017-8-23 12:23 8431

[原创]XP SP3, IE8, JavaScript 堆喷射经验值的修正及修正思路

2017-8-23 12:23
8431

15PB参加培训刚毕业,

之前上课过程中发现一直广泛使用的一个经验值有问题

现在正好有时间,整理一下发出来


环境:WindowsXP SP3IE8

利用漏洞: 暴雷漏洞 CVE-2012-1889 ( 同学的分析报告在这里 [2])

整体思路:确保每一段填入的数据连续、有效

结论: XP SP3, IE8 下经验值应该改为 block = shellcode.substring(2, 0x40000 - 0x809)

结果:修正前512M内存下失败概率接近1/2,调整后为1/5 1/10; 1G内存下失败率很低,未统计。

代码见附件。


下面开始上主菜:修正过程及修正思路

每当提到IE堆喷射的时候总会提到一套前辈们的经验值,具体出处,还没有找到。

这里[3]

(图1:前辈们的经验值)

还有这里[4]:

(图2:前辈们的经验值)

等等。

当然,我们课上提到的也是同一套经验值。

1. 但是在 WindowsXP SP3IE8 环境下经常会有很大的概率遇到如下错误


(图3:报错信息)

2.  用 windbg 查看报错原因:


(图4:windbg观察错误区域信息)   

     发现 0X0C0C0C0C 处并不是我们理想中的 shellcode ,而是填充的“00

3. 接着网下看,会发现 0X0C0C0C0C 之后是一段不可访问的内存,从 0x0C0C1000 开始

(图5:windbg观察错误区域信息)

4. 那我们的 shellcode 去哪儿了呢,于是接着往下看发现 0x0C0C0C0C + 0x10000又有数据了


(图6:windbg观察堆的结构)

5. 看看这段连续数据有多长,于是在0x0C0C0C0C -  0x90000 位置又是一段,而且每隔 0x90000 就会有一段 00

(图6:windbg观察堆的结构)

6.  接着往下看会发现,同样每隔0x90000 就会出现一段 00 填充的内存


7. 可以看出堆中一个单位块的结构:后两段正好0x10000

数据(大小 0x80000)

00(大小 0x1000)

???(0x10000-0x1000)

    一个单位块的大小正好是 0x90000

    猜测 1:代码中cBlock Unicode)长度正好是 0x40000 大小正好是0x80000,两者之间会不会有关系

    验证猜测:把代码中的cBlock 大小改成 0x50000,于是内存分布变成这样:

   


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 49
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发给我,支持
2017-8-23 17:08
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2017-9-1 09:00
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
5
不错
2017-9-10 16:25
0
雪    币: 274
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark
2017-9-13 10:31
0
游客
登录 | 注册 方可回帖
返回
//