zebbern

John the Ripper Password Cracking

```

zebbern 31 8 Updated 5mo ago
GitHub

Install

npx skillscat add zebbern/secops-cli-guides/skills-john-the-ripper

Install via the SkillsCat registry.

SKILL.md

John the Ripper Password Cracking


name: John the Ripper Password Cracking
description: This skill should be used when the user asks to "crack password hashes," "extract and crack encrypted file passwords," "perform dictionary attacks on hashes," "crack SSH or ZIP file passwords," or "use John the Ripper for penetration testing." It provides comprehensive guidance for using John the Ripper across multiple cracking modes and file formats.
version: 1.0.0
tags: [password-cracking, john-the-ripper, hash-cracking, penetration-testing, credential-recovery]

Purpose

Provide systematic methodologies for cracking password hashes and encrypted file passwords using John the Ripper. This skill covers the three primary cracking modes (single, wordlist, incremental), hash format identification, file format extraction utilities (*2john tools), and optimized cracking strategies for various encryption types encountered during penetration testing.

Inputs / Prerequisites

  • Target Hash File: Text file containing username:hash pairs or extracted hashes
  • Hash Type Identification: Knowledge of or auto-detection of hash format (MD5, SHA1, SHA256, etc.)
  • Wordlist Access: Dictionary files such as rockyou.txt, password.lst, or custom wordlists
  • John the Ripper Installation: Pre-installed on Kali Linux or installed from Openwall
  • Source Files (Optional): Encrypted files requiring hash extraction (ZIP, RAR, PDF, SSH keys, etc.)
  • System Access (Optional): Read access to /etc/passwd and /etc/shadow for Linux credential cracking

Outputs / Deliverables

  • Cracked Credentials: Plaintext passwords recovered from hash files
  • Session Files: Saved cracking progress for session restoration
  • Extracted Hashes: Hash values extracted from encrypted files using *2john utilities
  • Crack Report: Summary of cracked credentials with usernames and passwords
  • Format Identification: Detected or verified hash format types

Core Workflow

1. Hash Acquisition and Preparation

Extract Linux User Credentials

# Method 1: Single user extraction
cat /etc/shadow | grep username > crack.txt

# Method 2: All users with unshadow utility
unshadow /etc/passwd /etc/shadow > crack.txt

Extract Hashes from Encrypted Files

# Locate available extraction utilities
locate *2john

# SSH private key extraction
ssh2john /path/to/id_rsa > ssh_hash.txt

# ZIP file extraction
zip2john file.zip > zip_hash.txt

# RAR file extraction
rar2john file.rar > rar_hash.txt

# 7-Zip file extraction
python 7z2john.py file.7z > 7z_hash.txt

# PDF file extraction
python pdf2john.py file.pdf > pdf_hash.txt

# KeePass database extraction
keepass2john database.kdb > keepass_hash.txt

# PuTTY private key extraction
putty2john file.ppk > putty_hash.txt

# Password Safe extraction
pwsafe2john file.psafe3 > pwsafe_hash.txt

2. Identify Hash Format

Auto-Detection

# John attempts automatic format detection
john hash.txt

Manual Format Specification

# List all supported formats
john --list=formats

# Specify format explicitly
john --format=raw-sha1 hash.txt
john --format=raw-md5 hash.txt
john --format=raw-sha256 hash.txt

Common Hash Formats

Hash Type Format Flag Example Pattern
MD4 raw-md4 32 hex characters
MD5 raw-md5 32 hex characters
SHA1 raw-sha1 40 hex characters
SHA256 raw-sha256 64 hex characters
SHA512 raw-sha512 128 hex characters
RIPEMD-128 ripemd-128 32 hex characters
Whirlpool whirlpool 128 hex characters
bcrypt bcrypt $2a$, $2b$, $2y$ prefix
Linux SHA512crypt sha512crypt $6$ prefix

3. Select Cracking Mode

Single Crack Mode (Fastest)

Uses username-based password mutations:

john --single --format=raw-sha1 crack.txt
# Abbreviated: john -si crack.txt -form=raw-sha1

Wordlist Crack Mode (Most Common)

# Using default wordlist
john --wordlist=/usr/share/john/password.lst --format=raw-sha1 crack.txt

# Using rockyou wordlist
john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 crack.txt

# Abbreviated syntax
john -w=/usr/share/wordlists/rockyou.txt crack.txt -form=raw-md5

Incremental Mode (Brute Force)

# Full brute force with character set
john --incremental crack.txt

# Specify incremental mode type
john --incremental=digits crack.txt
john --incremental=alpha crack.txt

4. Execute Cracking

Basic Cracking Session

# Start cracking with wordlist
john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-sha256 crack.txt

# Crack multiple files simultaneously (same format)
john --format=raw-md5 crack.txt md5_hashes.txt

Session Management

# Interrupt session: Press 'q' or Ctrl+C

# Resume interrupted session
john --restore

# Show cracked passwords
john --show crack.txt

# Show cracked passwords for specific format
john --show --format=raw-sha256 crack.txt

5. Post-Cracking Analysis

View Results

# Display all cracked passwords
john --show crack.txt

# Count cracked vs remaining
john --show crack.txt | wc -l

Quick Reference Commands

Hash Format Cracking

Hash Type Command
MD4 john -w=rockyou.txt --format=raw-md4 hash.txt
MD5 john -w=rockyou.txt --format=raw-md5 hash.txt
SHA1 john -w=rockyou.txt --format=raw-sha1 hash.txt
SHA256 john -w=rockyou.txt --format=raw-sha256 hash.txt
Whirlpool john -w=rockyou.txt --format=whirlpool hash.txt
RIPEMD-128 john -w=rockyou.txt --format=ripemd-128 hash.txt

File Format Cracking Workflow

File Type Extract Command Crack Command
SSH Key ssh2john id_rsa > hash.txt john -w=rockyou.txt hash.txt
ZIP zip2john file.zip > hash.txt john -w=rockyou.txt hash.txt
RAR rar2john file.rar > hash.txt john -w=rockyou.txt hash.txt
7z 7z2john.py file.7z > hash.txt john -w=rockyou.txt hash.txt
PDF pdf2john.py file.pdf > hash.txt john -w=rockyou.txt hash.txt
KeePass keepass2john db.kdb > hash.txt john -w=rockyou.txt hash.txt
PuTTY putty2john key.ppk > hash.txt john -w=rockyou.txt hash.txt
Password Safe pwsafe2john file.psafe3 > hash.txt john -w=rockyou.txt hash.txt

Option Abbreviations

Full Option Abbreviation
--single -si
--format -form
--wordlist -w

Constraints and Limitations

Operational Boundaries

  • Requires extracted hash file in correct format (username:hash or hash-only)
  • Wordlist attacks limited by dictionary completeness
  • Incremental mode extremely time-consuming for complex passwords
  • Some formats require additional Python utilities (7z2john, pdf2john)
  • Hash extraction utilities may not be pre-installed

Performance Considerations

  • Cracking speed depends on hash type (MD5 faster than bcrypt)
  • GPU acceleration available via John the Ripper Jumbo
  • Large wordlists increase memory usage
  • Multiple hash files can be processed simultaneously if same format

Legal Requirements

  • Only use on systems with explicit authorization
  • Penetration testing requires written consent
  • Credential recovery must be documented and approved

Examples

Example 1: Crack Linux Shadow Passwords

# Combine passwd and shadow files
unshadow /etc/passwd /etc/shadow > linux_hashes.txt

# Crack using wordlist
john --wordlist=/usr/share/wordlists/rockyou.txt linux_hashes.txt

# View results
john --show linux_hashes.txt

Example 2: Crack SSH Private Key Passphrase

# Extract hash from SSH key
ssh2john ~/.ssh/id_rsa > ssh_hash.txt

# Crack with dictionary attack
john --wordlist=/usr/share/wordlists/rockyou.txt ssh_hash.txt

# Expected output: password123 (id_rsa)

Example 3: Crack Password-Protected ZIP File

# Extract hash from ZIP
zip2john protected.zip > zip_hash.txt

# Crack the hash
john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt

# View cracked password
john --show zip_hash.txt

Example 4: Crack Multiple MD5 Hashes

# Create hash file with format: username:md5hash
echo "admin:5f4dcc3b5aa765d61d8327deb882cf99" > md5_hashes.txt
echo "user1:827ccb0eea8a706c4c34a16891f84e7b" >> md5_hashes.txt

# Crack with format specification
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt md5_hashes.txt

# Results: admin:password, user1:12345

Example 5: Session Management During Long Crack

# Start long-running crack
john --wordlist=/usr/share/wordlists/rockyou.txt --format=bcrypt bcrypt_hashes.txt

# Press 'q' to interrupt and save session

# Resume later
john --restore

# Check progress
john --show bcrypt_hashes.txt

Example 6: Single Crack Mode for Quick Wins

# Hash file format: username:hash
echo "administrator:0d107d09f5bbe40cade3de5c71e9e9b7" > quick.txt

# Single crack mode uses username variations
john --single --format=raw-md5 quick.txt
# Tries: administrator, ADMINISTRATOR, Administrator1, admin1strator, etc.

Troubleshooting

Issue: "No password hashes loaded"

Cause: Format mismatch or incorrect file structure
Solution:

# Verify hash format
cat hash.txt
# Specify format explicitly
john --format=raw-sha1 hash.txt
# Check supported formats
john --list=formats | grep -i sha

Issue: Session Won't Restore

Cause: Corrupted session file or different working directory
Solution:

# Check for session files
ls ~/.john/
# Remove corrupted session
rm ~/.john/john.rec
# Start fresh
john --wordlist=rockyou.txt hash.txt

Issue: *2john Utility Not Found

Cause: External utilities not installed or not in PATH
Solution:

# Locate utilities
locate *2john
find /usr -name "*2john*"
# For Python-based utilities, download from John repository
wget https://raw.githubusercontent.com/openwall/john/bleeding-jumbo/run/pdf2john.py
python pdf2john.py file.pdf > hash.txt

Issue: Cracking Too Slow

Cause: Complex hash algorithm or weak hardware
Solution:

# Use smaller targeted wordlist
john --wordlist=targeted.txt hash.txt
# Try single mode first (fastest)
john --single hash.txt
# Check if hash is bcrypt/scrypt (slow by design)
john --list=formats | grep -i bcrypt

Issue: Hash Not Cracking

Cause: Password not in wordlist or too complex
Solution:

# Try multiple wordlists
john -w=/usr/share/wordlists/rockyou.txt hash.txt
john -w=/usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt hash.txt
# Enable rules for mutations
john -w=rockyou.txt --rules hash.txt
# Use incremental for short passwords
john --incremental=digits hash.txt

Issue: ZIP/RAR Extraction Fails

Cause: Corrupted archive or unsupported encryption
Solution:

# Verify archive integrity
unzip -t file.zip
unrar t file.rar
# Try alternative extraction method
zip2john file.zip 2>&1 | head -20
# Check for AES encryption (may require different tool)