Quel outil puis-je utiliser pour renifler le trafic HTTP / HTTPS?


23

Je recherche un outil en ligne de commande qui peut intercepter les requêtes HTTP / HTTPS, extraire des informations telles que: (contenu, destination, etc.), effectuer diverses tâches d'analyse et enfin déterminer si la demande doit être abandonnée ou non. Les demandes légales doivent ensuite être transmises à la candidature.

Un outil qui est de nature similaire à tcpdump, Wireshark , ou Snort , mais fonctionne au niveau HTTP.

Les références

Réponses:


20

Essayez mitmproxy .

  • mitmproxy est un proxy man-in-the-middle compatible SSL pour HTTP. Il fournit une interface de console qui permet d'inspecter et de modifier les flux de trafic à la volée.

  • mitmdump est la version en ligne de commande de mitmproxy, avec les mêmes fonctionnalités mais sans l'interface utilisateur. Pensez à tcpdump pour HTTP.

traits

  • Interceptez les requêtes et les réponses HTTP et modifiez-les à la volée.
  • Enregistrez des conversations HTTP complètes pour une relecture et une analyse ultérieures.
  • Relisez le côté client d'une conversation HTTP.
  • Relisez les réponses HTTP d'un serveur précédemment enregistré.
  • Mode proxy inverse pour transférer le trafic vers un serveur spécifié.
  • Apportez des modifications par script au trafic HTTP à l'aide de Python.
  • Les certificats SSL pour l'interception sont générés à la volée.

Capture d'écran

   échantillon ss

Exemple

J'ai configuré un exemple d' application Jekyll Bootstrap qui écoute sur le port 4000 de mon hôte local. Pour intercepter son trafic, je ferais ce qui suit:

% mitmproxy --mode reverse:http://localhost:4000 -p 4001

Ensuite, connectez-vous à mon mitmproxy sur le port 4001 à partir de mon navigateur Web ( http://localhost:4001), ce qui entraîne ceci dans mitmproxy:

   SS de mitmproxy avec JB # 1

Vous pouvez ensuite sélectionner l'un des GETrésultats pour voir les informations d'en-tête associées à cela GET:

   SS de mitmproxy avec JB # 2

Les références


3

Dans certaines situations, vous pouvez utiliser un proxy qui accepte les requêtes HTTP entrantes et effectue des requêtes HTTPS sortantes. Par exemple, je voulais capturer le trafic entre gitet github.com. J'ai utilisé mitmproxy :

mitmproxy -s httpser.py

httpser.pyest:

def request(context, flow):
  flow.request.scheme = 'https'
  flow.request.port = 443

J'ai ensuite couru gitcomme ça:

export http_proxy="http://127.0.0.1:8080/"
git clone http://github.com/oxplot/difftr

Maintenant, en utilisant l' wiresharkécoute localhost, on peut capturer le trafic ordinaire. Sans le proxy, github redirigerait gitpour utiliser HTTPS.


2

mitmproxy/mitmdump

Equalivant à tcpdumppour HTTPS est mitmdump. Voici les étapes:

  1. Installez le mitmproxypackage (macOS:) brew install mitmproxy.
  2. Installez le certificat de l' autorité de certification mitmproxy à l'aide des commandes suivantes:

    $ mitmdump --mode reverse:http://mitm.it/ -p 8080
    $ wget --content-disposition http://localhost:8080/cert/pem
    $ open mitmproxy-ca-cert.pem
    # Open, install and mark the certificate as trusted.
    

Maintenant, voici le test simple sur la façon de tester le proxy inverse:

  1. Run: mitmdump --mode reverse:https://example.com/ -p 4433.
  2. Dans un autre shell, exécutez: curl https://localhost:4433.

    Maintenant, vous devriez voir la source de la page et la mitmdumpcommande devrait produire la sortie comme:

    Proxy server listening at http://*:4433
    [::1]:49446: clientconnect
    [::1]:49446: GET https://example.com/ HTTP/2.0
              << 200  1.24k
    [::1]:49446: clientdisconnect
    

Pour tout le trafic, lancez simplement: mitmdumpou mitmproxy.

Voir: mitmproxypage docs pour plus de détails.


Charles Proxy

Si vous êtes sous macOS, il existe également l' application Charles Proxy (GUI) qui permet de visualiser tout le trafic HTTP et SSL / HTTPS entre les hôtes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.