162 lines
5.8 KiB
Markdown
162 lines
5.8 KiB
Markdown
---
|
|
name: web_proxy
|
|
lang: bash
|
|
domain: cybersecurity
|
|
version: 0.1.0
|
|
description: "Proxy de interceptacion HTTP/HTTPS liviano y siempre activo (mitmproxy) para capturar todo el trafico de un navegador con rotacion temporal de capturas, alternativa ligera a ZAP/Burp."
|
|
tags: [service, web-proxy, mitmproxy, proxy, capture, cybersecurity, chromium]
|
|
icon:
|
|
phosphor: "shield-check"
|
|
accent: "#7c3aed"
|
|
uses_functions:
|
|
- start_mitm_capture_bash_cybersecurity
|
|
- query_mitm_flows_bash_cybersecurity
|
|
- rotate_capture_flows_py_cybersecurity
|
|
- launch_chromium_proxy_bash_browser
|
|
- port_kill_bash_infra
|
|
uses_types: []
|
|
framework: ""
|
|
entry_point: "web_proxy"
|
|
dir_path: "apps/web_proxy"
|
|
repo_url: ""
|
|
service:
|
|
port: 8080
|
|
health_endpoint: null
|
|
health_timeout_s: 3
|
|
systemd_unit: web_proxy.service
|
|
systemd_scope: user
|
|
restart_policy: always
|
|
runtime: systemd-user
|
|
pc_targets:
|
|
- home-wsl
|
|
is_local_only: true
|
|
e2e_checks:
|
|
- id: syntax
|
|
cmd: "bash -n web_proxy"
|
|
timeout_s: 10
|
|
- id: help
|
|
cmd: "./web_proxy help"
|
|
expect_stdout_contains: "proxy de interceptacion"
|
|
timeout_s: 10
|
|
- id: capture_roundtrip
|
|
cmd: "bash tests/e2e_capture.sh"
|
|
expect_stdout_contains: "CAPTURE_OK"
|
|
timeout_s: 40
|
|
---
|
|
|
|
# web_proxy
|
|
|
|
Proxy de interceptacion HTTP/HTTPS liviano y siempre activo, pensado como
|
|
alternativa ligera a OWASP ZAP y Burp Suite. Construido sobre `mitmproxy`
|
|
(footprint de decenas de MB frente a la JVM de ZAP/Burp) y compuesto a partir
|
|
de funciones del registry `fn_registry`.
|
|
|
|
## Que hace
|
|
|
|
- Levanta un proxy local (`mitmdump` headless) que registra **todo** el trafico
|
|
HTTP/HTTPS que pasa por el.
|
|
- **Rota las capturas** en archivos `.mitm` por ventanas de tiempo configurables
|
|
(default 20 minutos), de modo que puedas consultar el trafico de cada tramo
|
|
por separado.
|
|
- Corre **siempre activo** como servicio `systemd --user` con `Restart=always`,
|
|
o de forma manual con `start`/`stop`.
|
|
- Lanza un **Chromium proxeado** en un perfil aislado para no contaminar tu
|
|
navegacion normal.
|
|
- Permite **consultar** las capturas guardadas: volcado filtrado, exportacion a
|
|
HAR, o inspeccion visual en `mitmweb`.
|
|
|
|
## Ejemplo
|
|
|
|
```bash
|
|
cd apps/web_proxy
|
|
|
|
# Servicio siempre activo en el puerto 8080, capturas en ~/captures, rotando cada 20 min
|
|
./web_proxy install-service --port 8080 --out ~/captures --rotate-min 20
|
|
|
|
# Confiar en el CA de mitmproxy para que HTTPS no rompa
|
|
./web_proxy ca
|
|
|
|
# Navegar con todo el trafico capturado (Chromium en perfil aislado)
|
|
./web_proxy browser --url https://example.com
|
|
|
|
# Consultar la ultima ventana de captura
|
|
./web_proxy query "~m POST" # solo peticiones POST
|
|
./web_proxy query "~c 500" --all # respuestas 5xx en todas las capturas
|
|
./web_proxy har ~/captures/sesion.har
|
|
|
|
# Inspeccion visual en el navegador
|
|
./web_proxy inspect
|
|
|
|
# Estado y logs
|
|
./web_proxy status
|
|
./web_proxy logs
|
|
```
|
|
|
|
Modo manual (sin servicio):
|
|
|
|
```bash
|
|
./web_proxy start --port 8080 --out ~/captures --rotate-min 20
|
|
./web_proxy browser
|
|
./web_proxy query "~d api.github.com"
|
|
./web_proxy stop
|
|
```
|
|
|
|
## Cuando usarla
|
|
|
|
Cuando quieras registrar de forma continua y liviana todo lo que hace un
|
|
navegador (debug de APIs, auditoria de trafico, inspeccion de requests de una
|
|
SPA) sin arrancar la maquinaria pesada de ZAP o Burp, y poder volver a consultar
|
|
sesiones pasadas troceadas por ventanas de tiempo.
|
|
|
|
## Como consultar las capturas
|
|
|
|
Las capturas son archivos `.mitm` en el directorio de salida (`~/captures` por
|
|
defecto), con nombre `traffic-YYYYmmdd-HHMMSS.mitm`, uno por ventana de rotacion.
|
|
|
|
| Forma | Comando |
|
|
|---|---|
|
|
| Volcado filtrado (CLI) | `./web_proxy query "~m POST"` |
|
|
| Volcado de todas las ventanas | `./web_proxy query "~u /api" --all` |
|
|
| Exportar a HAR | `./web_proxy har salida.har` |
|
|
| Inspeccion visual (UI web) | `./web_proxy inspect [archivo.mitm]` |
|
|
| Directo con mitmproxy | `mitmproxy -r ~/captures/traffic-*.mitm` |
|
|
|
|
Sintaxis de filtros de mitmproxy: `~u` URL, `~d` dominio, `~m` metodo, `~c`
|
|
codigo de estado, `~bq`/`~bs` cuerpo de peticion/respuesta. Combinables con
|
|
`&` (y), `|` (o), `!` (no).
|
|
|
|
## Gotchas
|
|
|
|
- **HTTPS**: requiere confiar en el CA de mitmproxy. Ejecuta `./web_proxy ca`
|
|
para las instrucciones. El navegador que lanza `./web_proxy browser` usa
|
|
`--ignore-certificate-errors` si no instalas el CA, lo cual es comodo pero
|
|
menos seguro (vale para uso local de captura, no para navegacion sensible).
|
|
- **Durabilidad**: el addon de rotacion hace `flush()` tras cada flujo, asi que
|
|
las capturas sobreviven a un `kill -9` o un corte abrupto del proceso.
|
|
- **Rotacion por trafico**: la rotacion ocurre al recibir un flujo; si no hay
|
|
trafico durante la ventana, el archivo no rota hasta el siguiente request.
|
|
- **Persistencia tras logout**: el servicio `systemd --user` para al cerrar
|
|
sesion salvo que actives linger con `./web_proxy install-service --linger`.
|
|
- **Conflicto de puerto**: `start` y el servicio no pueden coexistir en el mismo
|
|
puerto. `install-service` para el proxy manual automaticamente antes de
|
|
arrancar el servicio.
|
|
- **Stop fiable**: el `stop` mata por PID guardado en el pidfile (no depende de
|
|
`lsof`/`port_kill`, que en este entorno no siempre detecta el listener a
|
|
tiempo).
|
|
|
|
## Arquitectura
|
|
|
|
Orquesta funciones del registry (no reimplementa logica reutilizable):
|
|
|
|
| Funcion del registry | Rol |
|
|
|---|---|
|
|
| `start_mitm_capture_bash_cybersecurity` | Arranca `mitmdump` headless con rotacion |
|
|
| `rotate_capture_flows_py_cybersecurity` | Addon de mitmproxy que trocea las capturas |
|
|
| `query_mitm_flows_bash_cybersecurity` | Consulta capturas guardadas (volcado / HAR) |
|
|
| `launch_chromium_proxy_bash_browser` | Lanza Chromium proxeado en perfil aislado |
|
|
| `port_kill_bash_infra` | Limpieza de puertos ocupados |
|
|
|
|
El CLI `web_proxy` aporta solo la logica especifica de la app: gestion del
|
|
pidfile, configuracion persistente, generacion del unit `systemd --user` y la
|
|
interfaz de subcomandos.
|