首页
社区
课程
招聘
[翻译]MS12-005 : 嵌入式对象任意代码执行
2012-1-15 17:02 9485

[翻译]MS12-005 : 嵌入式对象任意代码执行

2012-1-15 17:02
9485
原文:http://exploitshop.wordpress.com/2012/01/14/ms12-005-embedded-object-package-allow-arbitrary-code-execution/

MS12-005 : 嵌入式对象任意代码执行

MS12-005真的很好玩.
演示视频见这里 http://t.co/g4BKbgGF (需翻墙)

更新 2 : MS12-005 比我想象的更危险. 非常容易被利用,100%可靠的. 不需要用户交互. 样本如下 : http://www.cc.gatech.edu/~blee303/exploit/ms12-005/MS12-005.ppsx . 下载并双击ppsx文件(PPT演示文件)即可执行嵌入的python脚本。此样本文件中,自定义动画用于激活嵌入式文件(python脚本),使之运行。不需要权限检查。在此同时感谢yorick

更新 1 : 参见http://seclists.org/fulldisclosure/2012/Jan/164.
这家伙似乎是MS12 - 005的发现者,并建议使用office和.application。你在构造样本时,需要检查是否需要用户的交互(如启用宏)。

补丁前: packager.dll, 6.1.7600.16385 (win7_rtm.090713-1255)
补丁后: packager.dll, 6.1.7601.17727 (win7sp1_gdr.111118-2330)

这里我们来看看 MS12-005 的背景知识(参见 http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/packager_what_is_obj_pkg.mspx?mfr=true). Object packager可以包含任意文件到另一个文件中, 当然,任意文件包含了office文件.
您只需将任何文件拖放到Office文档,然后该文件的图标将显示在文档中.
通过双击这个图标,您就可以执行嵌入的文件(如果它是可执行的),当然packager.dl会在打开文件前弹出警告消息说“不做到这一点,它是危险的”,它要求用户确认。

MS12 - 005的问题在于:
1)如何识别的可执行文件,2)如何显示警告讯息给用户。

1。如何识别可执行文件的
补丁前, packager.dll 通过查表来识别此文件是否可执行(我们就叫这个表为execExtTable).

.text:02FA1D98 execExtTable dd offset a_exe ; DATA XREF: CPackage::_GetCurrentIcon(_IC *)+69o
.text:02FA1D98 ; CPackage::_GiveWarningMsg(HWND__ *)+5Eo
.text:02FA1D98 ; “.exe”
.text:02FA1D9C dd offset a_com ; “.com”
.text:02FA1DA0 dd offset a_bat ; “.bat”
.text:02FA1DA4 dd offset a_lnk ; “.lnk”
.text:02FA1DA8 dd offset a_cmd ; “.cmd”
.text:02FA1DAC dd offset a_pif ; “.pif”
.text:02FA1DB0 dd offset a_scr ; “.scr”
.text:02FA1DB4 dd offset a_js ; “.js”
.text:02FA1DB8 dd offset a_jse ; “.jse”
.text:02FA1DBC dd offset a_vbs ; “.vbs”
.text:02FA1DC0 dd offset a_vbe ; “.vbe”
.text:02FA1DC4 dd offset a_wsh ; “.wsh”
.text:02FA1DC8 dd offset a_sct ; “.sct”
.text:02FA1DCC dd offset a_vb ; “.vb”
.text:02FA1DD0 dd offset a_wsc ; “.wsc”
.text:02FA1DD4 dd offset a_wsf ; “.wsf”
.text:02FA1DD8 dd offset a_wmz ; “.wmz”

仅仅是循环查找此表,看嵌入文件是否有相同的后缀名。
这实际上是通过调用函数IsProgIDInList

.text:02FA72F4 push 11h ; int
.text:02FA72F6 push offset execExtTable ; dangerousTable
.text:02FA72FB push esi ; pExtName
.text:02FA72FC push 0 ; int
.text:02FA72FE call ?IsProgIDInList@@YGHPBG0PBQBGI@Z ; IsProgIDInList(ushort const *,ushort const *,ushort const * const *,uint)

什么?? 只有这些后缀名是可执行的? 有很多更可执行文件的扩展,正如你可能知道。
虽然这些文件的执行可能和系统相关 (啊。他让我想起了远古时代的WINDOWS的漏洞)
(译者:.txt  notepad.exe %1什么的),
.py 和 .pl 就已经够常见的了. 在这一点上,我相信一些其他人可能有更好的想法(.vsto 文件可以算一个??).

MS12-005 修补了这个问题,通过调用AssocIsDangerous()来检查可执行文件的扩展名。

.text:02FA6A11 push eax
.text:02FA6A12 call ds:__imp__AssocIsDangerous@4 ; AssocIsDangerous(x)
.text:02FA6A18 test eax, eax
.text:02FA6A1A jnz short loc_2FA6A42

试试使用 DarunGrim. 它明确表明此块已被更改

2)如何显示警告讯息
这部分交简单。补丁前,packager.dll只有当它是可执行文件才显示警告消息 。
见功能:CPackage___GiveWarningMsg(HWND HWND)。
此功能循环查找表execExtTable,如果它不是在execExtTable ,就不会显示警告消息!
(译者:简单修改后缀名就可绕过校验)

如何利用
我们在YouTube上演示了(http://www.youtube.com/watch?v=Odi6HiqzmL8&feature=youtu.be&hd=1) 。
为了简单,我们使用Python脚本嵌入到Office文档,并写了宏(双击)来执行这个内嵌的Python脚本 。打开Office文档后,你需要确认执行宏,它会立刻执行python脚本。

译者:
样本中运行的脚本为:
ping exploitshop.wordpress.com
nslookup exploitshop.wordpress.com
另参见:http://www.exploit-db.com/exploits/18372/

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞5
打赏
分享
最新回复 (3)
雪    币: 249
活跃值: (71)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
cxthl 2 2012-1-15 17:35
2
0
Mark一个!漏洞似乎在x64下无效,有权限检查好很多
雪    币: 123
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kmsmxpro 2012-1-30 09:24
3
0
占位学习!!
雪    币: 161
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hetzer 2012-1-30 09:30
4
0
正在学习,感谢LZ的翻译。
游客
登录 | 注册 方可回帖
返回