1433 - Pentesting MSSQL - Microsoft SQL Server
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 数据库: 用作临时存储区域,用于存放临时对象或中间结果集。
枚举
自动枚举
如果你对服务一无所知:
Metasploit(需要凭据)
手动枚举
登录
常见枚举
获取用户
Types of MSSQL Users获取权限
可保护资源: 定义为由 SQL Server 管理的资源,用于访问控制。这些资源分为以下类别:
服务器 – 例如数据库、登录、端点、可用性组和服务器角色。
数据库 – 例如数据库角色、应用程序角色、架构、证书、全文目录和用户。
架构 – 包括表、视图、存储过程、函数、同义词等。
权限: 与 SQL Server 可保护资源相关联的权限,如 ALTER、CONTROL 和 CREATE 可授予给主体。权限的管理发生在两个级别:
服务器级别 使用登录
数据库级别 使用用户
主体: 此术语指被授予权限访问可保护资源的实体。主体主要包括登录和数据库用户。通过授予或拒绝权限,或将登录和用户包含在具有访问权限的角色中,来实施对可保护资源的访问控制。
技巧
执行操作系统命令
请注意,要能够执行命令,不仅需要启用 xp_cmdshell,还需要对 xp_cmdshell 存储过程具有 EXECUTE 权限。您可以查看谁(除了 sysadmins)可以使用 xp_cmdshell:
窃取 NetNTLM 哈希 / 中继攻击
您应该启动一个 SMB 服务器 来捕获在身份验证中使用的哈希(例如 impacket-smbserver 或 responder)。
您可以通过以下方式检查除系统管理员之外谁具有运行这些 MSSQL 函数的权限:
使用诸如 responder 或 Inveigh 等工具,可以窃取 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 OPERATIONS 或 ADMINISTER 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**,允许执行用户承担另一个用户或登录的权限,直到上下文被重置或会话结束。
你可以使用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配置。
在验证权限后,您需要配置三件事,即以下内容:
在SQL Server实例上启用TCP/IP;
添加一个启动参数,在本例中,将添加一个跟踪标志,即-T7806。
启用远程管理员连接。
要自动化这些配置,此存储库提供了所需的脚本。 除了为每个配置步骤提供一个PowerShell脚本外,该存储库还提供了一个完整脚本,结合了配置脚本以及密码的提取和解密。
有关此攻击的更多信息,请参考以下链接: 解密MSSQL数据库链接服务器密码
本地权限提升
运行MSSQL服务器的用户将启用特权令牌SeImpersonatePrivilege。 您可能能够通过以下两个页面之一提升为管理员:
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotatoShodan
port:1433 !HTTP
参考资料
在SQL Server中使用注册表的工作 Try Hard Security Group

HackTricks自动命令
最后更新于