← retour aux outils back to tools

# mitmproxy

Proxy HTTP interactif interceptant le SSL, avec scripting Python. Inspecter, modifier, rejouer et scripter le trafic HTTP/HTTPS via terminal, interface web ou API Python. Interactive SSL-capable intercepting HTTP proxy with Python scripting. Inspect, modify, replay, and script HTTP/HTTPS traffic via terminal, web UI, or Python API.

↗ https://mitmproxy.org

## Overview

mitmproxy is an open-source HTTPS proxy with three interfaces: `mitmproxy` (interactive TUI), `mitmweb` (browser-based GUI), and `mitmdump` (non-interactive, like tcpdump for HTTP). It supports certificate pinning bypass, WebSocket inspection, HTTP/2, and extensive scripting.

## Starting mitmproxy

Interactive TUI

    mitmproxy

Web GUI (browser-based)

    mitmweb

→ Access at: http://127.0.0.1:8081

Non-interactive (dump to terminal)

    mitmdump

Specify listen port (default: 8080)

    mitmproxy -p 8888

Bind to all interfaces

    mitmproxy --listen-host 0.0.0.0

## Client Configuration

    # Configure browser/device to proxy through 127.0.0.1:8080

    # Install CA certificate (for HTTPS interception):
    # 1. Browse to http://mitm.it while proxy is running
    # 2. Download and install the CA cert for your OS/browser
    # Or: use the cert at ~/.mitmproxy/mitmproxy-ca-cert.pem

## mitmproxy TUI Keys

    q          Quit
    f          Set filter
    /          Search flows
    r          Replay request
    e          Edit request/response
    d          Delete flow
    Enter      View flow detail
    i          Intercept mode toggle
    a          Accept intercepted flow
    b          Edit body
    h/j/k/l    Navigate

## Filters

Filter flows by host

    ~d target.com

Filter by URL path

    ~u /api/

Filter by method

    ~m POST

Filter by status code

    ~s 200

Filter by body content

    ~b "password"

Combine filters

    ~d target.com & ~m POST

Negation

    !~d google.com

## mitmdump (Scripting & Capture)

Capture all flows to file

    mitmdump -w capture.flows

Read and display saved flows

    mitmdump -r capture.flows

Filter while dumping

    mitmdump -r capture.flows --flow-detail 2

Output request/response bodies

    mitmdump -r capture.flows -s show_body.py

## Python Scripting

    # addon_script.py — intercept and modify traffic
    from mitmproxy import http

    class Interceptor:
        def request(self, flow: http.HTTPFlow) -> None:
            # Modify request headers
            flow.request.headers["X-Custom"] = "injected"

            # Log all POST bodies
            if flow.request.method == "POST":
                print(flow.request.get_text())

        def response(self, flow: http.HTTPFlow) -> None:
            # Modify response
            if "password" in flow.response.get_text():
                print(f"[!] Password found in response: {flow.request.url}")

    addons = [Interceptor()]

    # Run with script
    mitmproxy -s addon_script.py
    mitmdump -s addon_script.py

## Common Use Cases

Strip HSTS headers (prevent forced HTTPS redirect)

    mitmdump -s strip_hsts.py

Intercept mobile app traffic 1. Set phone’s proxy to attacker’s IP:8080 2. Install mitmproxy CA cert on phone

    mitmproxy --listen-host 0.0.0.0

    # SSL kill switch / cert pinning bypass
    # Use Frida or objection on the mobile app to disable pinning first

    # Replay a request
    # In TUI: select flow → r → modify if needed → r again

## Tips

- `mitmweb` is more user-friendly for beginners than the TUI
- For mobile apps with certificate pinning, use Frida/objection to bypass pinning first
- `--mode upstream:http://burp:8080` chains mitmproxy before Burp Suite
- Scripts run as addons — much cleaner than Burp’s Java/Python extender API

Key CLI options

    mitmproxy / mitmweb / mitmdump [options]

    -p PORT           Listen port (default: 8080)
    --listen-host IP  Listen address
    -s SCRIPT         Load addon script
    -q                Quiet mode
    -v                Verbose

    SSL:
    --ssl-insecure     Skip SSL verification upstream
    --cert SPEC        Custom certificate
    --modify-headers   Header modification

    Modes:
    --mode regular    Standard proxy (default)
    --mode transparent  Transparent proxy
    --mode socks5     SOCKS5 proxy
    --mode upstream:URL  Upstream proxy

    I/O:
    -r FILE           Read saved flows
    -w FILE           Write flows to file
    --save-stream-file  Save raw stream

## Vue d’ensemble

mitmproxy est un proxy HTTPS open source avec trois interfaces : `mitmproxy` (TUI interactive), `mitmweb` (interface graphique dans le navigateur) et `mitmdump` (non interactif, comme tcpdump pour HTTP). Il prend en charge le contournement du certificate pinning, l’inspection des WebSocket, HTTP/2 et un système de scripting complet.

## Démarrer mitmproxy

    # TUI interactive
    mitmproxy

    # Interface web (dans le navigateur), accessible sur http://127.0.0.1:8081
    mitmweb

    # Non interactif (dump dans le terminal)
    mitmdump

    # Spécifier le port d'écoute (par défaut : 8080)
    mitmproxy -p 8888

    # Écouter sur toutes les interfaces
    mitmproxy --listen-host 0.0.0.0

## Configuration du client

    # Configurer le navigateur/l'appareil pour utiliser le proxy 127.0.0.1:8080

    # Installer le certificat CA (pour l'interception HTTPS) :
    # 1. Naviguer vers http://mitm.it pendant que le proxy tourne
    # 2. Télécharger et installer le certificat CA pour son OS/navigateur
    # Ou : utiliser le certificat situé dans ~/.mitmproxy/mitmproxy-ca-cert.pem

## Raccourcis clavier de la TUI mitmproxy

    q          Quitter
    f          Définir un filtre
    /          Rechercher dans les flows
    r          Rejouer la requête
    e          Modifier la requête/réponse
    d          Supprimer le flow
    Enter      Voir le détail du flow
    i          Basculer le mode interception
    a          Accepter le flow intercepté
    b          Modifier le corps
    h/j/k/l    Navigation

## Filtres

    # Filtrer les flows par hôte
    ~d target.com

    # Filtrer par chemin d'URL
    ~u /api/

    # Filtrer par méthode
    ~m POST

    # Filtrer par code de statut
    ~s 200

    # Filtrer par contenu du corps
    ~b "password"

    # Combiner des filtres
    ~d target.com & ~m POST

    # Négation
    !~d google.com

## mitmdump (scripting et capture)

    # Capturer tous les flows dans un fichier
    mitmdump -w capture.flows

    # Lire et afficher les flows sauvegardés
    mitmdump -r capture.flows

    # Filtrer pendant le dump
    mitmdump -r capture.flows --flow-detail 2

    # Afficher les corps de requêtes/réponses
    mitmdump -r capture.flows -s show_body.py

## Scripting Python

    # addon_script.py : intercepte et modifie le trafic
    from mitmproxy import http

    class Interceptor:
        def request(self, flow: http.HTTPFlow) -> None:
            # Modifier les en-têtes de la requête
            flow.request.headers["X-Custom"] = "injected"

            # Journaliser tous les corps des requêtes POST
            if flow.request.method == "POST":
                print(flow.request.get_text())

        def response(self, flow: http.HTTPFlow) -> None:
            # Modifier la réponse
            if "password" in flow.response.get_text():
                print(f"[!] Password found in response: {flow.request.url}")

    addons = [Interceptor()]

    # Lancer avec le script
    mitmproxy -s addon_script.py
    mitmdump -s addon_script.py

## Cas d’usage courants

    # Supprimer les en-têtes HSTS (empêcher la redirection forcée en HTTPS)
    mitmdump -s strip_hsts.py

    # Intercepter le trafic d'une application mobile :
    # 1. Configurer le proxy du téléphone sur l'IP:port de l'attaquant
    # 2. Installer le certificat CA mitmproxy sur le téléphone
    mitmproxy --listen-host 0.0.0.0

    # SSL kill switch / contournement du cert pinning
    # Utiliser Frida ou objection sur l'application mobile pour désactiver le pinning au préalable

    # Rejouer une requête
    # Dans la TUI : sélectionner le flow → r → modifier si besoin → r à nouveau

## Conseils

- `mitmweb` est plus accessible pour les débutants que la TUI
- Pour les applications mobiles avec certificate pinning, utiliser Frida/objection pour contourner le pinning au préalable
- `--mode upstream:http://burp:8080` chaîne mitmproxy avant Burp Suite
- Les scripts s’exécutent en tant qu’addons, bien plus propre que l’API extender Java/Python de Burp

Options CLI principales

    mitmproxy / mitmweb / mitmdump [options]

    -p PORT           Listen port (default: 8080)
    --listen-host IP  Listen address
    -s SCRIPT         Load addon script
    -q                Quiet mode
    -v                Verbose

    SSL:
    --ssl-insecure     Skip SSL verification upstream
    --cert SPEC        Custom certificate
    --modify-headers   Header modification

    Modes:
    --mode regular    Standard proxy (default)
    --mode transparent  Transparent proxy
    --mode socks5     SOCKS5 proxy
    --mode upstream:URL  Upstream proxy

    I/O:
    -r FILE           Read saved flows
    -w FILE           Write flows to file
    --save-stream-file  Save raw stream