#Démarrer
# Interface TUI
mitmproxy --listen-port 8080
# Interface web sur http://127.0.0.1:8081
mitmweb --listen-port 8080 --web-port 8081
# Écouter sur toutes les interfaces (lab uniquement)
mitmproxy --listen-host 0.0.0.0 --listen-port 8080
# Écrire les flux dans un fichier
mitmproxy -w flows.mitm --listen-port 8080
#Router le client
# curl
curl -x http://127.0.0.1:8080 -k https://target.test
# Variables d'environnement
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080
# Firefox : paramètres réseau → proxy manuel HTTP 127.0.0.1:8080
#Mode transparent (Linux)
# Rediriger le trafic HTTP/HTTPS vers mitmproxy
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
sudo mitmproxy --mode transparent --listen-port 8080
#Interception et filtres
Dans la TUI, i active l'interception et ouvre un filtre :
~u /api/ # URL contient /api/
~m POST # méthode POST
~q # requêtes avec paramètres
~d example\.com # domaine
~t application/json
~s # réponses
Raccourcis : Enter éditer, a accepter, A accepter tout, r rejouer, e éditer, / filtrer la vue, f suivre un flux, z vider.
#Rejouer et modifier
# Rejouer un fichier de flux
mitmproxy -r flows.mitm
# Replay serveur (réponses en cache, utile hors ligne)
mitmproxy --server-replay flows.mitm --server-replay-kill-extra
# Modifier une requête avec un script
mitmproxy -s tamper.py
# tamper.py — ajoute un header et remplace une valeur
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if "api.target.test" in flow.request.pretty_host:
flow.request.headers["X-Forwarded-For"] = "127.0.0.1"
if "role=user" in flow.request.get_text():
flow.request.set_text(flow.request.get_text().replace("role=user", "role=admin"))
#Bonnes pratiques
- Utilise un profil navigateur dédié : les cookies de production n'ont rien à faire dans le proxy.
--set connection_strategy=lazyaide avec les serveurs qui ferment les connexions.--ignore-hostsévite d'intercepter les domaines de télémétrie.- Pour les WebSockets, mitmproxy les affiche comme des flux
websocket: inspecte les frames avece.