1433 - Pentesting MSSQL - Microsoft SQL Server

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

Try Hard Security Group


基本信息

来自 维基百科

Microsoft SQL Server 是由 Microsoft 开发的关系数据库管理系统。作为数据库服务器,它是一个软件产品,其主要功能是根据其他软件应用程序的请求存储和检索数据,这些应用程序可以在同一台计算机上运行,也可以在网络上的另一台计算机上运行(包括互联网)。

默认端口: 1433

默认 MS-SQL 系统表

  • master 数据库: 这个数据库非常重要,因为它记录了 SQL Server 实例的所有系统级别细节。

  • msdb 数据库: SQL Server 代理程序利用这个数据库来管理警报和作业的调度。

  • model 数据库: 作为 SQL Server 实例上每个新数据库的蓝图,其中任何更改,如大小、排序规则、恢复模型等,都会在新创建的数据库中得到反映。

  • Resource 数据库: 一个只读数据库,存放着随 SQL Server 提供的系统对象。这些对象虽然物理上存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑上呈现。

  • tempdb 数据库: 用作临时存储区域,用于存放临时对象或中间结果集。

枚举

自动枚举

如果你对服务一无所知:

如果您没有凭据,可以尝试猜测它们。您可以使用nmap或metasploit。请注意,如果使用现有用户名多次登录失败,可能会锁定帐户

Metasploit(需要凭据)

手动枚举

登录

常见枚举

获取用户

Types of MSSQL Users

获取权限

  1. 可保护资源: 定义为由 SQL Server 管理的资源,用于访问控制。这些资源分为以下类别:

    • 服务器 – 例如数据库、登录、端点、可用性组和服务器角色。

    • 数据库 – 例如数据库角色、应用程序角色、架构、证书、全文目录和用户。

    • 架构 – 包括表、视图、存储过程、函数、同义词等。

  2. 权限: 与 SQL Server 可保护资源相关联的权限,如 ALTER、CONTROL 和 CREATE 可授予给主体。权限的管理发生在两个级别:

    • 服务器级别 使用登录

    • 数据库级别 使用用户

  3. 主体: 此术语指被授予权限访问可保护资源的实体。主体主要包括登录和数据库用户。通过授予或拒绝权限,或将登录和用户包含在具有访问权限的角色中,来实施对可保护资源的访问控制。

技巧

执行操作系统命令

窃取 NetNTLM 哈希 / 中继攻击

您应该启动一个 SMB 服务器 来捕获在身份验证中使用的哈希(例如 impacket-smbserverresponder)。

使用诸如 responderInveigh 等工具,可以窃取 NetNTLM 哈希。 您可以查看如何使用这些工具:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

滥用 MSSQL 受信任链接

阅读此文章 以获取有关如何滥用此功能的更多信息:

MSSQL AD Abuse

写入文件

要使用 MSSQL 写入文件,我们需要启用 Ole Automation Procedures,这需要管理员权限,然后执行一些存储过程来创建文件:

使用 OPENROWSET 读取文件

默认情况下,MSSQL 允许对操作系统中帐户具有读取访问权限的任何文件进行读取。我们可以使用以下 SQL 查询:

然而,BULK 选项需要具有 ADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONS 权限。

基于错误的 SQLi 向量:

RCE/读取文件执行脚本(Python和R)

MSSQL可以允许您执行Python和/或R脚本。这些代码将由一个不同的用户执行,而不是使用xp_cmdshell执行命令的用户。

尝试执行一个**'R'** "Hellow World!" 不起作用的示例:

使用配置的Python执行多个操作的示例:

读取注册表

Microsoft SQL Server提供了多个扩展存储过程,允许您与网络、文件系统甚至Windows注册表进行交互:

常规

实例感知

sys.xp_regread

sys.xp_instance_regread

sys.xp_regenumvalues

sys.xp_instance_regenumvalues

sys.xp_regenumkeys

sys.xp_instance_regenumkeys

sys.xp_regwrite

sys.xp_instance_regwrite

sys.xp_regdeletevalue

sys.xp_instance_regdeletevalue

sys.xp_regdeletekey

sys.xp_instance_regdeletekey

sys.xp_regaddmultistring

sys.xp_instance_regaddmultistring

sys.xp_regremovemultistring

sys.xp_instance_regremovemultistring

```sql

# Example read registry

EXECUTE master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory';

# Example write and then read registry

EXECUTE master.sys.xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG_SZ', 'Now you see me!';

EXECUTE master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue';

# Example to check who can use these functions

Use master;

EXEC sp_helprotect 'xp_regread';

EXEC sp_helprotect 'xp_regwrite';

```

### 使用MSSQL用户定义函数SQLHttp进行RCE

可以在MSSQL中使用自定义函数加载.NET dll。然而,这需要dbo访问权限,因此您需要一个作为sa或管理员角色连接到数据库。

查看此链接以查看示例。

其他RCE方法

还有其他方法可以实现命令执行,例如添加扩展存储过程CLR程序集SQL Server代理作业外部脚本

MSSQL权限提升

从db_owner到sysadmin

如果将普通用户赋予**db_owner角色访问由管理员用户**(如**sa)拥有的数据库,并且该数据库配置为trustworthy,那么该用户可以滥用这些权限进行权限提升**,因为在其中创建的存储过程可以作为所有者(管理员)执行。

你可以使用一个metasploit模块:

或者一个 PS 脚本:

模拟其他用户

SQL Server有一个特殊权限,名为**IMPERSONATE**,允许执行用户承担另一个用户或登录的权限,直到上下文被重置或会话结束。

如果您可以冒充一个用户,即使他不是sysadmin,您应该检查该用户是否可以访问其他数据库或链接服务器。

请注意,一旦您成为sysadmin,您可以冒充任何其他用户:

你可以使用metasploit模块执行这种攻击:

或者使用 PS 脚本:

使用MSSQL进行持久化

https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/

从SQL Server Linked Servers中提取密码

攻击者可以从SQL实例中提取SQL Server Linked Servers密码,并以明文形式获取这些密码,从而授予攻击者可以用来在目标上获得更大立足点的密码。 用于提取和解密存储在Linked Servers中的密码的脚本可以在此处找到。

为使此漏洞利用生效,必须进行一些要求和配置。 首先,您必须在计算机上拥有管理员权限,或者能够管理SQL Server配置。

在验证权限后,您需要配置三件事,即以下内容:

  1. 在SQL Server实例上启用TCP/IP;

  2. 添加一个启动参数,在本例中,将添加一个跟踪标志,即-T7806。

  3. 启用远程管理员连接。

要自动化这些配置,此存储库提供了所需的脚本。 除了为每个配置步骤提供一个PowerShell脚本外,该存储库还提供了一个完整脚本,结合了配置脚本以及密码的提取和解密。

有关此攻击的更多信息,请参考以下链接: 解密MSSQL数据库链接服务器密码

解决SQL Server专用管理员连接问题

本地权限提升

运行MSSQL服务器的用户将启用特权令牌SeImpersonatePrivilege。 您可能能够通过以下两个页面之一提升为管理员

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotato

Shodan

  • port:1433 !HTTP

参考资料


HackTricks自动命令

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

其他支持HackTricks的方式:

最后更新于