
Ein vielseitiger und portabler Proxy zum Erfassen, Manipulieren und Wiedergeben von HTTP/HTTPS-Traffic unterwegs.
Funktionen • Installation • Nutzung • Proxify ausführen • SSL-Zertifikat installieren • Anwendungen von Proxify • Discord beitreten
Schweizer Taschenmesser-Proxy für schnelle Bereitstellungen. Unterstützt mehrere Vorgänge wie Dump von Anfragen/Antworten, Filterung und Manipulation über DSL-Sprache, vorgelagerte HTTP/Socks5-Proxy. Zusätzlich ermöglicht ein Replay-Dienstprogramm, den abgefangenen Datenverkehr (Anfragen/Antworten mit korrektem Domainnamen) in BurpSuite oder einen anderen Proxy zu importieren, indem einfach der vorgelagerte Proxy auf proxify gesetzt wird.
Laden Sie das fertige Binary herunter oder installieren/erstellen Sie es mit GO
go install -v github.com/projectdiscovery/proxify/cmd/proxify@latest
proxify -h
Dies zeigt die Hilfe für das Tool an. Hier sind alle Schalter, die es unterstützt.
Schweizer Taschenmesser-Proxy für schnelle Bereitstellungen. Unterstützt mehrere Vorgänge wie Dump von Anfragen/Antworten, Filterung und Manipulation über DSL-Sprache, vorgelagerte HTTP/Socks5-Proxy
Nutzung:
./proxify [flags]
Flags:
AUSGABE:
-sr, -store-response Rohe HTTP-Anfrage/-Antwort im Ausgabeverzeichnis speichern (Standard: proxify_logs)
-o, -output Ausgabedatei zum Speichern von Proxify-Logs (Standard: proxify_logs.jsonl)
-of, -output-format string Ausgabeformat (jsonl/yaml) (Standard "jsonl")
-dump-req Nur HTTP-Anfragen in Ausgabedatei ausgeben
-dump-resp Nur HTTP-Antworten in Ausgabedatei ausgeben
-oca, -out-ca string CA-Datei generieren und unter Dateiname speichern
UPDATE:
-up, -update proxify auf neueste Version aktualisieren
-duc, -disable-update-check automatische Prüfung auf Proxify-Updates deaktivieren
FILTER:
-req-fd, -request-dsl string[] Anfrage-Filter-DSL
-resp-fd, -response-dsl string[] Antwort-Filter-DSL
-req-mrd, -request-match-replace-dsl string[] Anfrage-Match-Replace-DSL
-resp-mrd, -response-match-replace-dsl string[] Antwort-Match-Replace-DSL
NETZWERK:
-ha, -http-addr string Lauschende HTTP-IP und Port (ip:port) (Standard "127.0.0.1:8888")
-sa, -socks-addr string Lauschende SOCKS-IP und Port (ip:port) (Standard 127.0.0.1:10080)
-da, -dns-addr string Lauschende DNS-IP und Port (ip:port)
-dm, -dns-mapping string Domain-IP-DNS-Zuordnung (z.B. domain:ip,domain:ip,..)
-r, -resolver string Benutzerdefinierte DNS-Resolver verwenden (ip:port)
PROXY:
-hp, -http-proxy string[] Vorgelagerte HTTP-Proxies (z.B. http://proxy-ip:proxy-port)
-sp, -socks5-proxy string[] Vorgelagerte SOCKS5-Proxies (z.B. socks5://proxy-ip:proxy-port)
-c int Anzahl der Anfragen vor Wechsel zum nächsten vorgelagerten Proxy (Standard 1)
EXPORT:
-max-size int Maximale Exportdatengröße (Anfragen/Antworten werden gekürzt) (Standard 9223372036854775807)
KONFIGURATION:
-config string Pfad zur Proxify-Konfigurationsdatei
-ec, -export-config string Proxify-Exportmodul-Konfigurationsdatei (Standard "$CONFIG/export-config.yaml")
-config-directory string Standardkonfigurationspfad überschreiben (Standard "$CONFIG/proxify")
-cert-cache-size int Anzahl der zu cachenden Zertifikate (Standard 256)
-a, -allow string[] Erlaubte Liste von IP/CIDR, die über den Proxy geleitet werden
-d, -deny string[] Verweigerte Liste von IP/CIDR, die über den Proxy geleitet werden
-pt, -passthrough string[] Liste der Passthrough-Domains
DEBUG:
-nc, -no-color Keine Farbe
-version Version
-silent Still
-v, -verbose Ausführlich
-vv, -very-verbose Sehr ausführlich
Startet einen HTTP-Proxy auf Port 8888:
proxify
Startet einen HTTP-Proxy auf benutzerdefiniertem Port 1111:
proxify -http-addr ":1111"
Das Flag -pt kann verwendet werden, um verschlüsselten Datenverkehr zu überspringen (Passthrough), ohne zu versuchen, die TLS-Verbindung zu beenden.
proxify -pt '(.*\.)?google\.co.in.*'
Startet einen HTTP-Proxy auf Port 8888 und leitet den Verkehr an Burp auf Port 8080 weiter:
proxify -http-proxy http://127.0.0.1:8080
Startet einen HTTP-Proxy auf Port 8888 und leitet den Verkehr an das TOR-Netzwerk weiter:
proxify -socks5-proxy 127.0.0.1:9050
Proxify unterstützt drei Ausgabeformate: JSONL, YAML und Dateien.
JSONL (Standard):
Im JSON-Lines-Format wird jedes Paar aus HTTP-Anfrage/Antwort als JSON-Objekt in einer einzelnen Zeile gespeichert.
{"timestamp":"2024-02-20T01:56:49+05:30","url":"https://scanme.sh:443","request":{"header":{"Connection":"close","User-Agent":"curl/8.1.2","host":"scanme.sh:443","method":"CONNECT","path":"","scheme":"https"},"raw":"CONNECT scanme.sh:443 HTTP/1.1\r\nHost: scanme.sh:443\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"},"response":{"header":{"Content-Length":"0"},"raw":"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"}}
{"timestamp":"2024-02-20T01:56:49+05:30","url":"https://scanme.sh/","request":{"header":{"Accept":"*/*","Connection":"close","User-Agent":"curl/8.1.2","host":"scanme.sh","method":"GET","path":"/","scheme":"https"},"raw":"GET / HTTP/1.1\r\nHost: scanme.sh\r\nAccept: */*\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"},"response":{"header":{"Content-Type":"text/plain; charset=utf-8","Date":"Mon, 19 Feb 2024 20:26:49 GMT"},"body":"ok","raw":"HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/plain; charset=utf-8\r\nDate: Mon, 19 Feb 2024 20:26:49 GMT\r\n\r\n"}}
YAML MultiDoc:
Im YAML-MultiDoc-Format wird jedes Paar aus HTTP-Anfrage und -Antwort als separates Dokument gekapselt. Alle Dokumente in der Ausgabe-YAML-Datei werden durch --- getrennt, um Stream-Parsing und -Konsumierung zu ermöglichen.
proxify -output-format yaml
timestamp: "2024-02-20T01:40:40+05:30"
url: https://scanme.sh:443
request:
header:
Connection: close
User-Agent: curl/8.1.2
host: scanme.sh:443
method: CONNECT
path: ""
scheme: https
body: ""
raw: "CONNECT scanme.sh:443 HTTP/1.1\r\nHost: scanme.sh:443\r\nConnection: close\r\nUser-Agent: curl/8.1.2\r\n\r\n"
response:
header:
Content-Length: "0"
body: ""
raw: "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
---
timestamp: "2024-02-20T01:40:40+05:30"
...
Dateien:
Im Dateiformat wird jedes Paar aus HTTP-Anfrage und -Antwort in separaten Dateien gespeichert, zuerst die Anfrage, dann die Antwort. Dateinamen haben das Format {{Host}}-{{randstr}}.txt. Zusätzlich können die Flags dump-req oder dump-resp verwendet werden, um einen bestimmten Teil der Anfrage in die Datei zu speichern.
proxify -store-response
Hinweis: Bei Verwendung von
-store-responsewerden sowohl jsonl- als auch Dateien generiert.
Proxify unterstützt die Einbettung eines DNS-Resolvers, um Hostnamen bestimmten Adressen zuzuordnen und einen vorgelagerten DNS-Server für andere Domainnamen zu definieren.
Startet einen HTTP-Proxy auf Port 8888 mit einem eingebetteten DNS-Server auf Port 53, der www.google.it auf 192.168.1.1 auflöst und alle anderen fqdn an 1.1.1.1 weiterleitet:
proxify -dns-addr ":53" -dns-mapping "www.google.it:192.168.1.1" -dns-resolver "1.1.1.1:53"
Diese Funktion wird beispielsweise vom replay-Dienstprogramm verwendet, um die Verbindungen zu kapern und Antworten zu simulieren. Sie kann bei internen Bewertungen mit privaten DNS-Servern nützlich sein. Die Verwendung von * als Domainname erfasst alle DNS-Anfragen.
Wenn die Anfrage oder Antwort den Filtern entspricht, wird der Dump mit dem Suffix .match.txt gekennzeichnet:
proxify -request-dsl "contains(request,'firefox')" -response-dsl "contains(response, md5('test'))"
Proxify unterstützt die Änderung von Anfragen und Antworten im laufenden Betrieb mit der DSL-Sprache.
Hier ein Beispiel, um das Wort firefox in der Anfrage durch chrome zu ersetzen:
proxify -request-match-replace-dsl "replace(request,'firefox','chrome')"
Ein weiteres Beispiel mit regex-basierter Ersetzung der Antwort:
proxify -response-match-replace-dsl "replace_regex(response, '^authentication failed$', 'authentication ok')"
Alle abgefangenen Anfragen/Antworten werden an die Ziel-URL (http://127.0.0.1:8080) wiedergegeben, falls nicht anders angegeben. Damit dies funktioniert, muss Burp so konfiguriert werden, dass es proxify als vorgelagerten Proxy verwendet, da dieser die DNS-Auflösungen kapert und den Remote-Server mit der abgefangenen Anfrage simuliert. Dadurch erscheinen im Burp-Verlauf genau alle Anfragen/Antworten, als ob sie ursprünglich darüber gesendet worden wären. Dies ermöglicht beispielsweise eine Remote-Interception in der Cloud und das Zusammenführen aller Ergebnisse lokal in Burp.
replay -output "logs/"
Für proxify wird eine Zertifizierungsstelle generiert, die standardmäßig im Ordner ~/.config/proxify/ gespeichert wird; kann mit dem Flag -config manuell angegeben werden. Das generierte Zertifikat kann durch Aufrufen von http://proxify/cacert in einem mit proxify verbundenen Browser importiert werden.
Die Installationsschritte für das Root-Zertifikat ähneln denen anderer Proxy-Tools und umfassen das Hinzufügen des Zertifikats zum vertrauenswürdigen Root-Speicher des Systems.
Proxify kann an vielen Stellen eingesetzt werden. Hier sind einige gängige Beispiele, bei denen Proxify nützlich ist:
Startet einen HTTP-Proxy auf Port 8888 und leitet den Verkehr an Burp auf Port 8080 weiter:
proxify -http-proxy http://127.0.0.1:8080
In BurpSuite den vorgelagerten Proxy so einstellen, dass der gesamte Verkehr zurück zu proxify geleitet wird:
User Options > Upstream Proxy > Proxy & Port > 127.0.0.1 & 8888
Nun wird der gesamte Anfrage-/Antwortverlauf im Ordner logs gespeichert, der später zur Nachbearbeitung verwendet werden kann.
Während Sie die Anwendung durchsuchen, können Sie den Browser auf proxify ausrichten, um alle HTTP-Anfragen/-Antworten in einer Datei zu speichern.
Starte proxify auf dem Standard- oder einem beliebigen Port:
proxify -output chrome-logs
Starte Chrome unter macOS:
/Applications/Chromium.app/Contents/MacOS/Chromium --ignore-certificate-errors --proxy-server=http://127.0.0.1:8888 &
Starte proxify auf dem Standard- oder einem beliebigen Port:
proxify -output ffuf-logs
Führe FFuF mit Proxy, der auf proxify zeigt, aus:
ffuf -x http://127.0.0.1:8888 FFUF_CMD_HERE
Proxify wird mit 🖤 vom projectdiscovery-Team entwickelt. Community-Beiträge haben das Projekt zu dem gemacht, was es ist. Weitere Details finden Sie in der Thanks.md-Datei.