Files
2025-10-13 01:43:13 +08:00

46 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 为什么 MSSQL 存储过程可以执行命令
**1. `xp_cmdshell` 存储过程**
这是 MSSQL 中最著名,也是最危险的命令执行功能
**原理**
`xp_cmdshell` 是一个扩展存储过程(e**x**tended **p**rocedure)。它允许你在 SQL Server 内部执行操作系统的 **`cmd.exe`** 命令
当你执行 `EXEC xp_cmdshell 'dir c:\'` 时,SQL Server 会:
1. 启动一个 `cmd.exe` 进程
2. 将你的命令作为参数传递给 `cmd.exe`
3. 将命令的输出结果以行的形式返回到 SQL Server 的结果集中
**使用条件**
默认情况下,从 SQL Server 2005 开始,`xp_cmdshell` 处于**禁用状态**。要成功利用它,需要满足以下两个条件:
- **权限**:你必须拥有 **`sysadmin`** 服务器角色或**`CONTROL SERVER`**权限,这是因为 `xp_cmdshell` 默认只授予这些高权限用户
- **启用配置**`xp_cmdshell` 必须通过以下 SQL 命令手动启用:
```sql
sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
```
在渗透测试中,如果成功通过 SQL 注入或其他方式获得了高权限,你就可以执行这些命令来启用 `xp_cmdshell`,然后执行任意系统命令
**2. 其他相关的危险存储过程**
除了 `xp_cmdshell`,MSSQL 还有其他一些可以执行命令或辅助命令执行的存储过程,但它们不像 `xp_cmdshell` 那样直接
**`sp_addextendedproc`**
- **原理**:这个存储过程允许你将一个外部 DLL 文件注册为 SQL Server 的扩展存储过程
- **用途**:如果攻击者能上传一个恶意的 DLL 文件到服务器,就可以利用 `sp_addextendedproc` 将其注册为一个新的扩展存储过程,然后通过执行这个过程来执行恶意代码,从而绕过 `xp_cmdshell` 的禁用限制
**CLR 集成(SQL CLR**
- **原理**SQL Server 允许你使用 .NET 语言(如 C#)编写存储过程、函数、触发器等。这些代码可以调用 .NET 框架中的类库,包括那些可以执行系统命令的类,如 `System.Diagnostics.Process`
- **用途**:攻击者可以编写一个恶意的 C# 代码,将其编译成 DLL,然后加载到 SQL Server 中。这是一种更隐蔽、更强大的命令执行方法,因为它不依赖于 `xp_cmdshell`