Authentication Vulnerabilities: The Complete Practical Guide

Password-Based Attacks: Brute Force, Spraying, and Stuffing

How brute force, password spraying, credential stuffing, and default credentials work, when to use each, and why spraying beats brute force on real targets.

Published

Once you know which accounts exist, you go after the passwords. There are four distinct plays here, and picking the right one for the defenses in front of you is the whole skill. Spray when there is lockout, stuff when you have breach data, brute-force when there is neither, and always try default credentials first. This page covers each and when it wins. Practice on a free live target.

The four plays

  • Vertical brute force: one username, many passwords. Simple, but trips per-account lockout almost immediately.
  • Password spraying: one common password, many usernames. Stays under per-account lockout because each account sees only one attempt.
  • Credential stuffing: replay real username and password pairs from other breaches, betting on reuse.
  • Default credentials: the vendor or setup password nobody changed.

Each targets a different weakness: brute force attacks a weak password, spraying attacks a common password across a weak population, stuffing attacks reuse, and defaults attack neglect.

Try default credentials first

Before anything clever, try the credentials that ship with software or get set during install and never changed:

admin:admin        admin:password     admin:admin123     admin:changeme
root:root          root:toor          administrator:administrator
guest:guest        test:test          user:user          demo:demo
admin:<blank>      tomcat:tomcat      postgres:postgres  sa:<blank>

Admin panels, databases, appliances, and dev tools are the usual offenders. It costs a handful of requests and sometimes ends the engagement immediately.

Password spraying: the real-world winner

On any target with a lockout policy, spraying is the attack that keeps working. You take a single plausible password and try it against every username you enumerated, so no single account accumulates enough failures to lock. Then you wait out the window and spray the next password. Effective spray passwords follow human patterns:

Welcome1   Password1   Password123   <Company>2024!   Summer2024!
Spring2025!   Changeme123   Qwerty123!   P@ssw0rd   <Season><Year>!

Tailor them to the target: the company name with a year and a bang, the current season, the local sports team. You only need one user in the whole directory who picked the password you are spraying, and in a large enough population there usually is one.

Credential stuffing: betting on reuse

If you have a breach corpus of real email:password pairs, replay them. People reuse passwords across sites, so a pair that worked somewhere else often works here. Stuffing does not look like guessing, because every password is a real one, just borrowed from another site. It is high-yield when you have the data and is defended by breach-password checks and anomaly detection rather than lockout.

Build a targeted wordlist

A smart small list beats a giant generic one, because every wasted attempt brings you closer to a lockout or a detection threshold. Pull from:

  • Vendor and software defaults for the stack you fingerprinted.
  • Seasonal and keyboard patterns (Summer2024!, Qwerty123!).
  • The company name, product names, and local references from OSINT.
  • Any password-policy hints the app leaks (minimum length, required symbol), to prune guesses that cannot be valid.

Watch for the success tell

A successful login looks different from a failed one, and that difference is your signal: a 302 redirect to a dashboard, a Set-Cookie session header, a different response length, or simply the absence of the error string. When you automate, key your success condition on that tell rather than on the absence of an error, which can be fooled by rate-limit pages.

Note that landing a valid password is not always the end. If the account has MFA, you have the first factor only and need MFA and OTP bypass to finish.

Fixing it

  • Check passwords against known-breach corpora at signup and reset so reused and common passwords are rejected outright.
  • Rate-limit and monitor for spray and stuffing patterns (many accounts with one password, or many attempts from one source).
  • Prefer exponential backoff over hard per-account lockouts, which attackers weaponize into denial of service.
  • Require MFA, so a correct password alone is not enough.

Full defensive detail is in securing authentication. Next, see how the throttles that are supposed to stop all this get bypassed in flawed brute-force protection, or try a spray on a free lab.

← Back to Authentication Vulnerabilities: The Complete Practical Guide