⚠️ AVIS JURIDIQUE — Tests de sécurité autorisés UNIQUEMENT.
L'utilisation de cet outil contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite est illégale en vertu du Computer Fraud and Abuse Act (États-Unis), du Computer Misuse Act (Royaume-Uni) et des lois équivalentes dans le monde entier. Voir SECURITY.md.
Table des matières
Qu'est-ce que CredAttack ?
CredAttack est une suite de tests d'identifiants modulaire et de qualité production pour les engagements de tests d'intrusion autorisés. Elle couvre l'ensemble du cycle de vie d'une attaque d'identifiants :
| Phase | Capacité de CredAttack |
|---|
Modes d'attaque
Protocoles pris en charge
Architecture
credattack.py ← shim léger : `python credattack.py ...` depuis un checkout
│
├── credattack/cli.py ← CLI (Typer) — 8 sous-commandes de modes d'attaque ; également le
│ script console `credattack` lorsqu'il est installé via pip
├── credattack/core/
│ ├── config.py ← Paramètres Pydantic v2, remplacements par variables d'environnement CREDATTACK_*
│ ├── engine.py ← AttackEngine (ThreadPoolExecutor + interface de progression Rich)
│ ├── lockout.py ← LockoutDetector (fenêtre glissante, thread-safe)
│ ├── proxy.py ← ProxyRotator (round-robin, vérification de santé, rétrogradation)
│ ├── mutator.py ← PasswordMutator (leet, saisonnier, suffixe, déplacement clavier…)
│ ├── result.py ← Classes de données AttemptResult + SessionReport
│ ├── report.py ← Générateur de rapports HTML Jinja2
│ └── logger.py ← Journalisation Rich + rédacteur de journal d'audit JSONL
│
├── credattack/protocols/
│ └── *.py ← 18 implémentations ProtocolAttacker
│
├── credattack/data/
│ ├── default_creds.json ← 200+ paires d'identifiants par défaut réels
│ ├── smart_patterns.json ← 140+ modèles de mots de passe d'entreprise
│ └── wordlists/ ← Listes de mots de passe par défaut par service
│
└── tests/ ← 50+ tests pytest (unitaires + simulations de protocoles)
Démarrage rapide
# Cloner et configurer
git clone https://github.com/amibhai/credential-attacks-toolkit.git
cd credential-attacks-toolkit
python -m venv .venv && source .venv/bin/activate # Windows : .venv\Scripts\activate
pip install -r requirements.txt
# Vérifier la version
python credattack.py --version
# Essai à blanc (aucune connexion établie — vérifiez vos listes de mots)
python credattack.py ssh -t 192.168.1.100 -u admin -P wordlists/common_passwords.txt --dry-run
# Attaque par dictionnaire SSH réelle
python credattack.py ssh -t 192.168.1.100 -u admin -P /path/to/rockyou.txt
# Pulvérisation de mots de passe (limitée en débit, sans risque de verrouillage)
python credattack.py spray -t 192.168.1.100 --protocol ssh -U users.txt -p "Summer2024!" --delay 30
# Mode intelligent — générer des motifs à partir du nom d'utilisateur + de l'entreprise
python credattack.py smart -t 192.168.1.100 --protocol ssh -u john.doe --company ACME
# Essayer les défauts de service
python credattack.py defaults -t 192.168.1.100 --protocol mysql
# Campagne multi-cible
python credattack.py multi --targets hosts.txt --protocol ssh -U users.txt -P passes.txt
Installation
Option A — pip + virtualenv (recommandé)
python -m venv .venv
source .venv/bin/activate # Windows : .venv\Scripts\activate
pip install --upgrade pip
pip install -r requirements.txt
Option B — Raccourcis Makefile
make install # dépendances de base
make install-dev # + pytest-cov, ruff, mypy
Option C — Installation pip (éditable ou depuis une roue)
pip install -e . # dépendances de base uniquement
pip install -e .[full] # + SMB/RDP/MySQL/MSSQL/Redis/MongoDB/WinRM/LDAP
pip install -e .[dev] # + pytest/ruff/mypy
credattack --version # script console, équivalent à `python credattack.py`
Option D — Docker
docker build -t credattack -f docker/Dockerfile .
docker run --rm credattack --help
# Monter vos listes de mots et collecter la sortie
docker run --rm \
-v $(pwd)/wordlists:/app/wordlists:ro \
-v $(pwd)/output:/app/output \
credattack ssh -t 192.168.1.100 -u admin -P wordlists/common_passwords.txt
Référence CLI
Options globales
python credattack.py [OPTIONS] COMMAND [ARGS]...
Options:
-V, --version Afficher la version et quitter.
--help Afficher l'aide.
Indicateurs courants (disponibles sur toutes les commandes de protocole)
Sous-commandes
# Spécifiques au protocole (chacune correspond à un attaquant dédié)
python credattack.py ssh|ftp|smb|rdp|smtp|pop3|imap|mysql|mssql|redis|mongodb|winrm|ldap|telnet|vnc \
-t HOST -u USER -P passes.txt
# HTTP (formulaire / basic / digest)
python credattack.py http -t http://target/login --mode form \
--form-user-field username --form-pass-field password --success-string "Dashboard"
# Spray — un seul mot de passe, de nombreux utilisateurs, délai long
python credattack.py spray -t HOST --protocol ssh -U users.txt -p "Password1" --delay 30
# Combo — produit cartésien utilisateurs × mots de passe
python credattack.py combo -t HOST --protocol smb -U users.txt -P passes.txt
# Smart — génération dérivée de l'OSINT
python credattack.py smart -t HOST --protocol ssh -u firstname.lastname --company TargetCorp
# Defaults — essayer les identifiants par défaut du fournisseur
python credattack.py defaults -t HOST --protocol mysql
# Multi — même attaque sur plusieurs hôtes
python credattack.py multi --targets hosts.txt --protocol ssh -U users.txt -P passes.txt
# Full — tous les protocoles en séquence
python credattack.py full -t HOST -U users.txt -P passes.txt
Moteur de mutation de mots de passe
PasswordMutator dans credattack/core/mutator.py prend en charge des stratégies composables :
from credattack.core.mutator import PasswordMutator
m = PasswordMutator(max_mutations=5000)
# Toutes les stratégies combinées
for pw in m.smart_generate("john.doe", company="ACME"):
print(pw)
# Uniquement les motifs saisonniers
for pw in m.seasonal_patterns(company="Contoso"):
print(pw)
Base de données d'identifiants par défaut
credattack/data/default_creds.json contient 200+ paires d'identifiants par défaut réels réparties sur :
Cisco · F5 · Juniper · Palo Alto · VMware · Jenkins · GitLab · Tomcat · WordPress · MySQL · MSSQL · Redis · MongoDB · PostgreSQL · Elasticsearch · RabbitMQ · Splunk · Nagios · Zabbix · pfSense · MikroTik · Huawei · HP iLO · Dell iDRAC · IPMI
# Voir tous les défauts d'un service
python credattack.py defaults -t HOST --protocol mysql --dry-run
# Exécuter contre la cible
python credattack.py defaults -t 10.0.0.1 --protocol ssh
Rotation de proxys
Passez un fichier de proxys (un proxy par ligne, format host:port) :
# proxies.txt
192.168.1.10:1080
192.168.1.11:1080
socks5://10.0.0.5:9050
python credattack.py ssh -t TARGET -u admin -P passes.txt --proxy-file proxies.txt
Le ProxyRotator effectue des vérifications de santé au démarrage et rétrograde les proxys qui dépassent un seuil de taux d'échec. Les proxys morts sont automatiquement exclus.
Rapports HTML
Après chaque attaque hors essai à blanc, un rapport HTML est automatiquement généré dans ./output/ :
- Cartes statistiques : tentatives totales, taux de réussite, durée, tentatives/seconde
- Tableau des identifiants trouvés : hôte · protocole · nom d'utilisateur · mot de passe (copie dans le presse-papiers)
- Modèle à thème sombre Jinja2
# Ouvrir après une exécution
start output/report_*.html # Windows
open output/report_*.html # macOS
Configuration et variables d'environnement
Tous les paramètres de credattack/core/config.py peuvent être remplacés via les variables d'environnement CREDATTACK_* :
export CREDATTACK_THREADS=20
export CREDATTACK_TIMEOUT=3.0
export CREDATTACK_DELAY=1.0
export CREDATTACK_JITTER=0.5
export CREDATTACK_LOCKOUT_THRESHOLD=3
export CREDATTACK_VERBOSITY=2
Ou au niveau de la CLI avec les indicateurs standard (--threads, --timeout, etc.).
Docker
# Construire l'image
docker build -t credattack -f docker/Dockerfile .
# Exécuter avec Docker Compose
cd docker
docker compose run credattack ssh -t 192.168.1.100 -u admin -P /app/wordlists/common_passwords.txt
# Définir la configuration via l'environnement
docker run --rm \
-e CREDATTACK_THREADS=20 \
-e CREDATTACK_TIMEOUT=3 \
-v $(pwd)/output:/app/output \
credattack defaults -t 10.0.0.1 --protocol mysql
Tests
# Exécuter tous les tests
pytest -q
# Avec couverture
pytest --cov=credattack --cov-report=term-missing -q
# Raccourci Makefile
make test-cov
Suite actuelle : 50+ tests couvrant :
Listes de mots
⚠️ Les fichiers wordlists/ inclus sont des stubs minimaux de test de fumée. Fournissez les vôtres pour des évaluations réelles.
Sources recommandées
# Utiliser n'importe quelle liste de mots externe
python credattack.py ssh -t TARGET -u admin -P /opt/wordlists/rockyou.txt
Structure du projet
credential-attacks-toolkit/
├── credattack.py # Shim léger -> credattack.cli:app (utilisation depuis le checkout source)
├── pyproject.toml # Configuration de build et d'outils PEP 517/518
├── requirements.txt # Dépendances d'exécution
├── Makefile # Raccourcis développeur
├── VERSION # Source unique de vérité de version
├── CHANGELOG.md
├── SECURITY.md
├── .github/
│ └── workflows/ci.yml # GitHub Actions : lint + matrice de tests + mypy
├── docker/
│ ├── Dockerfile
│ └── docker-compose.yml
├── credattack/
│ ├── cli.py # CLI (Typer) — empaquetée, alimente le script console
│ ├── core/
│ │ ├── config.py # Paramètres Pydantic v2
│ │ ├── engine.py # AttackEngine (ThreadPoolExecutor)
│ │ ├── lockout.py # LockoutDetector (fenêtre glissante)
│ │ ├── proxy.py # ProxyRotator
│ │ ├── mutator.py # PasswordMutator
│ │ ├── result.py # AttemptResult, SessionReport
│ │ ├── report.py # Générateur de rapports HTML
│ │ └── logger.py # Journalisation Rich + rédacteur JSONL
│ ├── protocols/ # 18 implémentations ProtocolAttacker
│ │ └── base.py # ProtocolAttacker abstrait
│ └── data/
│ ├── default_creds.json # 200+ défauts de fournisseurs
│ ├── smart_patterns.json # 140+ modèles d'entreprise
│ └── wordlists/ # Listes de démarrage par service
├── attacks/ # Outils autonomes à fichier unique (antérieurs à credattack/ ;
│ └── *.py # conservés pour les scripts non encore portés : craquage JWT,
│ # détection WAF, énumération d'utilisateurs basée sur le timing)
├── utils/
│ └── credential_utils.py # Aides partagées pour les scripts attacks/
├── tests/
│ ├── conftest.py # Fixtures partagées
│ ├── test_lockout.py
│ ├── test_mutator.py
│ ├── test_mutator_extended.py
│ ├── test_proxy.py
│ ├── test_result.py
│ ├── test_protocols_ssh.py
│ ├── test_protocols_ftp.py
│ └── test_protocols_http.py
├── wordlists/ # Stubs minimaux de test de fumée
└── output/ # Journaux et rapports générés (ignorés par git)
Taux de réussite des attaques (indicatifs)
Contribution
Voir CONTRIBUTING.md.
Veuillez ouvrir un ticket avant de soumettre de grandes demandes de tirage (PR).
Toutes les contributions doivent respecter la politique d'utilisation éthique de SECURITY.md.
Utilisez de manière responsable. Testez de manière éthique. Restez légal.