欢迎访问本站!

首页科技正文

国内怎么买usdt(www.payusdt.vip):Internet Explorer破绽剖析(四)——CVE-2016-0199

admin2021-04-0192安全技术漏洞分析

USDT自动充值

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

0x01 破绽信息

0x01.1 破绽简述

  • 编号:CVE-2016-0199
  • 类型:类型混淆(Type Confusion)
  • 破绽影响:远程代码执行(RCE)/拒绝服务攻击 (DoS)
  • CVSS 2.0:9.3

mshtml.dll组件在将CElement—>CAttributeCollection—>CAttrArray—>Attribute.nodeValue复制到CAttribute—>Variant时,并未对其举行校验,以致类型混淆,进而可造成随便代码执行。

0x01.2 破绽影响

Microsoft Internet Explorer 9 through 11

0x01.3 修复方案

MS16-063

0x02 破绽剖析

0x02.1 剖析环境

  • OS版本:Windows 7 Service Pack 1 x86
  • Internet Explorer版本:9.0.8112.16421
  • mshtml.dll版本:9.0.8112.16684
  • jscrip9.dll版本:9.0.8112.16684

0x02.2 详细剖析

剖析用POC来自exploit-db:

<!DOCTYPE html>
<meta http-equiv="X-UA-Compatible" content="IE=7">
<script>
  oElement = document.createElement("IMG");
  var oAttr = document.createAttribute("loop");
  oAttr.nodeValue = oElement;
  oElement.loop = 0x41424344; // Set original value data to 44 43 42 41
  oElement.setAttributeNode(oAttr); // Replace oElement with original value data
  oElement.removeAttributeNode(oAttr);
  CollectGarbage(); // Use original value data as address 0x41424344 of a vftable
</script>

document.createElement("IMG");语句对应实现为mshtml!CDocument::createElement,其执行流如下:

首先分配堆块用于存储CImgElement工具:

之后由CElement::CElement完成初始化操作:

完成CImgElement工具确立:

var oAttr = document.createAttribute("loop");语句对应实现为mshtml!CDocument::createAttribute,其执行流如下:

分配堆块用于存储CAttribute工具,之后由CAttribute::CAttribute完成初始化操作:

CAttribute工具偏移0x24处存储属性名:

oAttr.nodeValue = oElement;语句对应实现为mshtml!CAttribute::put_nodeValue,其挪用CAttribute::PutNodeValueVariantHelper完乐成效。首先是复制VARIANT类型工具(存储nodeValue值)至偏移0x28处:

之后判断该CAttribute工具是否为Tracked Object,若是不是则将其设为Root Object,并加入CRootTracker中(感兴趣的读者可自行剖析CTrackerHelper::SetAsRootCRootTracker::AddRoot函数,此部门与GC机制有关,不在此睁开):

,

usdt支付接口

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

CAttribute工具偏移0x5C处用于判断其是否为Root Object:

oElement.loop = 0x41424344;语句设定CElement工具属性,其属性使用数组存储,对应实现为CAttrArray::Set。该函数首先判断CElement工具偏移0x10处是否置值,若无则分配内存并将返回值写入该处:

CImplAry::InsertIndirect函数中对CAttributeCollection(CElement offset 0x10)偏移0x04处值与0x00处值举行对照以检查是否需要调整Attribute Array存储空间:

由于是首次设定CElement工具属性,并未开拓Attribute Array空间,故挪用HeapAlloc举行分配,详细可剖析CImplAry::EnsureSizeWorker函数,完成后内存如下:

共4个元素(0x10>>2),每个元素占用内存空间为0x10。完成属性赋值,并将Attribute Array当前元素数目加1:

CElement工具部门结构寄义如下:

+0x10       CAttributeCollection
            +0x00   The total size of the Attribute Array<<2
            +0x04   Number of Attributes
            +0x08   CAttrArray
            +0x0c
+0x14       Variant(Save the Current Element)

oElement.setAttributeNode(oAttr);语句对应实现为mshtml!CElement::setAttributeNode,其挪用CElement::VersionedSetAttributeNode完乐成效。首先是执行MSHTML!CAttribute::PrivateQueryInterface+0x920函数,该函数会对esp+30h+var_14处内存置值,此值会决议后续执行CAttrArray::Set函数orCAttrArray::SetAt函数:

之后执行CAttribute::SetElement函数,对CAttribute工具偏移0x3c处及偏移0x08处举行置值,详细流程可自行跟进剖析:

CAttrArray::Set函数执行完成:

CAttribute工具部门结构寄义如下:

+0x24   Attribute Name(Pointer to BSTR)、
+0x28   Variant(Save the nodeValue)
+0x3c   CElement
+0x5C   IsRootObject

oElement.removeAttributeNode(oAttr);语句对应实现为mshtml!CElement::VersionedRemoveAttributeNode。破绽发生在将CElement—>CAttributeCollection—>CAttrArray—>Attribute.nodeValue复制到CAttribute—>Variant(0x28)时,并未对其举行校验,以致类型混淆。正常情形下:

<!DOCTYPE html>
<meta http-equiv="X-UA-Compatible" content="IE=7">
<script>
  oElement1 = document.createElement("IMG");
  var oAttr1 = document.createAttribute("loop1");
  oAttr1.nodeValue = 0x41424344;
  oElement1.setAttributeNode(oAttr1);
  oElement1.removeAttributeNode(oAttr1);
  CollectGarbage(); 
</script>

其执行流如下:

而在POC情形下,其执行流:

云云一来,CAttribute::EnumerateTrackedObjects转达参数给jscript9!ScriptEngine::EnumerateTrackingClient,其在mov ecx, [eax]时便会发生接见错误:

0x03 参阅链接

  • 对CVE-2016-0199的简朴剖析
  • CVE-2016-0199 破绽剖析

网友评论