Introduction
Le Red Teaming simule des attaques réelles pour tester la résilience des systèmes, mais manuellement, c'est chronophage et sujet à erreurs. En 2026, l'automatisation via Python devient indispensable : elle accélère les phases de reconnaissance, énumération, exploitation et reporting, tout en maintenant la traçabilité pour des rapports conformes (ex. NIST 800-53).
Ce tutoriel intermédiaire vous guide pour bâtir un framework RedTeamAuto, modulaire et extensible. Imaginez un orchestre : chaque script est un instrument, piloté par un chef d'orchestre central. Résultat ? Une réduction de 70% du temps d'engagement, basée sur mes 15 ans en pentest. Usage strictement légal : uniquement sur cibles autorisées (lab perso, CTF, engagements clients). On commence par les bases (recon) pour aller vers l'orchestration complexe. Prêt à scaler vos ops ?
Prérequis
- Python 3.12+ installé
- Outils : Nmap 7.95+, Gobuster 3.6+, Nuclei 3.2+, Metasploit Framework (msfconsole)
- Environnement Linux (Kali ou Ubuntu)
- Connaissances intermédiaires en Python, networking et Bash
- Cible de test : lab VulnHub ou HackTheBox (jamais en prod sans ROE)
- pip install requests colorama python-nmap nuclei-parser
Script de reconnaissance Nmap automatisé
import nmap
import sys
if len(sys.argv) != 2:
print('Usage: python recon.py <target>')
sys.exit(1)
target = sys.argv[1]
nm = nmap.PortScanner()
print(f'[*] Scan SYN sur {target}...')
nm.scan(target, '1-1000', arguments='-sS -sV --top-ports 100')
for host in nm.all_hosts():
print(f'Host: {host} ({nm[host].hostname()} )')
print(f'State: {nm[host].state()}')
for proto in nm[host].all_protocols():
ports = nm[host][proto].keys()
for port in sorted(ports):
state = nm[host][proto][port]['state']
service = nm[host][proto][port]['name']
print(f' Port: {port}\tState: {state}\tService: {service}')
print('[+] Recon terminée. Résultats prêts pour l\'étape suivante.')Ce script lance un scan SYN rapide sur les top 100 ports avec détection de version, idéal pour la phase de recon initiale. Il parse les résultats Nmap en Python pour une sortie structurée. Piège : toujours limiter les ports (--top-ports) pour éviter les timeouts ; testez sur 10.10.10.10 pour valider.
Phase 1 : Comprendre la reconnaissance
La reconnaissance est le socle : 80% des failles se découvrent ici. Notre script recon.py utilise python-nmap comme wrapper, plus fiable que subprocess pour le parsing. Analogie : c'est votre télescope pointé sur l'étoile cible. Exécutez-le avec python recon.py 192.168.1.1 et pipez la sortie vers un fichier pour chaining.
Énumération de répertoires avec Gobuster
import subprocess
import sys
import json
from colorama import init, Fore
init()
if len(sys.argv) != 3:
print('Usage: python enum_dirs.py <target> <wordlist>')
sys.exit(1)
target = sys.argv[1]
wordlist = sys.argv[2]
print(f'{Fore.CYAN}[*] Énumération dirs sur {target} avec {wordlist}{Fore.RESET}')
cmd = ['gobuster', 'dir', '-u', f'http://{target}', '-w', wordlist, '-t', '50', '-q', '--no-error']
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
print(f'{Fore.GREEN}[+] Dirs trouvés:{Fore.RESET}')
for line in result.stdout.split('\n'):
if '/ (Status: 200)' in line:
print(f' {line.strip()}')
with open('dirs.json', 'w') as f:
json.dump({'target': target, 'dirs': result.stdout}, f)
print(f'{Fore.GREEN}[+] Sauvegardé dans dirs.json{Fore.RESET}')
else:
print(f'{Fore.RED}[-] Erreur Gobuster: {result.stderr}{Fore.RESET}')Ce wrapper Python appelle Gobuster pour énumérer les répertoires web, avec sortie colorée et JSON pour intégration. Utilisez SecLists comme wordlist. Piège : -t 50 threads max pour éviter les bans ; chain avec recon.py pour cibler les ports 80/443.
Phase 2 : Énumération des assets web
Gobuster excelle pour brute-force dirs sans alerter les WAF basiques. Le script capture les 200 OK en JSON, prêt pour Nuclei. Exemple concret : sur DVWA (VulnHub), il liste /admin/, /vulnerabilities/ en <30s. Toujours logger pour audit.
Scanning de vulnérabilités avec Nuclei
import subprocess
import sys
import json
from colorama import init, Fore
init()
if len(sys.argv) != 2:
print('Usage: python vuln_scan.py <target>')
sys.exit(1)
target = sys.argv[1]
print(f'{Fore.CYAN}[*] Scan Nuclei sur {target}{Fore.RESET}')
cmd = ['nuclei', '-u', f'http://{target}', '-t', '/path/to/nuclei-templates/', '-o', 'vulns.txt', '-silent']
result = subprocess.run(cmd, capture_output=True, text=True)
with open('vulns.json', 'w') as f:
vulns = []
for line in result.stdout.split('\n'):
if '[medium]' in line or '[high]' in line or '[critical]' in line:
vulns.append(line.strip())
json.dump({'target': target, 'vulnerabilities': vulns}, f)
print(f'{Fore.YELLOW}[+] Vulns sauvées dans vulns.json{Fore.RESET}')
print('[+] Exemples typiques: Heartbleed, Log4Shell si templates à jour.')Intègre Nuclei pour scanner 5000+ templates CVE. Parse sévérité et export JSON. Piège : templates à jour via nuclei -update-templates ; testez sur Juice Shop pour faux positifs. Limitez à -severity medium+ pour focus.
Phase 3 : Détection des vulnérabilités
Nuclei est comme un radar multi-fréquences : templates YAML communautaires couvrent 0-days récents. Notre script filtre medium+ pour prioriser. Exemple : sur Metasploitable, détecte EternalBlue en 10s. Intégrez à un DAG Airflow pour scaling.
Lancement d'exploit Metasploit automatisé
import subprocess
import sys
import time
from colorama import init, Fore
init()
if len(sys.argv) != 2:
print('Usage: python exploit_msf.py <msf_module>')
sys.exit(1)
module = sys.argv[1] # ex: exploit/multi/http/struts_code_exec
target = input('Target IP: ')
print(f'{Fore.CYAN}[*] Chargement {module} sur {target}{Fore.RESET}')
msf_cmd = f"""
use {module}
set RHOSTS {target}
set LHOST 0.0.0.0
exploit -j
sessions -K
"""
with open('msf.rc', 'w') as f:
f.write(msf_cmd)
subprocess.run(['msfconsole', '-r', 'msf.rc', '-q'])
print(f'{Fore.GREEN}[+] Session Metasploit close. Logs dans msfconsole.out{Fore.RESET}')Génère un fichier .rc pour msfconsole, lance exploit en background et tue sessions. Idéal pour chaining post-recon. Piège : LHOST dynamique ; testez localement sur lab. Éthique only : ROE obligatoire.
Phase 4 : Exploitation contrôlée
Metasploit reste roi pour exploits fiables. Le script automatise via resource scripts, évitant CLI manuelle. Analogie : pilote automatique pour avion. Sur ParrotOS lab, exploit Samba en 1 clic. Toujours post-exploitation : hashdump, persistence.
Orchestrateur central RedTeamAuto
#!/usr/bin/env python3
import subprocess
import sys
import json
from pathlib import Path
TARGET = sys.argv[1] if len(sys.argv) > 1 else '127.0.0.1'
WORDLIST = '/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt'
print('[*] Démarrage RedTeamAuto sur', TARGET)
# Étape 1: Recon
subprocess.run(['python3', 'recon.py', TARGET])
# Étape 2: Enum si port 80/443 ouvert (simplifié)
subprocess.run(['python3', 'enum_dirs.py', TARGET, WORDLIST])
# Étape 3: Vuln scan
subprocess.run(['python3', 'vuln_scan.py', TARGET])
# Étape 4: Reporting
report = {
'target': TARGET,
'timestamp': '2026',
'phases': ['recon', 'enum', 'vuln']
}
with open('redteam_report.json', 'w') as f:
json.dump(report, f, indent=2)
print('[+] Rapport généré: redteam_report.json')
print('[*] Workflow terminé. Prêt pour manuel review.')Orchestrateur séquentiel chainant tous scripts. Extensible via argparse. Piège : gérer erreurs avec try/except en prod ; exécutez python redteam_auto.py 10.10.10.10 pour test full.
Phase 5 : Orchestration complète
L'orchestrateur est le cœur : comme un Makefile boosté Python. Il s'exécute en <5min sur lab standard, génère JSON unifié. Ajoutez Celery pour parallélisme en 2026.
Générateur de rapport HTML
import json
import sys
from jinja2 import Template
with open('redteam_report.json', 'r') as f:
data = json.load(f)
html_template = """
<!DOCTYPE html>
<html>
<head><title>RedTeam Report {{ data.target }}</title></head>
<body>
<h1>Report {{ data.timestamp }} - {{ data.target }}</h1>
<ul>
{% for phase in data.phases %}<li>{{ phase }}</li>{% endfor %}</ul>
</body>
</html>
"""
t = Template(html_template)
html = t.render(data=data)
with open('report.html', 'w') as f:
f.write(html)
print('[+] Rapport HTML généré: report.html')
from subprocess import run
run(['firefox', 'report.html'])Utilise Jinja2 pour templating pro (pip install jinja2). Convertit JSON en HTML cliquable. Piège : escape inputs ; ouvrez dans browser pour démo client.
Bonnes pratiques
- Toujours ROE first : Documentez règles d'engagement avant run.
- Modularité : Chaque script = une phase, facile à tester/debug.
- Logging exhaustif : Ajoutez logging module pour traces forensiques.
- Stealth : Rate-limit scans (ex. nmap --scan-delay), utilisez Tor/Proxies.
- CI/CD : Intégrez à GitHub Actions pour lab auto.
Erreurs courantes à éviter
- Scanner sans autorisation : Risque légal massif, utilisez labs only.
- Ignorer les faux positifs : Toujours valider Nuclei manuellement.
- Pas de cleanup : Tuez sessions MSF, supprimez artifacts post-test.
- Oublier les dépendances : Dockerfile pour env reproductible.
Pour aller plus loin
Maîtrisez Atomic Red Team pour TTPs MITRE. Intégrez Empire/Covenant pour C2 auto. Ressources : MITRE ATT&CK, Nuclei Templates.
Découvrez nos formations Learni en Red Teaming avancé pour certifs OSCP/OSCE.