点击上方蓝字“Ots安全”一起玩耍
在红队行动中,横向移动或称为东西向移动是指深入网络的技术。这种攻击允许威胁参与者避免检测并保持持久访问。这项新发表的研究解释了如何利用 Windows 服务,它详细说明了如何模仿 Windows 服务显示名称来部署恶意信标甚至 Meterpreter 会话。
Windows API 分析
在我们开始深入解释我是如何实现这一点之前,让我们看一下当前的 windows CreateserviceA 函数。
SC_HANDLE CreateServiceA(
SC_HANDLE hSCManager,
LPCSTR lpServiceName,
LPCSTR lpDisplayName,
DWORD dwDesiredAccess,
DWORD dwServiceType,
DWORD dwStartType,
DWORD dwErrorControl,
LPCSTR lpBinaryPathName,
LPCSTR lpLoadOrderGroup,
LPDWORD lpdwTagId,
LPCSTR lpDependencies,
LPCSTR lpServiceStartName,
LPCSTR lpPassword);
我们可以注意到 lpserviceName 有足够的字符空间来放置有效负载,但 MSDN 提到服务名称比较始终不区分大小写 正斜杠 (/) 和反斜杠 () 不是有效的服务名称字符。而 API 参数 lpdisplayname 允许 256 个字符的字符串长度并且没有坏字符过滤。这意味着我们至少可以在参数值中插入一些 base64 格式的字符串。
手动重现
通过使用诸如进程黑客之类的工具,我们可以测试我们是否能够创建服务并使用 base64 值填充 lpdisplayname。
正如您在前面的屏幕截图中看到的,可以将 base64 值添加到 Displayname 中。
问题的核心
这是由于对服务显示名称字符串中提交的错误字符过滤不充分,并且创建服务没有实际的速率限制。
剥削类型
通过使用此攻击,您可以在加入的域内完成它,Windows Vista 和上述默认策略不允许具有管理权限的远程用户连接,直到您关闭此策略
创造技术
现在我的想法很明确,我开始开发一个有效的 PoC,它将利用这个弱点来部署恶意二进制文件并在最后执行它。
首先,我们需要构建一个自动化模块来与 OpenSCManager API 交互,并创建一个将 base64 值分段为 150 - 250 长度的服务。创建服务后,程序会部署一段代码启动服务,将服务显示名内容弹出到文件中,然后删除,避免重复。想了解更多,可以看下图。
通过使用简单的 Powershell 脚本,我们仅获取服务显示名称值并将其输出到文件中。
把碎片放在一起
我们的技术几乎准备好了,现在是时候利用我的开发技能构建一个完整的工具来加载二进制文件并将其编码为 base64 格式,然后将每行分成 150-250 个字符长度。之后,它将与 OpenSCmanager 通信以创建服务并将每一行注入 lpDisplayname。
同时,它将修改每个创建服务可执行路径的值,如下所示
C:windowssystem32cmd.exe /c powershell -command “get-service SERVICENAME | select-string -expand |out-file tmp_payload.txt
因此,假设您要交付 7 kb Meterpreter 有效载荷或钴撞击,那么程序将创建/删除大约 65 个服务,包括最终有效载荷。或者您可以通过仅使用修改服务( -m选项)切换到另一种攻击模式来缩短攻击路径和妥协方式
最后,该工具将创建一个名为“final_stage”的最终服务,代表将 tmp_payload.txt 的内容解码为有效的可执行文件并成功执行。
PoC 使用
该工具的使用很简单,它需要目标机器名称和有效的访问凭据。
Poc.exe -s -t Machine -u USERNAME -p PASSWORD -d DOMAIN -f PATHOFLOCALBINARY
最近,我通过修改服务名称而不是创建和删除多个服务来执行该工具的另一个更新,以测试替代攻击
chopper.exe -m -t machine -u username -p password -d domain -f pathoflocalbinary
工具:https://github.com/lawrenceamer/TChopper
本文翻译自其它网站,点击阅读原文可查看原文
原文始发于微信公众号(Ots安全):通过 Windows 服务显示名称走私 – 横向移动
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论