Introduction
L'automatisation Red Team permet d'exécuter des campagnes offensives de manière reproductible et scalable. En 2026, face à la complexité des environnements cloud et zero-trust, les équipes doivent réduire le temps de reconnaissance et d'exploitation. Ce tutoriel vous guide à travers la création de scripts Python et Bash pour automatiser les phases clés d'une opération Red Team. Vous apprendrez à orchestrer des outils tout en maintenant un contrôle humain sur les décisions critiques. Chaque section inclut du code fonctionnel prêt à l'emploi.
Prérequis
- Python 3.11+
- Kali Linux ou distribution équivalente
- Connaissances de base en réseaux et exploitation
- Outils : nmap, netcat installés
- Accès à un environnement de lab (VM isolée)
Installation des dépendances
#!/bin/bash
pip install requests python-nmap colorama
apt update && apt install -y nmap netcat-traditionalCe script installe les bibliothèques Python nécessaires et les outils système. Exécutez-le avec sudo pour les paquets système. Il évite les erreurs de dépendances lors des étapes suivantes.
Automatisation de la reconnaissance
La phase de reconnaissance est la plus chronophage. Nous allons créer un script qui scanne automatiquement une plage d'IP et extrait les ports ouverts.
Script de reconnaissance automatisée
import nmap
import json
def automated_recon(target):
nm = nmap.PortScanner()
nm.scan(target, '1-1024', arguments='-sV -T4')
results = {}
for host in nm.all_hosts():
results[host] = nm[host]['tcp']
with open('recon_results.json', 'w') as f:
json.dump(results, f, indent=2)
return results
if __name__ == "__main__":
automated_recon('192.168.1.0/24')Ce script utilise python-nmap pour scanner et sauvegarder les résultats en JSON. Il est fonctionnel et peut être étendu avec des filtres sur les services critiques.
Automatisation d'exploitation basique
import subprocess
import sys
def run_exploit(target, port):
cmd = ['nc', '-nv', target, str(port)]
try:
result = subprocess.run(cmd, capture_output=True, timeout=5, text=True)
print(result.stdout)
except subprocess.TimeoutExpired:
print("Connexion timed out")
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: python exploit.py <ip> <port>")
sys.exit(1)
run_exploit(sys.argv[1], int(sys.argv[2]))Script simple utilisant netcat pour tester des connexions. Il gère les timeouts et peut servir de base pour des payloads plus avancés.
Orchestration et reporting
Combinez les scripts précédents dans un pipeline. Le reporting automatique génère un résumé clair pour les livrables clients.
Script de reporting automatisé
import json
from datetime import datetime
def generate_report():
with open('recon_results.json') as f:
data = json.load(f)
report = f"Red Team Report - {datetime.now()}\n"
for host, ports in data.items():
report += f"Host: {host}\nOpen ports: {list(ports.keys())}\n"
with open('report.txt', 'w') as f:
f.write(report)
print("Report generated: report.txt")
if __name__ == "__main__":
generate_report()Ce script lit les résultats JSON et produit un rapport texte simple et daté. Il est facilement adaptable en HTML ou Markdown.
Configuration pipeline complet
#!/bin/bash
python3 recon.py
python3 exploit.py 192.168.1.10 22
python3 report.pyPipeline Bash qui enchaîne les trois scripts Python. Rendez-le exécutable avec chmod +x et adaptez les IPs cibles selon votre lab.
Bonnes pratiques
- Toujours isoler les scripts dans un environnement de lab
- Utiliser des timeouts et gestion d'erreurs robustes
- Logger chaque action pour traçabilité
- Ne jamais exécuter sur des systèmes de production sans autorisation
- Versionner vos scripts avec Git
Erreurs courantes à éviter
- Oublier la gestion des exceptions réseau (script qui bloque)
- Scanner sans rate limiting (détection IPS)
- Stocker des credentials en clair dans le code
- Ignorer les résultats de scan partiels
Pour aller plus loin
Intégrez vos scripts avec des frameworks comme Empire ou Cobalt Strike via API. Découvrez nos formations Red Team avancées.