Skip to content
Learni
View all tutorials
Cybersécurité

Comment automatiser le Red Teaming en 2026

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é

recon.py
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

enum_dirs.py
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

vuln_scan.py
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é

exploit_msf.py
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

redteam_auto.py
#!/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

report_gen.py
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.

Comment automatiser Red Teaming 2026 (Guide complet) | Learni