Salta ai contenuti

Pipal

Pipal is a powerful password analysis tool designed to extract statistics and patterns from password dumps. It analyzes password lists to identify trends, weaknesses, and patterns in password selection, helping security researchers understand password strength, common mistakes, and policy effectiveness.

Key Features:

  • Statistical analysis of password dumps
  • Pattern and trend identification
  • Character set analysis
  • Length distribution calculation
  • Mask generation for dictionary attacks
  • Performance optimization for large datasets
  • HTML report generation
  • Custom filtering and analysis
git clone https://github.com/digininja/pipal.git
cd pipal
chmod +x pipal.rb
  • Ruby 2.0+
  • Ruby gems (bundler)
bundle install
# or
gem install bundler
./pipal.rb --version
./pipal.rb --help
docker run -it --rm digininja/pipal
./pipal.rb passwords.txt
./pipal.rb passwords.txt --output report.html
./pipal.rb passwords1.txt passwords2.txt passwords3.txt
./pipal.rb passwords.txt --min-length 8 --max-length 12
CommandDescription
--outputGenerate HTML report file
--min-lengthFilter passwords by minimum length
--max-lengthFilter passwords by maximum length
--countDisplay only frequency counts
--verboseDetailed output messages
--topShow top N most common passwords
--wordlistAnalyze wordlist file
--no-sortSkip sorting results
./pipal.rb passwords.txt

Output includes:

  • Total passwords analyzed
  • Unique passwords count
  • Average password length
  • Password length distribution
  • Character set usage
./pipal.rb passwords.txt --top 50
./pipal.rb passwords.txt | grep "Length"
./pipal.rb passwords.txt | grep -i "character\|digit\|upper\|lower\|special"
# Analyze only 8+ character passwords
./pipal.rb passwords.txt --min-length 8
# Analyze passwords 12 characters or less
./pipal.rb passwords.txt --max-length 12
# Analyze 8-16 character passwords
./pipal.rb passwords.txt --min-length 8 --max-length 16
# Analyze passwords with uppercase
./pipal.rb passwords.txt | grep -i "uppercase\|mixed"

# Analyze passwords all lowercase
./pipal.rb passwords.txt | grep -i "lowercase"
./pipal.rb passwords.txt | grep -E "^[0-9]|[0-9]$" | wc -l
# Extract first characters
./pipal.rb passwords.txt | head -1c | sort | uniq -c | sort -rn

# Extract last characters
./pipal.rb passwords.txt | tail -c | sort | uniq -c | sort -rn
# Find passwords containing years
grep -E "(19|20)[0-9]{2}" passwords.txt | wc -l
# Find seasonal patterns
grep -iE "spring|summer|fall|winter|jan|feb|mar|apr" passwords.txt
./pipal.rb passwords.txt --output analysis.html
# Use masks to generate wordlists
# Find patterns common to 70%+ of passwords
./pipal.rb passwords.txt | grep -i "70\|80\|90"
# Extract common password patterns
grep -E "^[a-z]{8}[0-9]{2}$" passwords.txt > common_pattern.txt
# Generate common masks
cat passwords.txt | while read pass; do
  echo "$pass" | sed 's/[a-z]/L/g; s/[A-Z]/U/g; s/[0-9]/D/g; s/[^LUD]/S/g'
done | sort | uniq -c | sort -rn | head -20
./pipal.rb passwords.txt | grep -i "uppercase\|mixed case"
./pipal.rb passwords.txt | grep -i "lowercase only"
./pipal.rb passwords.txt | grep -i "digit"
./pipal.rb passwords.txt | grep -i "special\|symbol"
# Analyze all character types
./pipal.rb passwords.txt | tail -50
./pipal.rb passwords.txt --output report.html
# Open report.html in browser
./pipal.rb passwords.txt --min-length 8 --output filtered_report.html
# Generate reports for different analyses
./pipal.rb dump1.txt --output dump1_analysis.html
./pipal.rb dump2.txt --output dump2_analysis.html
# Extract specific statistics for export
./pipal.rb passwords.txt > analysis.txt
cat analysis.txt | grep -E "^[0-9]|^[A-Z]" > summary.txt
# 1. Extract password field from dump
mysql -u user -p database -e "SELECT password FROM users;" > passwords.txt

# 2. Run analysis
./pipal.rb passwords.txt --output breach_analysis.html

# 3. Identify password policy weaknesses
# Review HTML report for patterns
# Analyze passwords to identify most valuable targets
./pipal.rb common_passwords.txt --top 100 > top_targets.txt

# Use length distribution to focus computing resources
./pipal.rb passwords.txt | grep "Length" > length_dist.txt
# Check if passwords meet minimum requirements
echo "Checking 8+ character passwords:"
./pipal.rb passwords.txt --min-length 8 | head -20

# Check mixed case usage
echo "Checking mixed case requirement:"
./pipal.rb passwords.txt | grep -i "mixed case\|uppercase"
# Analyze weak passwords
./pipal.rb weak_passwords.txt --output weak_analysis.html

# Analyze strong passwords
./pipal.rb strong_passwords.txt --output strong_analysis.html

# Compare reports to understand differences
# Analyze first dump
./pipal.rb dump1.txt --output dump1.html

# Analyze second dump
./pipal.rb dump2.txt --output dump2.html

# Extract statistics for comparison
echo "Dump 1:" > comparison.txt
./pipal.rb dump1.txt | head -30 >> comparison.txt
echo "Dump 2:" >> comparison.txt
./pipal.rb dump2.txt | head -30 >> comparison.txt
# Analyze before policy change
./pipal.rb before_policy.txt --output before.html

# Analyze after policy change
./pipal.rb after_policy.txt --output after.html

# Compare effectiveness
diff before.html after.html | grep -i "length\|special\|digit"
# Analyze very large password files
./pipal.rb /path/to/large_dump.txt --output results.html

# Filter before analysis
grep "^[a-z0-9]{8,}$" large_dump.txt > filtered.txt
./pipal.rb filtered.txt
#!/bin/bash
for file in *.txt; do
  echo "Analyzing $file..."
  ./pipal.rb "$file" --output "${file%.txt}_analysis.html"
done
# Get only password length statistics
./pipal.rb passwords.txt | grep -A 20 "^Length"

# Get only character set statistics
./pipal.rb passwords.txt | grep -i "character\|digit\|upper\|lower\|special"
#!/bin/bash
# Analyze password statistics comprehensively

FILE=$1
OUTPUT="${FILE%.txt}_detailed.txt"

echo "=== Password Analysis for $FILE ===" > $OUTPUT
echo "" >> $OUTPUT

echo "Total passwords:" >> $OUTPUT
wc -l < $FILE >> $OUTPUT

echo "" >> $OUTPUT
echo "Unique passwords:" >> $OUTPUT
sort -u $FILE | wc -l >> $OUTPUT

echo "" >> $OUTPUT
echo "Top 10 passwords:" >> $OUTPUT
sort | uniq -c | sort -rn | head -10 >> $OUTPUT

echo "" >> $OUTPUT
echo "Password lengths:" >> $OUTPUT
awk '{print length}' $FILE | sort -n | uniq -c >> $OUTPUT

echo "" >> $OUTPUT
echo "Pipal statistics:" >> $OUTPUT
./pipal.rb $FILE >> $OUTPUT

echo "Analysis saved to $OUTPUT"
# Passwords starting with capital letter + lowercase
grep "^[A-Z][a-z]" passwords.txt | wc -l

# Passwords with trailing numbers
grep "[0-9]$" passwords.txt | wc -l

# Passwords with special characters
grep "[!@#$%^&*]" passwords.txt | wc -l
# Common adjacent keyboard sequences
grep -iE "qwerty|asdfgh|zxcvbn" passwords.txt

# Sequential numbers
grep -E "[0-9][0-9][0-9][0-9]$" passwords.txt
# Year of birth patterns
grep -E "(19[6-9][0-9]|20[0-1][0-9])" passwords.txt

# Common names
grep -iE "^john|^michael|^david|^sarah|^jennifer" passwords.txt
# Analyze and extract password patterns
./pipal.rb passwords.txt --output patterns.html

# Use patterns to create targeted wordlist
cat passwords.txt | sed 's/[a-z]/l/g; s/[A-Z]/u/g; s/[0-9]/d/g' | \
  sort | uniq -c | sort -rn | head -50 > masks.txt
# Extract most common passwords for dictionary
./pipal.rb passwords.txt --top 1000 > top_passwords.txt

# Use for offline attacks
./pipal.rb passwords.txt | grep "^[^0-9]*[0-9]*$" > alphanumeric.txt
# Analyze password structure
./pipal.rb passwords.txt > masks.txt

# Extract masks for hashcat
grep "Mask" masks.txt | head -20
# Analyze and prepare wordlist
./pipal.rb passwords.txt | head -100 > wordlist.txt

# Use with John
john --wordlist=wordlist.txt hashes.txt
# Process file in chunks
split -l 100000 large_file.txt chunk_
for file in chunk_*; do
  ./pipal.rb "$file" --output "${file}_analysis.html"
done
# Convert encoding if necessary
iconv -f ISO-8859-1 -t UTF-8 passwords.txt > passwords_utf8.txt
./pipal.rb passwords_utf8.txt
# Ensure Ruby and gems installed
ruby --version
bundle install
./pipal.rb --help
  • Handle password dumps securely
  • Use air-gapped systems for analysis
  • Delete analyzed files securely
  • Use encrypted storage for results
  • Limit report distribution
  • Use complete and recent password dumps
  • Account for hashing algorithms
  • Consider password requirements in effect
  • Document analysis methodology
  • Update analysis regularly
# Check for updates
cd pipal && git pull origin master
ruby -v
bundle update

Important: Only analyze password dumps from systems you own or have explicit authorization to analyze. Unauthorized possession or analysis of password dumps is illegal. Use this tool only for authorized security research, penetration testing, or organizational security assessments. Proper documentation and legal authorization are required for all password analysis activities.