caido
Proxy web moderne pour pentest et bug bounty. Alternative légère à Burp Suite. Interface web, workflows, plugins, et MCP. Use only on authorized targets.
Quickstart
# Lancer Caido
caido
# Avec port et adresse custom
caido --listen 127.0.0.1:8080
# Headless (sans UI graphique)
caido --headlessConcepts Clés
| Concept | Description |
|---|---|
| Proxy | Intercept HTTP/S traffic (default 127.0.0.1:8080) |
| Replay | Modifier et rejouer des requêtes |
| Automate | Fuzzer intégré (comme Intruder) |
| Workflows | Automatisation avec plugins HTTPQL |
| Scope | Filtrer les requêtes par domaine/regex |
| Findings | Créer des notes sur les vulnérabilités trouvées |
| Projects | Séparation des engagements |
Configuration Proxy
# Configurer le proxy dans le navigateur ou en CLI
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080
# Via ffuf
ffuf -u https://target.com/FUZZ -w wordlist.txt -x http://127.0.0.1:8080
# Via curl
curl -k -x http://127.0.0.1:8080 https://target.com
# Via httpx
httpx -l urls.txt -http-proxy http://127.0.0.1:8080Installation CA Cert
# Télécharger le certificat Caido
# Interface web → Settings → CA Certificate → Download
# Installer sur Linux
sudo cp caido-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
# Installer dans Firefox
# Paramètres → Vie privée → Certificats → Importer
# Installer dans Chrome
# chrome://settings/certificates → Autorités → Importer
# Vérifier
curl --proxy http://127.0.0.1:8080 https://httpbin.org/getScope
# Format scope (HTTPQL)
# Interface : Settings → Scope → Add Rule
# Inclure un domaine
host == "target.com"
# Inclure un domaine et sous-domaines
host =~ ".*\.target\.com$"
# Inclure plusieurs cibles
host == "target.com" OR host == "api.target.com"
# Exclure assets statiques
host == "target.com" AND path !~ "\.(js|css|png|jpg|gif|ico|woff)$"HTTPQL (Query Language)
# Syntaxe générale
field operator value
# Exemples
host == "target.com" # Hôte exact
path =~ "/api/.*" # Path regex
status == 200 # Code HTTP
body =~ "password" # Corps de réponse
method == "POST" # Méthode HTTP
header["Authorization"] != "" # Header présent
size > 1000 # Taille réponse
# Combinaisons
host == "target.com" AND status == 200 AND body =~ "admin"
(status == 401 OR status == 403) AND path =~ "/admin"Replay
# Utilisation basique
# 1. Clic droit sur requête → Send to Replay
# 2. Modifier la requête
# 3. Send (Ctrl+Enter)
# Collections de requêtes
# Organiser plusieurs replays dans des collections
# Utile pour tests d'auth : conserver requêtes avant/après loginAutomate (Fuzzer)
# Similaire à Burp Intruder mais plus rapide
# 1. Clic droit → Send to Automate
# 2. Sélectionner le point d'injection
# 3. Charger une wordlist
# 4. Configurer filtres
# Payloads
- Wordlist (fichier .txt)
- Séquence (range de nombres)
- Null payload (répéter la requête)
- Fichier (upload multiple)
# Filtres sur les résultats
- Status code
- Taille de réponse
- Regex dans le corps
- Temps de réponse (pour timing attacks)Workflows
# Les workflows permettent d'automatiser des actions
# Passifs (sur tout le trafic) ou actifs (déclenché manuellement)
# Exemple : log toutes les réponses avec "password" dans le body
# Type: Passive
# Trigger: Response
# Condition: body =~ "password"
# Action: Add Finding
# Exemple : ajouter un header sur toutes les requêtes
# Type: Passive
# Trigger: Request
# Action: Set Header "X-Debug: true"Plugins
# Installer un plugin (interface web)
# Settings → Plugins → Browse / Upload
# Plugins utiles
# - Ebka AI Assistant : analyse les requêtes avec IA
# - Signature : ajouter des signatures aux requêtes
# - Autorize-like : tester les autorisations automatiquementMCP Integration (AI)
# Caido expose une API MCP pour les assistants IA
# Permet à l'IA d'interagir avec le proxy
# Configuration mcporter
{
"servers": {
"caido": {
"url": "http://127.0.0.1:8082/mcp",
"transport": "http"
}
}
}
# L'IA peut alors :
# - Lister les requêtes interceptées
# - Rejouer des requêtes
# - Créer des findings
# - Lancer des scans AutomateFindings (Notes vulnérabilités)
# Créer un finding
# Clic droit sur requête → Add Finding
# Champs
# - Title: nom court de la vuln
# - Description: détails techniques
# - Severity: info/low/medium/high/critical
# - Request: preuve technique
# Exporter pour rapport
# Findings → Export (JSON/Markdown)API REST Caido
# API disponible pour automatisation
# Auth: Bearer token (Settings → API Tokens)
# Lister les requêtes récentes
curl -H "Authorization: Bearer TOKEN" \
http://127.0.0.1:8080/api/v1/requests
# Obtenir une requête spécifique
curl -H "Authorization: Bearer TOKEN" \
http://127.0.0.1:8080/api/v1/requests/REQ_ID
# Créer un finding via API
curl -X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"XSS found","severity":"high","description":"..."}' \
http://127.0.0.1:8080/api/v1/findingsRecettes Bug Bounty
Test IDOR automatisé
# 1. Naviguer avec compte A, noter les IDs d'objets
# 2. Changer de compte B dans le navigateur
# 3. Replay les requêtes de A avec session de B
# 4. Comparer les réponses (taille, contenu)Fuzzing de paramètres JSON
# Dans Automate, avec requête POST JSON :
# Body: {"user_id": §1§}
# Wordlist: séquence 1-10000
# Filtre: status == 200 AND size != BASELINETrouver des endpoints cachés
# Dans Automate, avec GET :
# Path: /api/§FUZZ§
# Wordlist: api-endpoints.txt
# Filtre: status != 404Tester les autorisations (IDOR massif)
# 1. Collecter toutes les requêtes authentifiées en naviguant
# 2. Modifier le cookie/token session dans Automate
# 3. Rejouer toutes les requêtes avec la session d'un autre utilisateur
# 4. Comparer réponses : taille différente = possible IDORIntercepter WebSocket
# Caido supporte les WebSockets (depuis v0.44+)
# Proxy → WS tab
# Voir le trafic WS, modifier les messagesTroubleshooting
| Problème | Solution |
|---|---|
| HTTPS ne fonctionne pas | Installer le CA cert Caido dans le navigateur |
| Tunnel TLS bloqué | Désactiver certificate pinning dans l'appli |
| Trafic non intercepté | Vérifier proxy configuré (127.0.0.1:8080) |
| Plugin ne se charge pas | Vérifier version Caido compatible |
| API rate limit | Réduire threads dans Automate |
Raccourcis Clavier
| Raccourci | Action |
|---|---|
Ctrl+Enter |
Envoyer requête (Replay/Automate) |
Ctrl+K |
Recherche rapide |
Ctrl+/ |
Commenter/décommenter |
F |
Ouvrir filtres |
Échap |
Fermer panneau |