For the complete documentation index, see llms.txt. This page is also available as Markdown.

Password Spraying

Overview

  • Password spraying attempts to log into an exposed service using one common password and a longer list of usernames

  • Less likely to lock out accounts than brute force

  • Must always respect the domain password policy lockout threshold

  • If you don't know the password policy, wait a few hours between attempts or limit to one attempt as a "hail mary"

Enumerating the Password Policy

From Linux - Credentialed

nxc smb 172.16.5.5 -u avazquez -p Password123 --pass-pol

From Linux - SMB NULL Session

# rpcclient
rpcclient -U '%' -N 172.16.5.5
getdompwinfo

# enum4linux
enum4linux -P 172.16.5.5

# enum4linux-ng (better output, JSON/YAML export)
python3 enum4linux-ng.py 192.168.125.131 -u Tester -p 'Start123!' -oY out

From Linux - LDAP Anonymous Bind

From Windows

Building a Target User List

Public Website Names

Company websites often expose staff names on pages such as /Team. Convert those names to likely AD usernames and validate them with Kerberos user enumeration:

If one naming format is valid, generate the same pattern for all names. For example, first.last:

SMB NULL Session

LDAP Anonymous Bind

Kerbrute (No Domain Access Required)

  • Does not generate event ID 4625 (failed logon)

  • Generates event ID 4768 (TGT requested)

  • Use wordlists from https://github.com/insidetrust/statistically-likely-usernames

  • Output format: kerbrute returns username@domain.local - strip the domain part when building wordlists for other tools

  • KDC_ERR_ETYPE_NOSUPP: This error does NOT mean invalid creds - the credential may still be valid. Verify with netexec or rpcclient

With Valid Credentials

Performing the Attack

From Linux

rpcclient Bash One-Liner

Kerbrute

NetExec

Validate Credentials

From Windows

DomainPasswordSpray.ps1

  • Automatically generates user list from AD

  • Queries the domain password policy

  • Excludes accounts within one attempt of locking out

Local Admin Password Reuse

  • If you obtain the local admin NTLM hash, spray it across the subnet

  • Use --local-auth flag to avoid domain account lockout

Common Passwords to Try

  • Season+Year (Spring2022, Winter2021, Fall@21)

  • Welcome1, Password1, Password123

  • Company name + numbers/special chars

  • Month + Year patterns

Build Season+Year Lists from Site Dates

If the target website exposes a copyright or build year, generate seasonal passwords around that year. For example, a © 2023 footer led to Summer2023.

Simple rule for SeasonYYYY, plus a few common suffix variants:

Generate and spray carefully:

Mitigations

  • Multi-factor authentication

  • Restrict application access (principle of least privilege)

  • Separate admin accounts for administrative activities

  • Password filters to restrict common dictionary words

  • Monitor event ID 4625 (failed logon) and 4771 (Kerberos pre-authentication failed)

External Password Spraying Targets

  • Microsoft 365 / Outlook Web Exchange

  • VPN portals (Citrix, SonicWall, OpenVPN, Fortinet)

  • Citrix portals, RDS portals

  • VDI implementations (VMware Horizon)

  • Custom web applications using AD authentication

Last updated