
Eine etwas weniger hackige Methode, um nicht-HTTP-Protokolle durch Burp & andere abzufangen und zu modifizieren.
Eine etwas weniger hackige Methode, um Nicht-HTTP-Protokolle durch Burp und andere mit SSL- und TLS-Interception-Unterstützung abzufangen und zu modifizieren. Dieses Tool ist für Forscher und anwendungsorientierte Penetrationstester gedacht, die Sicherheitsbewertungen von Thick Clients durchführen.
Eine verbesserte Version des fantastischen mitm_relay-Projekts.
Im Rahmen unserer Arbeit in der Forschungsabteilung von CyberArk Labs brauchten wir eine Möglichkeit, SSL- und TLS-Kommunikation über TCP zu inspizieren und die Inhalte von Paketen während der Übertragung zu modifizieren. Es gibt viele Wege, dies zu tun (z. B. die bekannte Burp-Suite-Erweiterung NoPE), aber in einigen Fällen hat uns keiner davon funktioniert. Schließlich stießen wir auf mitm_relay.
mitm_relay ist ein schneller und einfacher Weg, um MITM für jedes TCP-basierte Protokoll durch vorhandene HTTP-Interceptionsoftware wie den Proxy von Burp Suite durchzuführen. Es ist besonders nützlich für Sicherheitsbewertungen von Thick Clients. Aber es hat für uns nicht vollständig funktioniert, also mussten wir es anpassen. Nach vielen Anpassungen erforderte jede neue Änderung viel Arbeit, und wir haben schließlich alles in einer modulareren Weise neu geschrieben.
Wir hoffen, dass andere dieses Skript nützlich finden, und wir hoffen, dass das Hinzufügen von Funktionen einfach sein wird.
Zunächst müssen die Adressen und Ports der Listener konfiguriert werden. Für jeden Listener muss auch ein Ziel konfiguriert werden (Adresse und Port). Jede vom Listener empfangene Daten werden in den Body einer HTTP-POST-Anfrage mit der URL, die "CLIENT_REQUEST" enthält, verpackt. Jede vom Ziel empfangene Daten werden in den Body einer HTTP-POST-Anfrage mit der URL, die "SERVER_RESPONSE" enthält, verpackt. Diese Anfragen werden an einen lokalen HTTP-Interceptionserver gesendet.
Es besteht die Möglichkeit, einen HTTP-Proxy zu konfigurieren und ein Tool wie Burp Suite als HTTP-Interception-Tool zu verwenden und die Nachrichten dort zu betrachten. Auf diese Weise ist es einfach, die Nachrichten mit Burps "Match and Replace", Erweiterungen oder sogar manuell zu modifizieren (Denken Sie daran, der Timeout-Mechanismus des abgefangenen Protokolls kann sehr kurz sein).
Eine andere Möglichkeit, die Nachrichten zu modifizieren, ist die Verwendung eines Python-Skripts, das der HTTP-Interceptionserver ausführt, wenn er Nachrichten empfängt.
Die an den HTTP-Interceptionserver gesendeten Nachrichteninhalte werden in der Shell ausgegeben. Wenn das Modifikationsskript angegeben ist, werden die Nachrichten nach den Änderungen ausgegeben. Nach allen Modifikationen gibt der Interceptionserver die Nachricht auch als HTTP-Antwortbody zurück.
Um die SSL/TLS-Kommunikation zu entschlüsseln, muss mitm_intercept ein Zertifikat und einen Schlüssel bereitgestellt werden, die der Client beim Aufbau eines Handshakes mit dem Listener akzeptiert. Wenn der Zielserver ein bestimmtes Zertifikat für einen Handshake benötigt, gibt es die Option, ein Zertifikat und einen Schlüssel anzugeben.
Ein kleines Diagramm, das den typischen Datenverkehrsfluss zeigt:

mitm_intercept ist mit neueren Versionen von Python 3 (Python 3.9) kompatibel und auch mit Windows kompatibel (z. B. existiert socket.MSG_DONTWAIT unter Windows nicht). Wir haben die Option "STARTTLS" beibehalten und sie "Mixed"-Modus genannt. Die Verwendung der SSL-Schlüssel-Log-Datei wurde aktualisiert (die integrierte Option zur Verwendung ist neu ab Python 3.8), und wir haben die Option hinzugefügt, den SNI-Header zu ändern. Nun wird die Verwaltung der eingehenden und ausgehenden Kommunikation durch socketserver erledigt, und alle Daten werden an eine Unterklasse von ThreadingHTTPServer gesendet, die die Darstellung und Modifikation der Daten übernimmt. Auf diese Weise ist es möglich, die durch das Modifikationsskript angewendeten Änderungen in der Antwort zu sehen (praktisch für die Verwendung von Burp). Außerdem können wir jetzt die verfügbaren Ciphers, die das Skript verwendet, mit dem OpenSSL-Cipher-List-Format ändern.
$ python -m pip install requestsusage: mitm_intercept.py [-h] [-m] -l [u|t:]<interface>:<port> [[u|t:]<interface>:<port> ...] -t
[u|t:]<addr>:<port> [[u|t:]<addr>:<port> ...] [-lc <cert_path>]
[-lk <key_path>] [-tc <cert_path>] [-tk <key_path>] [-w <interface>:<port>]
[-p <addr>:<port>] [-s <script_path>] [--sni <server_name>]
[-tv <defualt|tls12|tls11|ssl3|tls1|ssl2>] [-ci <ciphers>]
mitm_intercept version 1.6