上周三,我利用休息时间翻了翻\System32 目录,看能否找点儿什么。结果发现,有几个dll 文件导出了相同的函数OpenURL:
想着旗开得胜,能否简单调用一下呢?果然,url.dll 可以允许使用下面的命令执行HTML 应用(.hta):
在几个功能测试之后,我(贸然地)把这个发现发到Twitter 上。很快便收到回复,这些回复很有指导性,也让我无地自容。一方面,我本应该执行更多的测试进而深入理解发生了什么,而不是想着发到Twitter 上。另一方面,一些来自该领域的最优秀的人似乎几分钟就把这个问题给分好类了。非常感谢@subTee, @r0wdy_和@Hexacorn的快速分析。
简而言之,HTA文件是被MSHTA 调用的。这条Twitter (https://twitter.com/Hexacorn/status/974063407321223168)描述得很清晰:
“OpenURL/OpenURLA/FileProtocolHandler 调用了ShellExecute 函数,并传入了一个参数NULL(译者注:指的是lpOperation参数)。该函数会到注册表中查找默认的处理方式,由于参数为NULL,它会依次尝试使用“默认值、open、第一个可用的行为”。
” - @Hexacorn
如上所述,\SYSTEM32 目录下有三个dll 都导出了OpenURL 函数:
@Hexacorn写了一篇文章描述如何调用ieframe.dll, shdocvw.dll和url.dll。
通过.url 文件,可以在调用对应dll 时执行穿透命令:
URL样例文件(calc.url)内容:
调用样例
执行结果:
Shdocvw.dll 和ieframe.dll 具有一些同名函数,其中包括IWebBrowser2 接口,如下图所示:(译者注:使用DLL Export Viewer 打开对应dll 时,开启“Scan COM type libraries、Show methods、Show properties”即可查看到。)
这就很有意思了,因为我还在其他地方看到了IWebBrowser2 接口和其他接口的类似实现——主要是DCOM 应用(译者注:DCOM是指Distributed COM,DCOM无法通过防火墙)。
下面这些DCOM 应用(也许还有更多)似乎都提供了IWebBrowser2 接口(或类似接口):
让我们深入分析一下……
注意:在深入之前,我强烈建议大家阅读@enigma0x3的博客(https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)了解必要的背景知识,有关DCOM横向渗透技术、启动权限和防范措施等。
概述——在我的测试用例中,该应用无法实现横向渗透。然而,所使用的背景知识对于后续阅读是很有帮助的。在上述的这篇文章(www.hexacorn.com/blog/2018/03/15/running-programs-via-proxy-jumping-on-a-edr-bypass-trampoline-part-5/)中,@Hexacorn描述了ieframe.dll 中的一个先前的漏洞(CVE-2016-3353)。通过一个特殊标记,.url 文件可以在不弹出安全警告的情况下,直接由ShellExecuteEx执行。(注:分析该漏洞的链接也在那篇文章中)。幸运的是,该漏洞已被修复。正如IE的常规应用一样,我们当然预期在下载或打开一些文件(例如,.url、.hta、.exe 等文件)时产生安全警告(常说的,“安全性检查”)。
当使用 iexplore.exe 实例执行测试用例时,IE safeguards 会阻止“通过DCOM 接口”执行远程命令。
@enigma0x3 的文章介绍了 ShellBrowserWindow 对外提供的 ShellExecute 方法,使用该方法执行远程命令,实现横向渗透。而我们则可以在绕过IE 浏览器安全限制的情况下,通过 IWebBrowser2 接口中的 Navigate 和 Navigate2 方法执行远程命令。
在后续样例中,我们将使用下面的这些 PowerShell 脚本的变体:
在继续分析之前,请注意以下内容:
接下来看看这种横向渗透的能力:
URL 文件:
在网域成员机器上执行:
在网域控制器上:
在Procmon 程序中,打开stack 面板,可以看到一些熟悉的模块和函数。(译者注:通过Procmon 查看calc.exe 进程创建的事件,选择与文件c:\windows\system32\calc.exe 有关的事件,可以查看到类似的窗口)
与ShellBrowserWindow相似,ShellWindows也对外提供了ShellExecute方法。下面快速展示一下如何使用Navigate/2方法执行远程命令。
本例中,使用如下PowerShell 脚本:
执行完这些命令后,得到如下输出:
哇!太有意思了!目前,该方法还需要更多测试,不推荐直接使用。尽管如此,这个方法还是十分优雅的。
本文简要说明了使用“IWebBrowser2” 的 Navigate/2 DCOM 接口进行横向渗透的方法。这些方法也许不像其他横向渗透方法那么灵活,但是仍然可以被RedTeam (译者注:在军事术语中,Red Team指的是高技能、有组织的团队,使用任何可能的方法发动攻击)或攻击者使用。和往常一样,防守者们需要留意这些攻击方法。
这有一些小建议:
针对穿透指令执行:
针对横向渗透:
感谢大家花时间阅读本文。欢迎留言。
原文链接:
https://bohops.com/2018/03/17/abusing-exported-functions-and-exposed-dcom-interfaces-for-pass-thru-command-execution-and-lateral-movement/
编译:看雪翻译小组yezhang
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!