
Un proxy polyvalent et portable pour capturer, manipuler et rejouer le trafic HTTP/HTTPS en déplacement.
Fonctionnalités • Installation • Utilisation • Exécuter Proxify • Installation du certificat SSL • Applications de Proxify • Rejoindre Discord
Proxy couteau suisse pour des déploiements rapides. Prend en charge plusieurs opérations telles que l'enregistrement des requêtes/réponses, le filtrage et la manipulation via le langage DSL, ainsi que le proxy amont HTTP/Socks5. De plus, un utilitaire de rejeu permet d'importer le trafic enregistré (requêtes/réponses avec le nom de domaine correct) dans BurpSuite ou tout autre proxy en définissant simplement le proxy amont sur proxify.
Téléchargez le binaire prêt à l'emploi ou installez/compilez-le avec GO
go install -v github.com/projectdiscovery/proxify/cmd/proxify@latest
proxify -h
Cela affichera l'aide de l'outil. Voici tous les commutateurs qu'il prend en charge.
Swiss Army Knife Proxy for rapid deployments. Supports multiple operations such as request/response dump,filtering and manipulation via DSL language, upstream HTTP/Socks5 proxy
Usage:
./proxify [flags]
Flags:
OUTPUT:
-sr, -store-response store raw http request / response to output directory (default proxify_logs)
-o, -output output file to store proxify logs (default proxify_logs.jsonl)
-of, -output-format string output format (jsonl/yaml) (default "jsonl")
-dump-req Dump only HTTP requests to output file
-dump-resp Dump only HTTP responses to output file
-oca, -out-ca string Generate and Save CA File to filename
UPDATE:
-up, -update update proxify to latest version
-duc, -disable-update-check disable automatic proxify update check
FILTER:
-req-fd, -request-dsl string[] Request Filter DSL
-resp-fd, -response-dsl string[] Response Filter DSL
-req-mrd, -request-match-replace-dsl string[] Request Match-Replace DSL
-resp-mrd, -response-match-replace-dsl string[] Response Match-Replace DSL
NETWORK:
-ha, -http-addr string Listening HTTP IP and Port address (ip:port) (default "127.0.0.1:8888")
-sa, -socks-addr Listening SOCKS IP and Port address (ip:port) (default 127.0.0.1:10080)
-da, -dns-addr string Listening DNS IP and Port address (ip:port)
-dm, -dns-mapping string Domain to IP DNS mapping (eg domain:ip,domain:ip,..)
-r, -resolver string Custom DNS resolvers to use (ip:port)
PROXY:
-hp, -http-proxy string[] Upstream HTTP Proxies (eg http://proxy-ip:proxy-port)
-sp, -socks5-proxy string[] Upstream SOCKS5 Proxies (eg socks5://proxy-ip:proxy-port)
-c int Number of requests before switching to the next upstream proxy (default 1)
EXPORT:
-max-size int Max export data size (request/responses will be truncated) (default 9223372036854775807)
CONFIGURATION:
-config string path to the proxify configuration file
-ec, -export-config string proxify export module configuration file (default "$CONFIG/export-config.yaml")
-config-directory string override the default config path (default "$CONFIG/proxify")
-cert-cache-size int Number of certificates to cache (default 256)
-a, -allow string[] Allowed list of IP/CIDR's to be proxied
-d, -deny string[] Denied list of IP/CIDR's to be proxied
-pt, -passthrough string[] List of passthrough domains
DEBUG:
-nc, -no-color No Color
-version Version
-silent Silent
-v, -verbose Verbose
-vv, -very-verbose Very Verbose
Exécute un proxy HTTP sur le port 8888 :
proxify
Exécute un proxy HTTP sur le port personnalisé 1111 :
proxify -http-addr ":1111"
Le drapeau -pt peut être utilisé pour passer au travers (ignorer) le trafic chiffré sans tenter de terminer la connexion TLS.
proxify -pt '(.*\.)?google\.co.in.*'
Exécute un proxy HTTP sur le port 8888 et transmet le trafic à burp sur le port 8080 :
proxify -http-proxy http://127.0.0.1:8080
Exécute un proxy HTTP sur le port 8888 et transmet le trafic au réseau TOR :
proxify -socks5-proxy 127.0.0.1:9050
Proxify prend en charge trois formats de sortie : JSONL, YAML et Fichiers.
JSONL (par défaut) :
Au format Json Lines, chaque paire Requête/Réponse HTTP est stockée sous forme d'objet json sur une seule ligne.
{"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 :
Dans le format YAML MultiDoc, chaque paire requête et réponse HTTP est encapsulée dans un document séparé. Tous les documents du fichier yaml de sortie sont séparés par --- pour permettre l'analyse et la consommation de flux.
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"
...
Fichiers :
Au format Fichiers, chaque paire requête et réponse HTTP est stockée dans des fichiers séparés, la requête suivie de la réponse. Les noms de fichiers sont au format {{Host}}-{{randstr}}.txt. De plus, les drapeaux dump-req ou dump-resp peuvent être utilisés pour enregistrer une partie spécifique de la requête dans le fichier.
proxify -store-response
Remarque : Lors de l'utilisation de
-store-response, les deux formats jsonl et fichiers sont générés.
Proxify prend en charge l'intégration d'un résolveur DNS pour mapper les noms d'hôte à des adresses spécifiques et définir un serveur DNS amont pour tout autre nom de domaine.
Exécute un proxy HTTP sur le port 8888 en utilisant un serveur DNS intégré écoutant sur le port 53 et résolvant www.google.it en 192.168.1.1 et tous les autres fqdn sont transmis en amont à 1.1.1.1 :
proxify -dns-addr ":53" -dns-mapping "www.google.it:192.168.1.1" -dns-resolver "1.1.1.1:53"
Cette fonctionnalité est utilisée par exemple par l'utilitaire replay pour détourner les connexions et simuler les réponses. Elle peut être utile lors d'évaluations internes avec des serveurs DNS privés. L'utilisation de * comme nom de domaine correspond à toutes les requêtes DNS.
Si la requête ou la réponse correspond aux filtres, l'enregistrement est marqué avec le suffixe .match.txt :
proxify -request-dsl "contains(request,'firefox')" -response-dsl "contains(response, md5('test'))"
Proxify prend en charge la modification des requêtes et des réponses à la volée avec le langage DSL.
Voici un exemple pour remplacer le mot firefox de la requête par chrome :
proxify -request-match-replace-dsl "replace(request,'firefox','chrome')"
Un autre exemple utilisant le remplacement basé sur les expressions régulières de la réponse :
proxify -response-match-replace-dsl "replace_regex(response, '^authentication failed$', 'authentication ok')"
Rejoue toutes les requêtes/réponses enregistrées vers l'URL de destination (http://127.0.0.1:8080) si elle n'est pas spécifiée. Pour que cela fonctionne, il est nécessaire de configurer burp pour utiliser proxify comme proxy amont, car il se chargera de détourner les résolutions DNS et de simuler le serveur distant avec la requête enregistrée. Cela permet d'avoir dans l'historique de burp exactement toutes les requêtes/réponses comme si elles avaient été envoyées à l'origine via celui-ci, permettant par exemple d'effectuer une interception à distance sur le cloud et de fusionner tous les résultats localement dans burp.
replay -output "logs/"
Une autorité de certification est générée pour proxify, stockée par défaut dans le dossier ~/.config/proxify/, elle peut être spécifiée manuellement par le drapeau -config. Le certificat généré peut être importé en visitant http://proxify/cacert dans un navigateur connecté à proxify.
Les étapes d'installation du certificat racine sont similaires à celles des autres outils proxy, ce qui inclut l'ajout du certificat au magasin de certificats racines de confiance du système.
Proxify peut être utilisé à plusieurs endroits, voici quelques exemples courants où Proxify est utile :
Exécute un proxy HTTP sur le port 8888 et transmet le trafic à burp sur le port 8080 :
proxify -http-proxy http://127.0.0.1:8080
Depuis BurpSuite, définissez le proxy amont pour transmettre tout le trafic à proxify :
User Options > Upstream Proxy > Proxy & Port > 127.0.0.1 & 8888
Maintenant, tout l'historique des requêtes/réponses sera stocké dans le dossier logs qui pourra être utilisé ultérieurement pour le post-traitement.
Pendant que vous naviguez sur l'application, vous pouvez pointer le navigateur vers proxify pour stocker toutes les requêtes/réponses HTTP dans un fichier.
Démarrez proxify sur le port par défaut ou tout port de votre choix :
proxify -output chrome-logs
Démarrez le navigateur Chrome sous macOS :
/Applications/Chromium.app/Contents/MacOS/Chromium --ignore-certificate-errors --proxy-server=http://127.0.0.1:8888 &
Démarrez proxify sur le port par défaut ou tout port de votre choix :
proxify -output ffuf-logs
Exécutez FFuF avec le proxy pointant vers proxify :
ffuf -x http://127.0.0.1:8888 FFUF_CMD_HERE
Proxify est fait avec 🖤 par l'équipe projectdiscovery. Les contributions de la communauté ont fait du projet ce qu'il est. Consultez le fichier Thanks.md pour plus de détails.