bruteforce-salted-openssl

Brute-force la passphrase d'un fichier chiffré avec `openssl enc` salé, en essayant des candidats d'une wordlist. Brute-forces the passphrase on a file encrypted with salted `openssl enc`, trying candidates from a wordlist.

↗ https://github.com/glv2/bruteforce-salted-openssl

Overview

bruteforce-salted-openssl recovers the passphrase used to encrypt a file with the openssl enc -salt command family (a common ad-hoc encryption method for CTFs and quick file protection). It reads the salted header, then tries each candidate passphrase from a wordlist through the same key-derivation and cipher settings until decryption succeeds.

Common Usage

Brute-force with a wordlist against a salted openssl-encrypted file

bruteforce-salted-openssl -f wordlist.txt secret.enc

Specify cipher/digest explicitly if known (must match how it was encrypted)

bruteforce-salted-openssl -c aes-256-cbc -d sha256 -f wordlist.txt secret.enc

Multi-threaded for speed

bruteforce-salted-openssl -f rockyou.txt -t 8 secret.enc

Typical Workflow

Step 1: Inspect the file header for salt confirmation

xxd secret.enc | head -1

→ “Salted__” magic bytes confirm openssl enc -salt format

Step 2: Run the attack

bruteforce-salted-openssl -f /usr/share/wordlists/rockyou.txt -t 8 secret.enc

Step 3: Decrypt manually once the passphrase is recovered

openssl enc -d -aes-256-cbc -pbkdf2 -in secret.enc -out secret.txt -k '<found_pass>'

Tips

  • Only works on files with the Salted__ magic header — files encrypted without -salt or with a raw key won’t match
  • Guess the cipher/digest from context if the encryption command isn’t known; wrong settings mean it will never find the match even with the right passphrase
  • Much faster than LUKS/wallet brute-forcing since OpenSSL’s KDF is comparatively cheap — use larger wordlists here
Help / Man page
Usage: bruteforce-salted-openssl [options] <encrypted_file>

Options:
  -f FILE      Wordlist file to try as passphrases
  -c CIPHER    Cipher used (default: aes-256-cbc)
  -d DIGEST    Digest used for key derivation (default: md5, try sha256)
  -t THREADS   Number of threads
  -a           Try to auto-detect base64-encoded input
  -v           Verbose, print attempts
  -h           Show help

Vue d’ensemble

bruteforce-salted-openssl récupère la passphrase utilisée pour chiffrer un fichier avec la famille de commandes openssl enc -salt (une méthode de chiffrement ad-hoc courante pour les CTF et la protection rapide de fichiers). Il lit l’en-tête salé, puis essaie chaque passphrase candidate d’une wordlist avec les mêmes réglages de dérivation de clé et de chiffrement, jusqu’à ce que le déchiffrement réussisse.

Utilisation courante

# Brute-force avec une wordlist contre un fichier openssl salé chiffré
bruteforce-salted-openssl -f wordlist.txt secret.enc

# Spécifier explicitement le cipher/digest si connu (doit correspondre au chiffrement d'origine)
bruteforce-salted-openssl -c aes-256-cbc -d sha256 -f wordlist.txt secret.enc

# Multi-threadé pour la vitesse
bruteforce-salted-openssl -f rockyou.txt -t 8 secret.enc

Workflow typique

# Étape 1 : inspecter l'en-tête du fichier pour confirmer le salt
xxd secret.enc | head -1
# → Les octets magic "Salted__" confirment le format openssl enc -salt

# Étape 2 : lancer l'attaque
bruteforce-salted-openssl -f /usr/share/wordlists/rockyou.txt -t 8 secret.enc

# Étape 3 : déchiffrer manuellement une fois la passphrase récupérée
openssl enc -d -aes-256-cbc -pbkdf2 -in secret.enc -out secret.txt -k '<found_pass>'

Conseils

  • Ne fonctionne que sur les fichiers avec l’en-tête magic Salted__ : les fichiers chiffrés sans -salt ou avec une clé brute ne correspondront pas
  • Devinez le cipher/digest d’après le contexte si la commande de chiffrement est inconnue ; de mauvais réglages font qu’il ne trouvera jamais la correspondance, même avec la bonne passphrase
  • Bien plus rapide que le brute-force de LUKS/wallet, car la KDF d’OpenSSL est comparativement peu coûteuse : utilisez de plus grandes wordlists ici
Aide / Page de manuel
Usage: bruteforce-salted-openssl [options] <encrypted_file>

Options:
  -f FILE      Wordlist file to try as passphrases
  -c CIPHER    Cipher used (default: aes-256-cbc)
  -d DIGEST    Digest used for key derivation (default: md5, try sha256)
  -t THREADS   Number of threads
  -a           Try to auto-detect base64-encoded input
  -v           Verbose, print attempts
  -h           Show help