Preparing your learning space...
36% through Projects tutorials
In this project, you will conduct a simulated password audit. You'll learn how to extract and analyze password hashes, test password strength, review password policies, and create professional audit reports. This project teaches both the technical skills needed for password auditing and the ethical framework required to perform these assessments safely.
You are a security consultant hired by TechFlow Inc., a software company with 150 employees. Management suspects weak password practices after a recent near-miss incident. You have been authorized to conduct a password audit (with written permission) to identify weaknesses and recommend improvements.
** Free Lab Setup**: All tools used in this project are 100% free and open source:
- Hashcat (free, GPU-accelerated cracking)
- John the Ripper (free, CPU-based cracking)
- rockyou.txt wordlist (free, included in Kali Linux)
- DSInternals (free PowerShell module for AD hashes)
- No paid tools required!
Practice safely: Create your own test hashes or download sample hash files. NEVER attempt to crack passwords without explicit written permission.
π Your Step-by-Step Task:
- Read the legal & ethical guidelines FIRST (critical section below)
- Download & install Hashcat or John the Ripper (free)
- Download the rockyou.txt wordlist (free)
- Create a practice hash file (or use sample hashes provided)
- Run a dictionary attack:
hashcat -m 1000 hashes.txt rockyou.txt- Try rule-based attack: add
-r best64.rulefor more coverage- Analyze cracked passwords β document patterns and weaknesses
- Review current password policy against NIST SP 800-63B
- Write an audit report using the provided template
- Complete the deliverables checklist and take the quiz
After completing this project, you will be able to:
Passwords remain the primary authentication method for most systems, yet they are often the weakest link. Common issues include:
| Incident Type | Caused by Weak Passwords | Average Cost |
|---|---|---|
| Data Breach | 81% of breaches involve weak/stolen passwords | $4.35M |
| Ransomware | 30% start with compromised credentials | $1.85M |
| Insider Threat | 20% involve credential misuse | $307K |
BAD STORAGE METHODS:
Plain text: "MyPassword123" β Immediate compromise
Base64: "TXlQYXNzd29yZDEyMw==" β Easily reversible
MD5 Hash: "a1234567890abc..." β Fast to crack
SHA1 Hash: "b1234567890abc..." β Fast to crack
GOOD STORAGE METHODS:
bcrypt: "$2a$10$N9qo8uLOickgx2ZMRZoMye..." β Slow, built-in salt
Argon2: "$argon2id$v=19$m=65536,t=3,p=4..." β Modern, memory-hard
PBKDF2-SHA256: "10000$salt$hash..." β Adjustable work factor
scrypt: "N=16384, r=8, p=1$salt$hash..." β Memory-hard
PLAINTEXT β HASH FUNCTION β HASH VALUE
"password" β MD5 β "5f4dcc3b5aa765d61d8327deb882cf99"
CRACKING METHODS:
1. Brute Force: Try every possible combination
- "a", "b", ... "aa", "ab", ... "password"
- Time: Exponential β "z" takes 26 tries, "zz" takes 676
2. Dictionary Attack: Use wordlists of common passwords
- rockyou.txt: 14 million real compromised passwords
- Time: Minutes to hours
3. Hybrid Attack: Dictionary + mutations
- "password" β "Password1!", "P@ssw0rd2024!"
- Time: Hours to days
4. Rule-Based Attack: Apply transformation rules
- Append year: "password" β "password2024"
- Leetspeak: "password" β "p@ssw0rd"
- Capitalize: "password" β "Password"
| Hash Type | Speed (hashes/sec) | Time for 1M hashes |
|---|---|---|
| NTLM | 200 GH/s | 5 microseconds |
| MD5 | 150 GH/s | 6.6 microseconds |
| SHA1 | 75 GH/s | 13.3 microseconds |
| SHA256 | 30 GH/s | 33 microseconds |
| bcrypt (cost 10) | 20 KH/s | 50 seconds |
| Argon2id (default) | 5 KH/s | 200 seconds |
Key Insight: Fast hashing algorithms (MD5, SHA1, NTLM) can be cracked at billions of attempts per second. Always use slow, memory-hard hashing algorithms.
β Written authorization from system owner/management
β Clearly defined scope (which systems, which accounts)
β Defined rules of engagement (what you will and won't do)
β Data handling procedures (how hashes will be secured)
β Incident response plan (if you find active compromise)
β Legal review of authorization and methodology
β NDA in place (if third-party auditor)
β Insurance coverage (cyber liability)
DO:
β Work only on systems you own or have written permission to test
β Use hash files, not live password capture (when possible)
β Store hash files encrypted
β Report findings professionally and confidentially
β Destroy hash files after audit completion
DON'T:
β Attempt to access accounts without authorization
β Share cracked passwords with anyone except the security team
β Use cracked passwords for anything beyond the audit
β Store plaintext passwords in reports
β Crack passwords belonging to users outside scope
Step 1: PLANNING
ββ Define scope, get authorization, select tools
Step 2: EXTRACTION
ββ Obtain password hashes from target systems
Step 3: ANALYSIS
ββ Identify hash types, assess cracking difficulty
Step 4: CRACKING
ββ Apply various cracking methods
Step 5: ANALYSIS
ββ Evaluate cracked password strength
Step 6: POLICY REVIEW
ββ Assess password policies against standards
Step 7: REPORTING
ββ Present findings and recommendations
PASSWORD AUDIT β SCOPE OF WORK
βββββββββββββββββββββββββββββββββ
Organization: TechFlow Inc.
Date: [Current Date]
Auditor: [Your Name]
IN SCOPE:
β’ Active Directory domain: techflow.local
β’ All enabled user accounts (150 users)
β’ Service accounts (15 accounts)
β’ Local admin accounts on 50 workstations (sampled)
β’ Password policy review
OUT OF SCOPE:
β’ Cloud application passwords (Google Workspace, Salesforce)
β’ Personal accounts
β’ Customer or partner accounts
β’ Root/certificate authority keys
TIMELINE: 5 business days
REPORT DUE: [Date]
| Tool | Best For | Platform | Cost | Difficulty |
|---|---|---|---|---|
| John the Ripper | CPU-based cracking, wide hash support | Cross-platform | Free | Medium |
| Hashcat | GPU-accelerated cracking, fastest option | Windows/Linux | Free | Medium |
| ophcrack | Windows NTLM hashes only | Cross-platform | Free | Easy |
| Cain & Abel | Windows auditing (legacy) | Windows only | Free | Easy |
| Hydra | Online password testing | Cross-platform | Free | Hard |
| Medusa | Online password testing (parallel) | Cross-platform | Free | Hard |
| DSInternals | Active Directory hash extraction | Windows | Free | Medium |
PRIMARY TOOL: John the Ripper (CPU-based β runs on ANY computer)
ADVANCED: Hashcat (GPU-accelerated β faster but optional)
EXTRACTION: DSInternals (AD hashes) or secretsdump.py (Impacket)
WORDLISTS: rockyou.txt (primary), SecLists (additional)
SYSTEM REQUIREMENTS:
- OS: Windows, Linux, or macOS (any)
- CPU: Any processor (no GPU needed β John runs fine on CPU)
- RAM: 4GB minimum (8GB recommended)
- Storage: 10GB free (for wordlists)
No GPU? No problem! John the Ripper works perfectly on any computer.
GPU acceleration (Hashcat) is optional β you can crack many passwords
with CPU-only using John's wordlist and rule-based modes.
# On Kali Linux (pre-installed):
hashcat --version
john --version
# Installing wordlists:
sudo apt install wordlist rockyou
gunzip /usr/share/wordlists/rockyou.txt.gz
# On Windows (manual install):
# 1. Download Hashcat from https://hashcat.net/hashcat/
# 2. Download John the Ripper from https://www.openwall.com/john/
# 3. Download rockyou.txt from GitHub/cloud storage
# Install DSInternals module Install-Module -Name DSInternals -Force # Export NTDS.dit (requires Domain Admin or SYSTEM access) # Option A: Using ntdsutil (on Domain Controller) ntdsutil activate instance ntds ifm create full C:\AD_Export quit quit # Option B: Using Volume Shadow Copy $shadow = Invoke-CimMethod -ClassName Win32_ShadowCopy ` -MethodName Create -Arguments @{Context="ClientAccessible"; Volume="C:"} Copy-Item "$($shadow.Path)Windows\NTDS\NTDS.dit" C:\AD_Export\ Copy-Item "$($shadow.Path)Windows\NTDS\ntds.dit" C:\AD_Export\ntds.dit # Extract hashes Get-BootKey -SystemHivePath "C:\AD_Export\registry\SYSTEM" Get-ADDBAccount -All -DBPath "C:\AD_Export\Active Directory\ntds.dit" | Format-Custom -View HashcatNT | Out-File C:\AD_Export\hashes.txt
# Extract hashes using secretsdump (requires credentials)
impacket-secretsdump -just-dc-ntlm techflow.local/administrator:Password@DC01
# Output format:
# username:rid:lmhash:nthash:::
# jdoe:1115:aad3b435b51404eeaad3b435b51404ee:5f4dcc3b5aa765d61d8327deb882cf99:::
# techflow_hashes.txt β 150 user accounts extracted
# Format: username:RID:LM:NT::
administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
jdoe:1115:aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42:::
asmith:1116:aad3b435b51404eeaad3b435b51404ee:5f4dcc3b5aa765d61d8327deb882cf99:::
bjohnson:1117:aad3b435b51404eeaad3b435b51404ee:7c6a61b68d3d5b7c6e9c6d5a7b8c9d0e:::
...
# Using Mimikatz (run as Administrator) mimikatz.exe privilege::debug token::elevate lsadump::sam exit # Extract to file for offline cracking mimikatz "privilege::debug" "token::elevate" "lsadump::sam" "exit" > sam_hashes.txt
# Linux password hashes are in /etc/shadow (requires root)
sudo cat /etc/shadow > shadow_hashes.txt
# Hash format:
# username:$algorithm$salt$hash:lastchange:min:max:warn:inactive:expire
# $6$ = SHA512, $5$ = SHA256, $1$ = MD5, $2y$ = bcrypt
# Example:
johndoe:$6$xyz123$AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abc:
# Hashcat example hashes reference
# Use hashid or hash-identifier to identify hash types
hashid '5f4dcc3b5aa765d61d8327deb882cf99'
# Output: MD5, MD4, MD2, LM, NTLM
hashid '$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy'
# Output: bcrypt
| Hash Mode | Algorithm | Example Usage |
|---|---|---|
| 1000 | NTLM | Windows authentication |
| 5500 | NetNTLMv1 | Legacy Windows auth |
| 5600 | NetNTLMv2 | Modern Windows auth |
| 1800 | SHA-512 (Unix) | Linux passwords |
| 3200 | bcrypt | Web applications |
| 1700 | SHA-512 | General purpose |
| 2500 | WPA/WPA2 | WiFi passwords |
| 900 | MD4 | Legacy systems |
# Dictionary attack (fastest method)
hashcat -m 1000 -a 0 hashes.txt rockyou.txt
# Dictionary + rules (more thorough)
hashcat -m 1000 -a 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
# Brute force (8-character lowercase)
hashcat -m 1000 -a 3 hashes.txt ?l?l?l?l?l?l?l?l
# Mask attack (known patterns)
hashcat -m 1000 -a 3 hashes.txt ?u?l?l?l?l?l?l?d?s
# Example: Password matching "Aaaaaaa1!"
# Hybrid attack (word + mask)
hashcat -m 1000 -a 6 hashes.txt rockyou.txt ?d?d?d?d
# Example: "password2024"
# Using a rule file
hashcat -m 1000 -a 0 hashes.txt rockyou.txt -r dive.rule
# Show cracked passwords
hashcat -m 1000 hashes.txt --show
# Output format
hashcat -m 1000 hashes.txt rockyou.txt --outfile=cracked.txt
| Mode | Name | Description | Use Case |
|---|---|---|---|
| 0 | Straight | Dictionary attack | Common passwords |
| 1 | Combination | wordlist1 + wordlist2 | "password123" |
| 3 | Brute-force | All possible combinations | Short passwords |
| 6 | Hybrid dict + mask | word + suffix | "Summer2024!" |
| 7 | Hybrid mask + dict | prefix + word | "2024Summer!" |
# Basic dictionary attack
john --format=nt --wordlist=rockyou.txt hashes.txt
# Show cracked passwords
john --show hashes.txt
# Incremental (brute force) mode - SLOW but thorough
john --incremental hashes.txt
# Using rules
john --wordlist=rockyou.txt --rules hashes.txt
# Specify format explicitly
john --format=raw-sha256 --wordlist=rockyou.txt hashes.txt
| Strength | Characteristics | Time to Crack | Examples |
|---|---|---|---|
| Very Weak | Common word, <8 chars | Instant-1 minute | "password", "123456" |
| Weak | Dictionary word + number | 1-60 minutes | "Summer2024", "Company1" |
| Moderate | 8-10 chars, mixed case + number | Hours-days | "TechFlow24!" |
| Strong | 12+ chars, complex, no patterns | Years | "B1ue#Rabb1t$Jump5" |
| Very Strong | 15+ char passphrase | Centuries | "Correct-Horse-Battery-Staple" |
| Username | Hash Type | Cracked? | Password | Strength | Notes |
|---|---|---|---|---|---|
| administrator | NTLM | Yes | P@ssw0rd | Weak | Default pattern |
| jdoe | NTLM | Yes | summer2024 | Weak | Follows date pattern |
| asmith | NTLM | Yes | password123 | Very Weak | Rockyou top 10 |
| bjohnson | NTLM | No (ran 2hrs) | β | Strong | β |
| svc_backup | NTLM | Yes | Backup2024! | Moderate | Service account |
| admin_local | NTLM | Yes | admin | Very Weak | Default credential |
Patterns Found (150 accounts):
Based on company name "TechFlow": 12 accounts (8%)
Containing current year "2024": 25 accounts (17%)
Sequential numbers (123, 1234, etc.): 18 accounts (12%)
Common substitutions (p@ss, etc.): 8 accounts (5%)
Under 8 characters: 22 accounts (15%)
In rockyou.txt top 1000: 15 accounts (10%)
Shared passwords across accounts: 20 pairs found
Password same as username: 3 accounts (2%)
Most Common Passwords:
1. "Summer2024" β 8 accounts
2. "TechFlow1!" β 5 accounts
3. "Password1" β 4 accounts
4. "Welcome1" β 3 accounts
5. "Company2024" β 3 accounts
NIST RECOMMENDATIONS:
β Minimum 8 characters (12+ preferred)
β Allow up to 64+ character passwords
β Allow all ASCII characters + Unicode (spaces, emoji)
β Compare against known compromised passwords (breach databases)
β Rate limiting on login attempts
β No mandatory periodic change (unless compromised or requested)
β No complexity requirements (uppercase, number, etc.)
β No password hints
β No knowledge-based authentication (security questions)
β REMOVED from NIST guidelines:
β Periodic password changes every 90 days
β Complexity requirements (must have special char, etc.)
β Password expiration without reason
TECHFLOW INC. CURRENT PASSWORD POLICY
βββββββββββββββββββββββββββββββββββββββ
| Requirement | Current Policy | NIST Recommended | Status |
|-------------|---------------|------------------|--------|
| Minimum length | 8 characters | 8+ (12+ preferred) | Marginal |
| Maximum length | 16 characters | 64+ characters | Too restrictive |
| Complexity required | Yes (upper, lower, num) | No (not recommended) | Outdated |
| Expiration | 90 days | No (not recommended) | Outdated |
| Password history | 10 passwords | 10 passwords | Good |
| Breach check | No | Yes | Missing |
| MFA required | No | Yes (strongly) | Missing |
| Account lockout | 5 attempts/15min | Rate limiting | Adequate |
# Check if passwords appear in known breaches # Using HIBP API (v3) function Test-IsPasswordPwned { param([string]$Password) $sha1 = [System.Security.Cryptography.SHA1]::Create() $hash = [BitConverter]::ToString( $sha1.ComputeHash([Text.Encoding]::UTF8.GetBytes($Password)) ) -replace '-', '' $prefix = $hash.Substring(0, 5) $suffix = $hash.Substring(5) $response = Invoke-WebRequest "https://api.pwnedpasswords.com/range/$prefix" if ($response.Content -match $suffix) { $count = ($response.Content -match $suffix) -replace '.*:(\d+).*', '$1' return $true, [int]$count } return $false, 0 }
βββββββββββββββββββββββββββββββββββββββββββ
PASSWORD AUDIT REPORT β EXECUTIVE SUMMARY
βββββββββββββββββββββββββββββββββββββββββββ
To: Management, TechFlow Inc.
From: [Your Name], Security Consultant
Date: [Current Date]
Classification: CONFIDENTIAL
PROJECT OVERVIEW
A password audit was conducted on the TechFlow Inc. Active Directory
environment from [Start Date] to [End Date]. The audit assessed password
strength, password policies, and account security for 150 user accounts.
KEY FINDINGS
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β’ 78 of 150 accounts (52%) had passwords cracked β
β β’ 15 accounts used passwords found in top 1000 breaches β
β β’ 3 accounts had the password set as the username β
β β’ Average cracking time: 14 minutes (cracked accounts) β
β β’ Password policy is outdated compared to NIST standards β
β β’ No MFA implemented for any accounts β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RISK RATING: HIGH
The organization is at significant risk of credential-based
attacks due to weak password practices and missing controls.
RECOMMENDATIONS
1. Implement MFA for all accounts (priority: 30 days)
2. Update password policy to align with NIST SP 800-63B
3. Deploy a password manager for all employees
4. Implement breach-checking at password creation
5. Conduct security awareness training focused on passwords
βββββββββββββββββββββββββββββββββββββββββββ
PASSWORD AUDIT REPORT β TECHNICAL DETAIL
βββββββββββββββββββββββββββββββββββββββββββ
1. METHODOLOGY
β’ Hash extraction: DSInternals (NTDS.dit export)
β’ Cracking tool: Hashcat v6.2.6
β’ Hardware: NVIDIA RTX 3070, 8GB VRAM
β’ Wordlists: rockyou.txt, SecLists/Passwords
β’ Rules: best64.rule, dive.rule
β’ Cracking time: 4 hours total
2. ACCOUNTS AUDITED
Total accounts extracted: 157
Disabled/expired accounts: 7 (excluded from analysis)
Active accounts analyzed: 150
3. CRACKING RESULTS
ββββββββββββββββββββ¬βββββββββ¬βββββββββββββββ
β Status β Count β Percentage β
ββββββββββββββββββββΌβββββββββΌβββββββββββββββ€
β Cracked easily β 52 β 34.7% β
β Cracked with rulesβ 26 β 17.3% β
β Not cracked β 72 β 48.0% β
ββββββββββββββββββββ΄βββββββββ΄βββββββββββββββ
4. TOP WEAK PASSWORDS (USER-VISIBLE; DO NOT LIST PLAINTEXT)
[Detailed list provided separately β CONFIDENTIAL]
[Passwords communicated only to security team]
5. COMPROMISED ACCOUNTS
Accounts appearing in known breaches: 22 (14.7%)
[Details in appendix]
6. COMPLIANCE GAPS
[See Password Policy Review section]
7. RECOMMENDATIONS
[See detailed recommendations section]
| Action | Effort | Impact | Details |
|---|---|---|---|
| Enable MFA | Medium | High | Start with administrators, then all users |
| Force password reset for weak accounts | High | High | Cracked accounts must reset immediately |
| Remove expired complexity rules | Low | Medium | Update GPO to remove complexity requirements |
| Increase max password length | Low | Medium | Change from 16 to 64+ characters |
| Disable stale accounts | Medium | Medium | Review and disable unused accounts |
| Action | Effort | Impact | Details |
|---|---|---|---|
| Deploy password manager | Medium | High | Bitwarden (free) or KeePass (free) |
| Implement breach checking | Medium | High | Have I Been Pwned API (free) |
| Security awareness training | Medium | High | Focus on password hygiene |
| Deploy passphrases policy | Medium | Medium | Encourage 15+ char passphrases |
| Implement conditional access | High | High | Block risky sign-ins |
| Action | Effort | Impact | Details |
|---|---|---|---|
| Passwordless authentication | High | Very High | Windows Hello, FIDO2, biometrics |
| Zero Trust architecture | Very High | Very High | Never trust, always verify |
| Automated breach monitoring | Medium | High | Continuous monitoring for credential leaks |
| SSO integration | Medium | Medium | Reduce number of passwords needed |
SCENARIO: TechFlow Inc. Password Audit
Step 1: Setup
- Tool: Hashcat on Kali Linux
- Wordlist: rockyou.txt (downloaded and extracted)
- Hashes: Extracted via DSInternals (150 accounts)
Step 2: First Pass β Dictionary Attack
Command: hashcat -m 1000 -a 0 hashes.txt rockyou.txt
Time: 47 seconds
Results: 42 accounts cracked (28%)
Step 3: Second Pass β Dictionary + Rules
Command: hashcat -m 1000 -a 0 hashes.txt rockyou.txt -r best64.rule
Time: 3 minutes 12 seconds
Results: 18 additional accounts cracked (total: 60 accounts)
Step 4: Third Pass β Mask Attack (8 char)
Command: hashcat -m 1000 -a 3 hashes.txt ?u?l?l?l?l?l?l?d!?s
Time: 8 minutes
Results: 8 additional (total: 68 accounts)
Step 5: Fourth Pass β Company-Specific
Command: echo "TechFlow" > custom.txt && hashcat -m 1000 -a 6 hashes.txt custom.txt ?d?d?d?d?d?d
Time: 2 minutes
Results: 10 additional (total: 78 accounts)
Step 6: Analysis
Total cracked: 78/150 (52%)
Average strength: Weak
Common patterns: Company name, current year, seasonal
Step 7: Policy Review
NIST compliance gaps identified: 5 major gaps
Step 8: Report Creation
Executive summary + technical report + recommendations
Password Audit Summary
βββββββββββββββββββββββββββββββββ
Organization: TechFlow Inc.
Date: July 22, 2026
βββββββββββββββββββββββββββββββ
π Overall Score: D (48/100)
βββββββββββββββββββββββββββββββ
Categories:
β‘ Password Strength ββββββββββ 42/100
β‘ Password Policy ββββββββββ 35/100
β‘ MFA Implementation ββββββββββ 10/100
β‘ Account Hygiene ββββββββββ 45/100
Critical Issues Found:
β 52% of passwords cracked in under 1 hour
β No MFA enabled on any account
β 22 accounts appear in known breaches
β Password policy is 5+ years outdated
β 7 service accounts have non-expiring passwords
Top 3 Immediate Actions:
1. Enable MFA (1 week)
2. Force password reset for all cracked accounts (immediate)
3. Update password policy to NIST standards (2 weeks)
Before marking this project complete:
Save your progress and earn XP for completing tutorials.
Keep learning
Technology
Cyber Security & Networking
Lesson group
Projects
Progress
36% complete