01 Cryptographie & Cracking de Hashs
14 ressourcesIdentifier les méthodes de chiffrement inconnues, casser des empreintes par dictionnaire ou GPU, et automatiser la cryptanalyse.
Le « couteau suisse » universel du GCHQ. Permet de convertir (Base64, Hex), décrypter, manipuler des flux binaires et chaîner des opérations complexes.
Plateforme majeure de cryptanalyse. Décrypte automatiquement les chiffres historiques, stéganographies textuelles et chiffrements par substitution.
Identificateur d'empreintes précis (MD5, SHA, NTLM, bcrypt) avec vérification instantanée dans leur base mondiale de hashs déjà résolus.
Outil CLI moderne (nth) qui identifie les hashs obscurs et renvoie directement le code de mode exact pour Hashcat et John the Ripper.
Le cracker de mots de passe le plus rapide au monde. Exploit la puissance hautement parallèle des cartes graphiques (CUDA/OpenCL/Metal).
Cracker de mots de passe polyvalent réputé pour ses utilitaires d'extraction de condensats : zip2john, ssh2john, pdf2john, keepass2john.
Bases de données précalculées en ligne pour retrouver instantanément la chaîne en clair d'un hash MD5, SHA-1 ou SHA-256 sans calcul GPU local.
Tables arc-en-ciel en ligne dédiées au cassage instantané des empreintes LAN Manager (LM/NTLM) fréquentes dans les environnements Windows historiques.
Déchiffreur entièrement automatisé par traitement du langage naturel : résout les encodages et chiffrements inconnus en quelques secondes sans clé fournie.
FactorDB recense les décompositions en facteurs premiers de grands entiers RSA. RsaCtfTool automatise les attaques Wiener, Hastad, Fermat et petits exposants e.
Dissimule un texte chiffré au sein d'un texte rédigé en anglais d'apparence grammaticalement naturelle pour masquer l'existence même du message.
Les wordlists de référence en CTF : rockyou.txt (14 millions de mots) et les dictionnaires optimisés de weakpass.com et SecLists.
Mémo pratique : Déchiffrer un hash avec Hashcat
Méthodologie pas à pas pour attaquer une empreinte lors d'un challenge :
- Identifier le mode (-m) : Consultez la liste Hashcat Example Hashes ou lancez
nth -t <hash>. Par exemple : MD5 =0, SHA-1 =100, SHA-256 =1400, NTLM =1000. - Préparer la commande : Spécifiez le type d'attaque (
-a 0pour une attaque par dictionnaire), le numéro de mode (-m 0), le hash cible et le chemin de votre wordlist (ex:rockyou.txt). - Option pilote (--force) : Ajoutez le paramètre
--forcesi vous travaillez sur une machine virtuelle ou un pilote OpenCL sans certification officielle.
# Attaque du hash MD5 eb61eead90e3b899c6bcbe27ac581660 avec la wordlist rockyou
hashcat -a 0 -m 0 eb61eead90e3b899c6bcbe27ac581660 wordlists/rockyou.txt --force
# Résultat retourné :
# eb61eead90e3b899c6bcbe27ac581660:HELLO
Script Python : Résolution automatisée de challenges TCP en direct
Dans les épreuves de rapidité réseau (type NoBracketsCTF), le serveur impose de résoudre un hash SHA-256 en moins d'une seconde. Ce script se connecte au socket TCP, extrait le condensat à la volée, calcule le SHA-256 des mots de la wordlist et valide l'épreuve.
import hashlib
import socket
HOST = "challenges.nobrackets.fr"
PORT = 10301
def load_wordlist(file_path: str) -> list[str]:
"""Charge les mots de passe d'une wordlist (ex: rockyou.txt ou liste ciblée)."""
with open(file_path, "r", encoding="latin-1") as f:
return [line.strip() for line in f]
def crack_sha256(target_hash: str, wordlist: list[str]) -> str | None:
"""Calcule le hash SHA-256 de chaque entrée jusqu'à trouver la correspondance."""
for word in wordlist:
if hashlib.sha256(word.encode("utf-8")).hexdigest() == target_hash:
return word
return None
def solve_challenge(wordlist: list[str]) -> None:
"""Ouvre le socket TCP, intercepte le challenge et envoie la solution."""
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
print(f"[*] Connecté à {HOST}:{PORT}")
while True:
response = s.recv(4096).decode(errors="replace")
print(response, end="")
if "Hash #" in response:
# Format attendu du serveur : "Hash #1: "
hash_value = response.split("Hash #")[1].split(":")[1].strip()
cracked = crack_sha256(hash_value, wordlist)
if cracked:
print(f"\n[+] Mot de passe identifié : {cracked}")
s.sendall(cracked.encode("utf-8") + b"\n")
else:
print("\n[-] Mot de passe absent de la wordlist fournie.")
break
if "Bravo" in response or "Flag" in response:
print("\n[✓] Challenge validé avec succès !")
break
if __name__ == "__main__":
words = load_wordlist("wordlist.txt")
solve_challenge(words)