dotfiles/scripts/pentesting/crack
rpriven 5b6af65def
Organize scripts and clean up dotfiles
Changes:
- Added 80+ scripts with organized structure
  - payloads/ for third-party pentesting tools
  - pentesting/ for custom security scripts
  - Daily drivers remain flat for fast access
- Converted wes() function to proper script
- Removed .sh extensions from pentesting scripts
- Cleaned up aliases (removed 31 redundant lines)
- Added kanata/, build artifacts to gitignore
- Removed old fre.sh scripts and empty a.out
- Updated configs: helix, tmux, zsh, ulauncher, redshift

Security: All sensitive data excluded via gitignore
2025-11-07 14:48:21 -07:00

274 lines
7.2 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
# Script Name: crack
# Description: Hash cracking helper (john/hashcat wrapper)
# Usage: crack <hashfile> # Auto-detect and crack
# crack <hashfile> -w wordlist # Specify wordlist
# crack <hashfile> -m md5 # Specify hash type
# crack identify <hash> # Identify hash type
VERSION="1.0.0"
# Colors
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly CYAN='\033[0;36m'
readonly MAGENTA='\033[0;35m'
readonly BOLD='\033[1m'
readonly NC='\033[0m'
show_help() {
echo -e "${BOLD}crack${NC} - Hash Cracking Helper v${VERSION}"
echo
echo -e "${BOLD}USAGE:${NC}"
echo " crack <hashfile> [OPTIONS]"
echo " crack identify <hash>"
echo
echo -e "${BOLD}COMMANDS:${NC}"
echo -e " ${CYAN}crack <file>${NC} Crack hashes in file"
echo -e " ${CYAN}identify <hash>${NC} Identify hash type"
echo -e " ${CYAN}show <file>${NC} Show cracked passwords"
echo
echo -e "${BOLD}OPTIONS:${NC}"
echo -e " ${CYAN}-w, --wordlist FILE${NC} Specify wordlist"
echo -e " ${CYAN}-m, --mode TYPE${NC} Hash type (md5, sha1, sha256, ntlm, etc.)"
echo -e " ${CYAN}-r, --rules${NC} Apply John rules"
echo -e " ${CYAN}-f, --format${NC} John format string"
echo -e " ${CYAN}-h, --help${NC} Show this help"
echo
echo -e "${BOLD}EXAMPLES:${NC}"
echo " crack hashes.txt # Auto crack with default wordlist"
echo " crack hashes.txt -w rockyou.txt # Use specific wordlist"
echo " crack hashes.txt -m md5 # Specify MD5 hashes"
echo " crack identify 5f4dcc3b5aa765d61d8327deb882cf99"
echo " crack show hashes.txt # Show cracked results"
echo
echo -e "${BOLD}COMMON HASH TYPES:${NC}"
echo " md5, sha1, sha256, sha512"
echo " ntlm, mssql, mysql"
echo " bcrypt, des, raw-md5"
echo
echo -e "${BOLD}INSTALLED TOOLS:${NC}"
command -v john &>/dev/null && echo -e " ${GREEN}${NC} john (John the Ripper)" || echo -e " ${RED}${NC} john (install: sudo apt install john)"
command -v hashcat &>/dev/null && echo -e " ${GREEN}${NC} hashcat" || echo -e " ${RED}${NC} hashcat (install: sudo apt install hashcat)"
command -v hashid &>/dev/null && echo -e " ${GREEN}${NC} hashid (hash identifier)" || echo -e " ${RED}${NC} hashid (install: pip install hashid)"
}
# Detect available tools
get_cracker() {
if command -v john &>/dev/null; then
echo "john"
elif command -v hashcat &>/dev/null; then
echo "hashcat"
else
echo -e "${RED}Error:${NC} No hash cracker found" >&2
echo "Install one: sudo apt install john hashcat" >&2
exit 1
fi
}
# Identify hash type
identify_hash() {
local hash="$1"
echo -e "${CYAN}[*]${NC} Identifying hash: ${BOLD}$hash${NC}"
echo
if command -v hashid &>/dev/null; then
hashid "$hash"
else
# Manual identification based on length
local len=${#hash}
echo -e "${YELLOW}Hash Identification:${NC}"
case "$len" in
32)
echo " Possible: MD5, NTLM"
echo " John format: --format=raw-md5 or --format=nt"
echo " Hashcat mode: -m 0 (MD5) or -m 1000 (NTLM)"
;;
40)
echo " Possible: SHA1"
echo " John format: --format=raw-sha1"
echo " Hashcat mode: -m 100"
;;
64)
echo " Possible: SHA256, SHA3-256"
echo " John format: --format=raw-sha256"
echo " Hashcat mode: -m 1400"
;;
128)
echo " Possible: SHA512"
echo " John format: --format=raw-sha512"
echo " Hashcat mode: -m 1700"
;;
60)
if [[ "$hash" =~ ^\$2[ayb]\$ ]]; then
echo " Identified: bcrypt"
echo " John format: --format=bcrypt"
echo " Hashcat mode: -m 3200"
fi
;;
*)
echo " Unknown hash type (length: $len)"
echo " Try: hashid '$hash'"
;;
esac
fi
}
# Find common wordlists
find_wordlist() {
local wordlists=(
"/usr/share/wordlists/rockyou.txt"
"/usr/share/wordlists/rockyou.txt.gz"
"/usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt"
"/usr/share/dict/words"
)
for wordlist in "${wordlists[@]}"; do
if [[ -f "$wordlist" ]]; then
echo "$wordlist"
return 0
fi
done
echo ""
}
# Crack with John the Ripper
crack_john() {
local hashfile="$1"
local format="${2:-}"
local wordlist="${3:-}"
local rules="${4:-false}"
echo -e "${CYAN}[*]${NC} Using John the Ripper"
echo -e "${CYAN}[*]${NC} Hash file: $hashfile"
local john_args=""
if [[ -n "$format" ]]; then
john_args="$john_args --format=$format"
echo -e "${CYAN}[*]${NC} Format: $format"
fi
if [[ -n "$wordlist" ]]; then
if [[ "$wordlist" == *.gz ]]; then
echo -e "${CYAN}[*]${NC} Wordlist: $wordlist (gzipped)"
john_args="$john_args --wordlist=<(zcat $wordlist)"
else
echo -e "${CYAN}[*]${NC} Wordlist: $wordlist"
john_args="$john_args --wordlist=$wordlist"
fi
else
auto_wordlist=$(find_wordlist)
if [[ -n "$auto_wordlist" ]]; then
echo -e "${CYAN}[*]${NC} Using default wordlist: $auto_wordlist"
john_args="$john_args --wordlist=$auto_wordlist"
fi
fi
if [[ "$rules" == "true" ]]; then
john_args="$john_args --rules"
echo -e "${CYAN}[*]${NC} Rules: enabled"
fi
echo
echo -e "${GREEN}[*]${NC} Starting crack..."
echo
john $john_args "$hashfile"
}
# Show cracked passwords
show_cracked() {
local hashfile="$1"
echo -e "${CYAN}[*]${NC} Cracked passwords for: ${BOLD}$hashfile${NC}"
echo
if command -v john &>/dev/null; then
john --show "$hashfile"
else
echo -e "${RED}Error:${NC} John not available"
exit 1
fi
}
# Parse arguments
if [[ $# -eq 0 ]] || [[ "$1" =~ ^(-h|--help|help)$ ]]; then
show_help
exit 0
fi
command="$1"
shift
case "$command" in
identify|id)
if [[ $# -lt 1 ]]; then
echo -e "${RED}Error:${NC} Usage: crack identify <hash>"
exit 1
fi
identify_hash "$1"
;;
show)
if [[ $# -lt 1 ]]; then
echo -e "${RED}Error:${NC} Usage: crack show <hashfile>"
exit 1
fi
show_cracked "$1"
;;
*)
# Assume first arg is hashfile
hashfile="$command"
if [[ ! -f "$hashfile" ]]; then
echo -e "${RED}Error:${NC} Hash file not found: $hashfile"
exit 1
fi
# Parse crack options
format=""
wordlist=""
rules=false
while [[ $# -gt 0 ]]; do
case $1 in
-w|--wordlist)
wordlist="$2"
shift 2
;;
-m|--mode|-f|--format)
format="$2"
shift 2
;;
-r|--rules)
rules=true
shift
;;
*)
echo -e "${RED}Error:${NC} Unknown option: $1"
exit 1
;;
esac
done
cracker=$(get_cracker)
case "$cracker" in
john)
crack_john "$hashfile" "$format" "$wordlist" "$rules"
;;
hashcat)
echo -e "${YELLOW}${NC} Hashcat support not yet implemented"
echo "Use John the Ripper or implement hashcat wrapper"
exit 1
;;
esac
;;
esac