Default and Weak Credentials
What Is Broken and Why
Web applications, CMS platforms, and network devices ship with documented default credentials
that administrators frequently fail to change. Weak password policies that permit short, common,
or non-complex passwords compound the risk by allowing brute-force and credential-stuffing attacks
to succeed rapidly. When combined with exposed admin paths discovered through fingerprinting,
the attack chain from reconnaissance to authenticated access can be trivially short.
Key Signals
- Admin path accessible:
/wp-admin/, /administrator/, /admin/, /manager/, /console/
- Framework identified via cookie names, headers, or meta tags (WordPress, Joomla, Drupal, etc.)
- Login form accepts
admin/admin, admin/password, admin/<blank>, root/root
- Password policy accepts "Password1" or "123456" on registration/change
- No account lockout after repeated failed attempts
- No rate limiting or CAPTCHA on login endpoint
- Error messages distinguish between invalid username and invalid password (username enumeration)
- HTTP Basic Auth realm on admin endpoints
Methodology
- Fingerprint the platform: Identify CMS/framework via headers, cookies, HTML markers,
and path probing (see
web-fingerprinting skill).
- Locate login endpoint: Check
/robots.txt Disallow entries; dirbust with framework-specific
wordlist; follow redirects from root path.
- Check for lockout and rate limiting: Submit 5-10 intentionally wrong credentials; observe
whether account locks or responses slow.
- Username enumeration: Test error message differentiation between unknown user and wrong
password.
- Default credential test: Try documented defaults for identified platform.
- Weak password spray: Test a short list of common passwords against discovered usernames
(low-and-slow to avoid lockout).
- Password policy audit: Attempt to register or change password to weak values; document
what is and is not accepted.
Payloads & Tools
# Hydra HTTP POST form brute-force
hydra -l admin -P /usr/share/wordlists/rockyou.txt TARGET http-post-form \
"/login:username=^USER^&password=^PASS^:Invalid credentials"
# Hydra HTTP Basic Auth
hydra -L users.txt -P passwords.txt TARGET http-get /admin/
# Burp Suite Intruder — set username/password fields as payload positions
# Payload list: admin, administrator, root, user, test, guest
# Password list: admin, password, 123456, Password1, <blank>
# Common default credential pairs to test manually
# admin:admin
# admin:password
# admin:1234
# admin:(blank)
# root:root
# administrator:administrator
# test:test
# guest:guest
# WordPress-specific
curl -X POST https://TARGET/wp-login.php \
-d "log=admin&pwd=admin&wp-submit=Log+In&redirect_to=%2Fwp-admin%2F&testcookie=1" \
-b "wordpress_test_cookie=WP+Cookie+check" -L -I | grep -E "HTTP|Location"
# Check for username enumeration via error message difference
curl -s -X POST https://TARGET/login \
-d "user=nonexistentuser12345&pass=wrongpass" | grep -i "invalid\|not found\|wrong"
curl -s -X POST https://TARGET/login \
-d "user=admin&pass=wrongpass" | grep -i "invalid\|not found\|wrong"
# Password policy probe
curl -X POST https://TARGET/register \
-d "username=testpolicyuser&password=123456&confirm=123456"
Bypass Techniques
- Some login forms implement lockout client-side only; bypass by sending requests directly via
curl or Burp, skipping JavaScript lockout enforcement.
- IP-based rate limiting can be bypassed with
X-Forwarded-For header rotation.
- CMS-specific default credentials may differ by version; cross-reference with identified version.
- "Remember me" tokens for admin accounts may persist after password changes in some platforms.
Exploitation Scenarios
Scenario 1 — CMS Default Admin Credentials
Setup: WhatWeb identifies WordPress; /wp-admin/ returns login form.
Trigger: Try admin/admin; application grants access.
Impact: Full CMS admin control — content modification, plugin installation, RCE via theme editor.
Scenario 2 — Credential Spray on No-Lockout Login
Setup: Login endpoint has no rate limiting or CAPTCHA; accepts unlimited attempts.
Trigger: Spray top-10 passwords against enumerated usernames.
Impact: Multiple accounts compromised; potential admin access.
Scenario 3 — Weak Policy Allows Trivially Guessable Passwords
Setup: Registration allows "Password1"; a user has set this.
Trigger: Username enumeration reveals jsmith@TARGET; spray with common passwords.
Impact: User account compromised via guessable password.
False Positives
- A login page returning 200 for
admin/admin with no redirect may be a honeypot or decoy form.
- Identical error messages for wrong user vs. wrong password prevent enumeration but may mask
successful login attempts — always follow up with a session-bearing request.
- Some applications use progressive lockout (slow response, not hard lock) that may look like
an open endpoint on first probes.
Fix Patterns
- Force credential change on first login; remove all documented defaults before deployment.
- Enforce minimum password length (12+ chars), complexity, and common-password deny-list.
- Implement account lockout (5-10 attempts) with exponential backoff or CAPTCHA.
- Return identical error messages for wrong username and wrong password.
- Apply rate limiting per IP and per account on all authentication endpoints.
- Restrict admin panel access by IP allowlist or VPN requirement where feasible.
Related Skills
Default credentials are a specific subset of [[auth-bypass]] — the same forced-browsing and parameter-tampering techniques apply once credentials are obtained. If the login endpoint lacks rate limiting, use [[password-reset-flaws]] to check whether the reset flow also permits credential guessing. The platform fingerprinting step that leads here is covered in [[web-fingerprinting]], which identifies the exact CMS version to cross-reference with known default credential databases.
1---2name: default-credentials3description: Identify and exploit default or weak credentials on web application login forms, admin panels, CMS backends (WordPress wp-admin, Joomla, Drupal), and embedded device management interfaces. Signals include framework fingerprinting (WhatWeb, Wappalyzer, Nikto), exposed admin paths from robots.txt/dirbusting, and weak password policy acceptance of "Password1" or "123456". Tools: Burp Suite Intruder, Hydra, Medusa, OWASP ZAP.4license: MIT5---67# Default and Weak Credentials89## What Is Broken and Why1011Web applications, CMS platforms, and network devices ship with documented default credentials12that administrators frequently fail to change. Weak password policies that permit short, common,13or non-complex passwords compound the risk by allowing brute-force and credential-stuffing attacks14to succeed rapidly. When combined with exposed admin paths discovered through fingerprinting,15the attack chain from reconnaissance to authenticated access can be trivially short.1617## Key Signals1819- Admin path accessible: `/wp-admin/`, `/administrator/`, `/admin/`, `/manager/`, `/console/`20- Framework identified via cookie names, headers, or meta tags (WordPress, Joomla, Drupal, etc.)21- Login form accepts `admin/admin`, `admin/password`, `admin/<blank>`, `root/root`22- Password policy accepts "Password1" or "123456" on registration/change23- No account lockout after repeated failed attempts24- No rate limiting or CAPTCHA on login endpoint25- Error messages distinguish between invalid username and invalid password (username enumeration)26- HTTP Basic Auth realm on admin endpoints2728## Methodology29301. **Fingerprint the platform**: Identify CMS/framework via headers, cookies, HTML markers,31 and path probing (see `web-fingerprinting` skill).322. **Locate login endpoint**: Check `/robots.txt` Disallow entries; dirbust with framework-specific33 wordlist; follow redirects from root path.343. **Check for lockout and rate limiting**: Submit 5-10 intentionally wrong credentials; observe35 whether account locks or responses slow.364. **Username enumeration**: Test error message differentiation between unknown user and wrong37 password.385. **Default credential test**: Try documented defaults for identified platform.396. **Weak password spray**: Test a short list of common passwords against discovered usernames40 (low-and-slow to avoid lockout).417. **Password policy audit**: Attempt to register or change password to weak values; document42 what is and is not accepted.4344## Payloads & Tools4546```bash47# Hydra HTTP POST form brute-force48hydra -l admin -P /usr/share/wordlists/rockyou.txt TARGET http-post-form \49 "/login:username=^USER^&password=^PASS^:Invalid credentials"5051# Hydra HTTP Basic Auth52hydra -L users.txt -P passwords.txt TARGET http-get /admin/5354# Burp Suite Intruder — set username/password fields as payload positions55# Payload list: admin, administrator, root, user, test, guest56# Password list: admin, password, 123456, Password1, <blank>5758# Common default credential pairs to test manually59# admin:admin60# admin:password61# admin:123462# admin:(blank)63# root:root64# administrator:administrator65# test:test66# guest:guest6768# WordPress-specific69curl -X POST https://TARGET/wp-login.php \70 -d "log=admin&pwd=admin&wp-submit=Log+In&redirect_to=%2Fwp-admin%2F&testcookie=1" \71 -b "wordpress_test_cookie=WP+Cookie+check" -L -I | grep -E "HTTP|Location"7273# Check for username enumeration via error message difference74curl -s -X POST https://TARGET/login \75 -d "user=nonexistentuser12345&pass=wrongpass" | grep -i "invalid\|not found\|wrong"76curl -s -X POST https://TARGET/login \77 -d "user=admin&pass=wrongpass" | grep -i "invalid\|not found\|wrong"7879# Password policy probe80curl -X POST https://TARGET/register \81 -d "username=testpolicyuser&password=123456&confirm=123456"82```8384## Bypass Techniques8586- Some login forms implement lockout client-side only; bypass by sending requests directly via87 curl or Burp, skipping JavaScript lockout enforcement.88- IP-based rate limiting can be bypassed with `X-Forwarded-For` header rotation.89- CMS-specific default credentials may differ by version; cross-reference with identified version.90- "Remember me" tokens for admin accounts may persist after password changes in some platforms.9192## Exploitation Scenarios9394**Scenario 1 — CMS Default Admin Credentials**95Setup: WhatWeb identifies WordPress; `/wp-admin/` returns login form.96Trigger: Try `admin`/`admin`; application grants access.97Impact: Full CMS admin control — content modification, plugin installation, RCE via theme editor.9899**Scenario 2 — Credential Spray on No-Lockout Login**100Setup: Login endpoint has no rate limiting or CAPTCHA; accepts unlimited attempts.101Trigger: Spray top-10 passwords against enumerated usernames.102Impact: Multiple accounts compromised; potential admin access.103104**Scenario 3 — Weak Policy Allows Trivially Guessable Passwords**105Setup: Registration allows "Password1"; a user has set this.106Trigger: Username enumeration reveals `jsmith@TARGET`; spray with common passwords.107Impact: User account compromised via guessable password.108109## False Positives110111- A login page returning 200 for `admin/admin` with no redirect may be a honeypot or decoy form.112- Identical error messages for wrong user vs. wrong password prevent enumeration but may mask113 successful login attempts — always follow up with a session-bearing request.114- Some applications use progressive lockout (slow response, not hard lock) that may look like115 an open endpoint on first probes.116117## Fix Patterns118119- Force credential change on first login; remove all documented defaults before deployment.120- Enforce minimum password length (12+ chars), complexity, and common-password deny-list.121- Implement account lockout (5-10 attempts) with exponential backoff or CAPTCHA.122- Return identical error messages for wrong username and wrong password.123- Apply rate limiting per IP and per account on all authentication endpoints.124- Restrict admin panel access by IP allowlist or VPN requirement where feasible.125126## Related Skills127128Default credentials are a specific subset of [[auth-bypass]] — the same forced-browsing and parameter-tampering techniques apply once credentials are obtained. If the login endpoint lacks rate limiting, use [[password-reset-flaws]] to check whether the reset flow also permits credential guessing. The platform fingerprinting step that leads here is covered in [[web-fingerprinting]], which identifies the exact CMS version to cross-reference with known default credential databases.