微软的 IE5.0 以上的版本会支持一种向量标记语言(VML)来绘制图形。IE在解析畸形的VML 的时候会产生堆栈溢出的错误。如果利用者精心构造一个含有这样畸形的 VML 语句的网页,并骗取用户点击这样的网页,就可以利用 IE 在用户的机器上执行任意代码。
引起栈溢出的是 IE 的核心组件 vgx.dll。这个文件在 C:\Program Files\CommonFiles\Microsoft Shared\VGX 和 C:\WINDOWS\system32\dllcache 两个目录下。
windows 2000 sp4 + IE5.0
首先将ollydbg注册为及时调试器。
根据已有的漏洞信息,构造恶意HTML文件
双击html文件,由IE打开后,ollydbg被呼叫出来,说明IE已经崩溃
崩溃地址:0x659d7bc6
IDA中观察,位于函数
崩溃地址处的指令为(mov [eax],edi),eax对应的地址为EBP-4(var_4)
ollydbg中可以看到崩溃时,eax = 0x0C0C0C0C,并且返回地址也被覆盖为0x0C0C0C0C。
到这里,便完成了栈溢出漏洞的验证,下一步使用HeapSpray技术利用漏洞。
Heapspray技术的思想是在堆中填充大量的数据块,数据块由大量的"nop指令"和shellcode组成,利用其它漏洞将EIP指向预计被填充了特殊数据块的地址,只要EIP落到了任意数据块的"nop指令"序列中,便会成功执行shellcode。
在IE浏览器中,一般使用JavaScript向堆中填充数据块。
JavaScript代码片段如下:
为了适应JavaScript的字符串存储方式,代码中的shellcode由一般的(\xAA\xBB\xCC\xDD...)格式转换为(%uBBAA%uDDCC...)
用于转换shellcode的python代码如下:
def shellcode2js_string(shellcode):
""""""
new_shellcode = ""
code_list = shellcode.split("\\x")
for i in xrange(1,len(code_list),2):
new_shellcode += "%u" + code_list[i+1] + code_list[i]
return new_shellcode
将构造好的JavaScript代码片段嵌入到之前的html文件中
双击html文件用IE打开,成功弹出消息框(shellcode出自《0day安全》一书)
原文:http://www.cnblogs.com/Wrong-Side/p/4364150.html