一款在整个域中进行 Shadow Credentials 喷洒攻击的工具,旨在利用域中其他对象上早已被遗忘的 GenericWrite/GenericAll DACL。
在很多攻防演练中,我观察到(通过 BloodHound)“Everyone”/“Authenticated Users”/“Domain Users”或其他包含域中几乎所有用户的广泛组,拥有对其他域对象的 GenericWrite/GenericAll DACL。

这些权限可以被滥用来在目标对象上添加 Shadow Credentials,并获取其 TGT 和 NT Hash。
我突然想到,我们可以尝试在整个域中喷洒 Shadow Credentials,看看哪些能成功(显然这种方法更适合非隐蔽性攻防演练,不要在需要隐蔽性的红队行动中使用)。当成功添加 Shadow Credentials 后,我们只需执行完整的 PKINIT + UnPACTheHash 流程,就能得到 NT Hash。
由于这个过程非常快,可以在攻防演练的一开始就使用,希望在你真正开始之前就能拥有一些用户和计算机的权限。
注意:我复用了我之前的工具中的大量代码,因此杀毒软件/EDR 可能会将其标记为 KrbRelayUp……
大致流程如下:
ShadowSpray 支持 CTRL+C,因此如果你希望在任意时刻停止执行,只需按下 CTRL+C,ShadowSpray 将在退出前显示到目前为止恢复的 NT Hash(如下面的演示所示)。
__ __ __ __ __ __
/__` |__| /\ | \ / \ | | /__` |__) |__) /\ \ /
.__/ | | /~~\ |__/ \__/ |/\| .__/ | | \ /~~\ |
Usage: ShadowSpray.exe [-d FQDN] [-dc FQDN] [-u USERNAME] [-p PASSWORD] [-r] [-re] [-cp CERT_PASSWORD] [-ssl]
-r (--RestoreShadowCred) 攻击完成后恢复“msDS-KeyCredentialLink”属性。(可选)
-re (--Recursive) 递归执行 ShadowSpray 攻击。(可选)
-cp (--CertificatePassword) 证书密码。(默认 = 随机密码)
通用选项:
-u (--Username) 用于初始 LDAP 身份验证的用户名。(可选)
-p (--Password) 用于初始 LDAP 身份验证的密码。(可选)
-d (--Domain) 域的 FQDN。(可选)
-dc (--DomainController) 域控制器的 FQDN。(可选)
-ssl 使用 LDAP over SSL。(可选)
-y (--AutoY) 不要求确认直接开始 ShadowSpray 攻击。(可选)
摘自 Elad Shamir 关于 Shadow Credentials 的博客文章:
如果环境中不常使用 PKINIT 身份验证,或目标帐户不常使用,则“请求 Kerberos 身份验证票证 (TGT)”事件 (4768) 在证书信息属性不为空时可能暗示异常行为。
如果为目标帐户配置了 SACL 以审核 Active Directory 对象修改,则“目录服务对象已修改”事件 (5136) 在修改 msDS-KeyCredentialLink 的主体不是 Azure AD Connect 同步帐户或 ADFS 服务帐户(通常充当密钥预配服务器并合法地为用户修改此属性)时可能暗示异常行为。
更具体的预防性控制措施是添加一个访问控制项 (ACE),以拒绝主体 EVERYONE 修改任何不打算注册密钥信任无密码身份验证的帐户(尤其是特权帐户)的 msDS-KeyCredentialLink 属性。
检测 UnPACing 和影子凭据 作者:Henri Hambartsumyan,来自 FalconForce
ShadowSpray 特定的检测: