CVE-2021-33742 Internet Explorer MSHTML堆越界写漏洞复现

漏洞简介

CVE-2021-33742是存在于Internet Explorer的Trident渲染引擎(mshtml.dll)中的一个堆越界写漏洞。这个漏洞是由于通过JavaScript使用DOM innerHTML属性对内部html元素设置内容(包含文本字符串)时触发的。通过innerHTML属性修改标签之间的内容时,会造成IE生成的DOM树/DOM流的结构发生改变,IE会调用CSpliceTreeEngine类的相关函数对IE的DOM树/DOM流的结构进行调整。当调用CSpliceTreeEngine::RemoveSplice()去删除一些DOM树/DOM流结构时,恰好这些结构中包含文本字符串时,就有可能会造成堆越界写。

漏洞原理

造成堆越界写的根本原因是,用于标识文本字符串在DOM树/DOM流中的位置的CTreeDataPos类对象中有两个结构用于记录文本字符串的长度,一个是结构体DATAPOSTEXT的cch成员(25bit),一个是Tree::TextData对象中的cch成员(32bit)。由于它们的大小不同,当文本字符串的长度超过25bit能够表示的长度后,在向结构体DATAPOSTEXT的cch成员赋值时,会造成其存储的是截断后的长度。之后调用CSpliceTreeEngine::RemoveSplice()函数删除文本字符串在DOM树/DOM流的结构时,会使用CTreePos::GetCp()函数获得要删除的DOM树/DOM流结构所占用的字符数(包含截断的文本字符串长度),并用其申请一段内存。然后,调用Tree::TextData::GetText()函数获得Tree::TextData对象中的cch成员中存储的未截断文本字符串长度,并用其作为索引,对前面申请的内存进行赋值操作,从而造成了堆越界写漏洞。

环境

win10 2019

复现

将这个poc运行就会直接crashes

<!-- 原始PoC -->
<html>
    <head>
        <script>
            var b = document.createElement("html");
            b.innerHTML = Array(40370176).toString();
            b.innerHTML = "";
        </script>
    </head>
    <body>
    </body>
</html>

如果出现不让运行
在这里插入图片描述
在高级选项里面勾上重启IE就行
在这里插入图片描述

在这里插入图片描述

漏洞分析

主要是为了记录一下,还有那个CVE-2021-22204 GitLab RCE之exiftool代码执行漏洞深入分析,代码我看的不是很懂,反正归根结底就是某个函数没处理好
都是参考阿尔法实验室

这个都是让别人点才有用,而且IE已经被edge代替了

感觉自己发这个好水啊,记录记录一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值