
Un proxy versátil y portátil para capturar, manipular y reproducir tráfico HTTP/HTTPS sobre la marcha.
Características • Instalación • Uso • Ejecutar Proxify • Instalación del Certificado SSL • Aplicaciones de Proxify • Unirse a Discord
Proxy navaja suiza para despliegues rápidos. Soporta múltiples operaciones como volcado de peticiones/respuestas, filtrado y manipulación mediante lenguaje DSL, proxy upstream HTTP/Socks5. Además, una utilidad de replay permite importar el tráfico volcado (peticiones/respuestas con el nombre de dominio correcto) a BurpSuite o cualquier otro proxy simplemente configurando el proxy upstream como proxify.
Descarga el binario listo para ejecutar o instala/compila usando GO
go install -v github.com/projectdiscovery/proxify/cmd/proxify@latest
proxify -h
Esto mostrará la ayuda de la herramienta. Aquí están todos los parámetros que soporta.
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
Ejecuta un proxy HTTP en el puerto 8888:
proxify
Ejecuta un proxy HTTP en el puerto personalizado 1111:
proxify -http-addr ":1111"
La bandera -pt se puede usar para pasar por alto (saltar) el tráfico cifrado sin intentar terminar la conexión TLS.
proxify -pt '(.*\.)?google\.co.in.*'
Ejecuta un proxy HTTP en el puerto 8888 y reenvía el tráfico a burp en el puerto 8080:
proxify -http-proxy http://127.0.0.1:8080
Ejecuta un proxy HTTP en el puerto 8888 y reenvía el tráfico a la red TOR:
proxify -socks5-proxy 127.0.0.1:9050
Proxify soporta tres formatos de salida: JSONL, YAML y Archivos.
JSONL (predeterminado):
En formato Json Lines, cada par Petición/Respuesta HTTP se almacena como un objeto json en una sola línea.
{"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:
En el formato YAML MultiDoc, cada par de petición y respuesta HTTP se encapsula como un documento separado. Todos los documentos en el archivo yaml de salida están separados por --- para permitir el análisis y consumo en flujo.
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"
...
Archivos:
En formato Archivos, cada par de petición y respuesta HTTP se almacena en archivos separados con la petición seguida de la respuesta. Los nombres de archivo tienen el formato {{Host}}-{{randstr}}.txt. Además, se puede usar la bandera dump-req o dump-resp para guardar una parte específica de la petición en el archivo.
proxify -store-response
Nota: Cuando se usa
-store-response, se generan tanto jsonl como archivos.
Proxify admite la incrustación de un resolvedor DNS para mapear nombres de host a direcciones específicas y definir un servidor DNS upstream para cualquier otro nombre de dominio.
Ejecuta un proxy HTTP en el puerto 8888 usando un servidor DNS embebido que escucha en el puerto 53 y resuelve www.google.it a 192.168.1.1, mientras que todos los demás fqdn se reenvían upstream a 1.1.1.1:
proxify -dns-addr ":53" -dns-mapping "www.google.it:192.168.1.1" -dns-resolver "1.1.1.1:53"
Esta característica es utilizada, por ejemplo, por la utilidad replay para secuestrar conexiones y simular respuestas. Puede ser útil durante evaluaciones internas con servidores DNS privados. Usando * como nombre de dominio se igualan todas las solicitudes DNS.
Si la petición o respuesta coincide con los filtros, el volcado se etiqueta con el sufijo .match.txt:
proxify -request-dsl "contains(request,'firefox')" -response-dsl "contains(response, md5('test'))"
Proxify soporta modificar Peticiones y Respuestas sobre la marcha con lenguaje DSL.
Aquí hay un ejemplo para reemplazar la palabra firefox de la petición por chrome:
proxify -request-match-replace-dsl "replace(request,'firefox','chrome')"
Otro ejemplo usando reemplazo basado en regex de la respuesta:
proxify -response-match-replace-dsl "replace_regex(response, '^authentication failed$', 'authentication ok')"
Reenvía todas las peticiones/respuestas volcadas a la URL de destino (http://127.0.0.1:8080) si no se especifica. Para que esto funcione, es necesario configurar burp para usar proxify como proxy upstream, ya que se encargará de secuestrar las resoluciones DNS y simular el servidor remoto con la petición volcada. Esto permite tener en el historial de burp exactamente todas las peticiones/respuestas como si hubieran sido enviadas originalmente a través de él, permitiendo, por ejemplo, realizar una interceptación remota en la nube y fusionar todos los resultados localmente dentro de burp.
replay -output "logs/"
Se genera una autoridad de certificación para proxify que se almacena en la carpeta ~/.config/proxify/ por defecto, manualmente se puede especificar con la bandera -config. El certificado generado se puede importar visitando http://proxify/cacert en un navegador conectado a proxify.
Los pasos de instalación del Certificado Raíz son similares a los de otras herramientas proxy, lo que incluye agregar el certificado al almacén de certificados raíz de confianza del sistema.
Proxify se puede usar en múltiples lugares, aquí hay algunos ejemplos comunes donde Proxify es útil:
Ejecuta un proxy HTTP en el puerto 8888 y reenvía el tráfico a burp en el puerto 8080:
proxify -http-proxy http://127.0.0.1:8080
Desde BurpSuite, configure el Proxy Upstream para reenviar todo el tráfico de vuelta a proxify:
User Options > Upstream Proxy > Proxy & Port > 127.0.0.1 & 8888
Ahora todo el historial de peticiones/respuestas se almacenará en la carpeta logs que se puede usar más tarde para post-procesamiento.
Mientras navegas por la aplicación, puedes apuntar el navegador a proxify para almacenar todas las peticiones/respuestas HTTP en un archivo.
Inicia proxify en el puerto predeterminado o en el que desees,
proxify -output chrome-logs
Inicia el navegador Chrome en macOS,
/Applications/Chromium.app/Contents/MacOS/Chromium --ignore-certificate-errors --proxy-server=http://127.0.0.1:8888 &
Inicia proxify en el puerto predeterminado o en el que desees:
proxify -output ffuf-logs
Ejecuta FFuF con el proxy apuntando a proxify:
ffuf -x http://127.0.0.1:8888 FFUF_CMD_HERE
Proxify está hecho con 🖤 por el equipo de projectdiscovery. Las contribuciones de la comunidad han hecho que el proyecto sea lo que es. Consulta el archivo Thanks.md para más detalles.