mitmproxy es una herramienta de consola interactiva, interfaz web y biblioteca de Python gratuita y de código abierto, diseñada para interceptar, inspeccionar, modificar y reproducir tráfico HTTP/S. Sirve como un potente proxy man-in-the-middle para desarrolladores, investigadores de seguridad e ingenieros de control de calidad que trabajan con aplicaciones web, APIs y tráfico móvil.
Descripción general de mitmproxy
mitmproxy opera como un servidor proxy, posicionado entre un cliente y un servidor de destino. Todo el tráfico HTTP y HTTPS que fluye a través del proxy puede ser visto, filtrado y manipulado en tiempo real. Su funcionalidad principal permite una inspección profunda de los encabezados, cuerpos y otros atributos de las solicitudes y respuestas. El conjunto de herramientas incluye:
- mitmproxy: Una interfaz de terminal interactiva para el análisis de tráfico en tiempo real.
- mitmweb: Una interfaz gráfica de usuario basada en navegador que ofrece una funcionalidad similar a
mitmproxypero accesible a través de un navegador web. - mitmdump: Una herramienta de línea de comandos para la modificación programática y el registro de tráfico, adecuada para scripting y automatización.
Características clave
Intercepción SSL/TLS
mitmproxy genera sus propios certificados SSL/TLS sobre la marcha, lo que le permite descifrar e inspeccionar el tráfico HTTPS cifrado. Esto requiere que el cliente confíe en el certificado CA de mitmproxy.
Interfaz interactiva
Tanto mitmproxy como mitmweb proporcionan entornos interactivos para ver y gestionar los flujos de tráfico. Los usuarios pueden filtrar flujos, buscar contenido, editar solicitudes/respuestas y marcar flujos específicos para su posterior análisis.
Modificación de tráfico
Las solicitudes y respuestas pueden modificarse sobre la marcha utilizando la interfaz interactiva o a través de scripts de Python. Esto permite probar casos extremos, inyectar encabezados, alterar datos o simular diferentes respuestas del servidor.
Funcionalidad de reproducción
mitmproxy admite la reproducción de solicitudes de cliente grabadas a un servidor o la reproducción de respuestas de servidor a un cliente. Esto es útil para probar escenarios específicos sin volver a ejecutar acciones del cliente o para simular el comportamiento del servidor.
Scripting y automatización
mitmdump proporciona una API de Python para desarrollar scripts personalizados. Estos scripts pueden inspeccionar, modificar, redirigir o descartar tráfico programáticamente basándose en una lógica definida, facilitando las pruebas automatizadas y la manipulación compleja del tráfico.
Modo de proxy transparente
mitmproxy puede operar en un modo de proxy transparente, donde los clientes no necesitan una configuración de proxy explícita. El tráfico de red se redirige a mitmproxy en la capa de red, a menudo a través de reglas de enrutador o configuraciones de firewall.
Instalación
mitmproxy se puede instalar usando pip:
pip install mitmproxy
Para sistemas operativos específicos, hay binarios precompilados disponibles en el sitio web oficial de mitmproxy, o se puede instalar a través de gestores de paquetes como Homebrew en macOS.
Uso básico
Inicio de mitmproxy
Para iniciar la interfaz de consola interactiva:
mitmproxy
Para iniciar la interfaz web:
mitmweb
Por defecto, mitmproxy escucha en localhost:8080.
Configuración del cliente
Los clientes deben configurarse para usar mitmproxy como su proxy HTTP/S.
Ejemplo de navegador (Firefox):
1. Abra la configuración de Firefox.
2. Navegue a Configuración de red o Configuración de proxy.
3. Seleccione "Configuración manual del proxy".
4. Establezca el Proxy HTTP en 127.0.0.1 y el Puerto en 8080.
5. Establezca el Proxy SSL en 127.0.0.1 y el Puerto en 8080.
6. Asegúrese de que "Usar este servidor proxy para todos los protocolos" esté marcado o configure otros protocolos de manera similar.
Sistema operativo (macOS):
1. Vaya a Configuración del Sistema > Red > Wi-Fi > Detalles.
2. Seleccione "Proxies".
3. Habilite "Proxy web (HTTP)" y "Proxy web seguro (HTTPS)".
4. Establezca el Servidor en 127.0.0.1 y el Puerto en 8080 para ambos.
Instalación del certificado SSL/TLS
Para descifrar el tráfico HTTPS, los clientes deben confiar en el certificado CA de mitmproxy.
1. Con mitmproxy en ejecución, navegue con el navegador de un cliente configurado a http://mitm.it.
2. Descargue e instale el certificado CA apropiado para el sistema operativo o navegador del cliente.
3. Para sistemas como Android o iOS, se requieren pasos de instalación específicos, que a menudo implican descargar el certificado y confiar manualmente en él en la configuración de seguridad.
Uso avanzado
Modificación de solicitudes y respuestas
Desde la interfaz de mitmproxy o mitmweb:
1. Seleccione un flujo.
2. Presione e (editar) para modificar la solicitud o respuesta.
3. Seleccione el componente a editar (por ejemplo, encabezados, cuerpo, URL).
4. Realice los cambios y presione q para guardar y continuar el flujo.
Scripting con mitmdump
Se pueden pasar scripts de Python a mitmdump para automatizar la manipulación del tráfico.
Ejemplo: Modificación de un encabezado de solicitud
modify_header.py:
from mitmproxy import http
def request(flow: http.HTTPFlow):
if "example.com" in flow.request.pretty_host:
flow.request.headers["X-Modified-By"] = "mitmproxy-script"
print(f"Modified header for {flow.request.url}")
Ejecutar con mitmdump:
mitmdump -s modify_header.py
Este script añade un encabezado personalizado X-Modified-By a las solicitudes dirigidas a example.com.
Ejemplo: Modificación del cuerpo de una respuesta
modify_response.py:
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "api.example.com/data" in flow.request.url and flow.response.content:
# Asumiendo que la respuesta es JSON
data = flow.response.json()
data["status"] = "modified_by_mitmproxy"
flow.response.set_json(data)
print(f"Modified response body for {flow.request.url}")
Ejecutar con mitmdump:
mitmdump -s modify_response.py
Este script intercepta las respuestas de api.example.com/data, las analiza como JSON, modifica un campo y envía el JSON modificado de vuelta al cliente.
Reproducción de flujos
mitmproxy permite reproducir flujos HTTP capturados.
Reproducir solicitud de cliente:
1. En mitmproxy o mitmweb, seleccione un flujo.
2. Presione r para reproducir la solicitud del cliente al servidor. Esto reenvía la solicitud exacta sin interacción del cliente.
Reproducir respuesta del servidor:
1. Seleccione un flujo.
2. Presione R (shift+r) para reproducir la respuesta del servidor al cliente. Esto envía la respuesta grabada del servidor de vuelta al cliente, omitiendo la interacción real con el servidor. Útil para probar el comportamiento del lado del cliente con respuestas específicas del servidor.
Casos de uso
- Desarrollo y depuración de API: Inspeccionar solicitudes y respuestas para comprender el comportamiento de la API, validar formatos de datos y depurar problemas de integración.
- Pruebas de seguridad: Identificar vulnerabilidades manipulando solicitudes (por ejemplo, inyectando SQL, cargas útiles XSS), probando mecanismos de autenticación y analizando tráfico cifrado.
- Análisis de aplicaciones móviles: Interceptar y analizar el tráfico de aplicaciones móviles para comprender su comunicación backend, manejo de datos y posibles fallos de seguridad.
- Ingeniería inversa: Deconstruir protocolos propietarios o comprender cómo las aplicaciones interactúan con servidores remotos observando sus comunicaciones de red.
- Pruebas automatizadas: Utilizar scripts de
mitmdumppara simular condiciones de red específicas, simular respuestas de API o realizar comprobaciones automatizadas del comportamiento de la aplicación.
mitmproxy vs. Otras herramientas proxy
Aunque varias herramientas ofrecen intercepción HTTP/S, mitmproxy se diferencia por su naturaleza de código abierto, su potente capacidad de scripting y sus interfaces flexibles.
| Característica | mitmproxy | Burp Suite Community Edition | Fiddler (Windows) |
|---|---|---|---|
| Licencia | Código abierto (MIT) | Propietaria (Niveles gratuito/de pago) | Propietaria (Niveles gratuito/de pago) |
| Capacidad de scripting | API de Python (mitmdump) |
Limitada (Extensiones vía Java/Python/Ruby) | FiddlerScript (JScript.NET), Extensiones .NET |
| Interfaz | Consola (mitmproxy), UI web (mitmweb) |
GUI de escritorio | GUI de escritorio |
| SSL/TLS | Intercepción completa | Intercepción completa | Intercepción completa |
| Modificación de tráfico | Sí | Sí | Sí |
| Reproducción | Sí (cliente/servidor) | Sí (Repeater) | Sí (Composer) |
| Proxy transparente | Sí | Sí | Sí |
| Público objetivo | Desarrolladores, investigadores de seguridad, automatización | Testers de penetración, seguridad de aplicaciones web | Desarrolladores, testers, seguridad de aplicaciones web |
| Plataforma | Multiplataforma (Linux, macOS, Windows) | Multiplataforma (basado en Java) | Windows, macOS (vía Fiddler Everywhere) |
Esta comparación destaca las fortalezas de mitmproxy en automatización y flexibilidad de código abierto, lo que la convierte en una opción robusta para usuarios técnicos que requieren un control profundo sobre sus flujos de trabajo de análisis de tráfico.