-
-
[翻译]MS12-005 : 嵌入式对象任意代码执行
-
发表于:
2012-1-15 17:02
10398
-
[翻译]MS12-005 : 嵌入式对象任意代码执行
原文:2ceK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3g2^5M7r3I4G2K9i4c8K6K9r3!0H3i4K6u0W2N6$3!0J5k6s2m8J5k6i4y4K6i4K6u0W2j5$3!0E0i4K6u0r3x3U0l9I4x3W2)9J5c8U0l9I4i4K6u0r3x3e0c8Q4x3V1k6E0M7K6p5J5i4K6u0V1x3o6l9#2i4K6u0V1k6h3#2T1k6h3c8V1k6h3c8Q4x3X3c8G2j5X3A6W2j5%4c8Q4x3X3c8H3j5h3y4C8j5h3N6W2i4K6u0V1j5h3I4D9L8%4N6Q4x3X3c8S2M7X3u0A6N6s2u0S2M7Y4W2Q4x3X3c8U0L8$3c8W2i4K6u0V1k6i4S2W2j5%4g2@1K9h3!0F1i4K6u0r3
MS12-005 : 嵌入式对象任意代码执行
MS12-005真的很好玩.
演示视频见这里 737K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8Q4x3X3g2U0L8#2)9J5c8X3M7@1b7V1E0T1k6@1N6r3 (需翻墙)
更新 2 : MS12-005 比我想象的更危险. 非常容易被利用,100%可靠的. 不需要用户交互. 样本如下 : c98K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4U0i4K6u0W2k6$3q4@1k6h3y4Z5i4K6u0W2k6h3c8#2i4K6u0r3i4K6N6q4j5X3I4W2k6e0x3H3x3#2)9J5c8X3g2^5M7r3I4G2K9i4c8Q4x3V1k6E0M7K6p5J5i4K6u0V1x3o6l9#2i4K6u0r3e0g2x3I4x3W2)9J5k6o6l9H3y4g2)9J5k6i4m8H3M7%4R3`. . 下载并双击ppsx文件(PPT演示文件)即可执行嵌入的python脚本。此样本文件中,自定义动画用于激活嵌入式文件(python脚本),使之运行。不需要权限检查。在此同时感谢yorick
更新 1 : 参见e0aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5$3I4A6M7%4c8K6i4K6u0W2L8%4u0Y4i4K6u0r3k6Y4g2D9L8r3c8A6M7$3y4D9L8%4y4#2M7X3g2Q4x3V1j5J5x3o6p5J5i4K6u0r3d9X3q4F1i4K6u0r3x3e0j5@1i4K6u0W2
这家伙似乎是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 的背景知识(参见 a32K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8Y4u0W2M7$3!0#2M7X3y4W2M7#2)9J5c8X3c8G2j5%4g2E0k6h3&6@1j5i4c8A6L8$3&6Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3P5s2m8Q4x3V1k6S2L8r3I4Q4x3V1k6H3M7X3!0V1k6r3!0U0M7#2)9J5c8X3g2F1i4K6u0V1N6i4y4Q4x3V1k6H3j5h3y4C8j5h3N6W2M7W2)9#2k6Y4N6Z5j5i4c8Q4y4h3k6A6M7#2)9#2k6X3!0T1K9W2)9#2k6Y4m8C8k6#2)9J5k6h3#2K6M7s2S2Q4x3@1k6E0k6Y4u0Q4x3@1c8@1M7Y4g2W2i4K6t1&6i4K6u0W2 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上演示了(384K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4W2G2N6i4c8#2j5X3g2Q4x3X3g2U0L8$3#2Q4x3V1k6%4j5i4c8U0K9q4)9K6c8Y4k6Q4x3@1c8a6k6r3V1$3d9r3W2I4P5X3#2x3z5q4)9J5y4X3k6W2j5i4c8#2M7X3g2Q4x3@1c8&6L8%4g2@1N6g2)9J5k6h3u0W2i4K6t1$3K9r3c8Q4x3@1b7I4i4@1g2r3i4@1u0o6i4K6R3&6 。
为了简单,我们使用Python脚本嵌入到Office文档,并写了宏(双击)来执行这个内嵌的Python脚本 。打开Office文档后,你需要确认执行宏,它会立刻执行python脚本。
译者:
样本中运行的脚本为:
ping exploitshop.wordpress.com
nslookup exploitshop.wordpress.com
另参见:f01K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3g2^5M7r3I4G2K9i4c8Q4x3X3c8V1j5W2)9J5k6h3y4G2L8g2)9J5c8X3g2^5M7r3I4G2K9i4c8K6i4K6u0r3x3e0R3K6y4K6u0Q4x3V1j5`.
[培训]科锐逆向工程师培训第53期2025年7月8日开班!