top of page

zap
⚡ ZAP
Zed Attack Proxy (ZAP) es una herramienta de seguridad de aplicaciones web desarrollada por OWASP (Open Web Application Security Project). Es utilizada principalmente para identificar vulnerabilidades en aplicaciones web y es adecuada tanto para principiantes como para profesionales avanzados en el campo del pentesting. Es una herramienta gratuita y de código abierto.
PRINCIPALES CARACTERÍSTICAS:
- Es multiplataforma, pudiendose instalar tanto en Windows como en Linux
- Intercepta le tráfico web a través del navegador o a través de un proxy
- Spidering (detectar automáticamente todos los enlaces y páginas asociadas)
- Escaneo pasivo (examina las solicitudes y respuestas, sin ejecutar ninguna acción sobre el objetivo)
- Escaneo activo (examina las solicitudes y respuestas, ejecutando acciones sobre el objetivo)
- Fuzzing (ejecutar parámetros que ayuden a encontrar vulnerabilidades que no se detectan con un escaneo)
- Informes (reporta las vulnerabilidades encontradas, adjuntando información y enlaces de referencia)
- Certificados SSL dinámicos (crear certificados root únicos para interceptar tráfico HTTPS)
- ZAP extensions (aplicaciones extra de la "tienda" de extensiones)
INSTALACIÓN:
sudo apt update
sudo apt install zaproxy
Una vez instalado y funcionando, cabe recordar que ZAP requiere que el tráfico web que pasa por nuestro navegador sea derivado al programa. Más abajo se detallan 3 formas de hacerlo usando proxies.
🔛 START ZAP
Desde terminal, EJECUTAR en segundo plano ocultando el output:
zaproxy &> /dev/null & disown
Una vez cargue el programa, por defecto escogeremos la opción de "no guardar sesión", salvo que nos interese por motivos que se explican más adelante. Clicamos start/iniciar para comenzar.


Ignoramos y cerramos el "administrador de complementos", que debería indicar que "ZAP está actualizado" y la versión.
En caso de requerir actualización, introducir por terminal:
sudo apt update
sudo apt install zaproxy

Vistazo rápido por la disposición del programa:

NOTA: Si cerramos la terminal con la que iniciamos el programa, éste se cerrará tambien.
first_steps
dark
idioma
🦊 USAR FIREFOX PRECONFIGURADO (MEJOR OPCIÓN)
Para empezar a usar ZAP de forma rápida y sencilla desde un sistema operativo Linux (que trae Firefox instalado por defecto), podemos iniciar dicho navegador con una preconfiguración especial haciendo click en el icono "Firefox" de ZAP:

Desde aquí podemos empezar a navegar y pasar el tráfico web directamente a ZAP sin ninguna complicación.
Es posible (sobre todo si es la primera vez que se usa ZAP) que este paso tire un error de "no se encontró el navegador".
Si pasa esto, actualizaremos ZAP y reiniciaremos la máquina.
MANEJAR EL FLUJO DEL TRÁFICO CON LOS BOTONES SUPERIORES:
🟢 Activar Interrupción en todas las Solicitudes y Respuestas.
🔴 Desactivar Interrupción en todas las Solicitudes y Respuestas.
|▷ Permite que la solicitud o respuesta atrapada continúe hacia la aplicación o tu navegador con cualquier cambio que
hayas hecho en ella. Este botón solo se habilita cuando una solicitud o respuesta está atrapada.
▷ El punto de interrupción 'global' se desconfigurará para que las solicitudes y respuestas posteriores ya no serán
capturadas por ZAP a menos que hayas configurado puntos de interrupción en URLs específicas.
Este botón solo se habilita cuando una solicitud o respuesta está atrapada.
zap_firefox
⬆️ ZAP SIEMPRE ENCIMA
En algunos casos ZAP nos pregunta si queremos que ZAP permanezca siempre sobre el resto de ventanas y programas.
Para editar este ajuste, debemos hacerlo desde Herramientas, Opciones, Puntos de interrupción (Breakpoints) y desactivar la opción.

Reiniciar programa para aplicar los cambios.
zap_OnTop
foxyproxy
🦊 USAR FOXY PROXY
FoxyProxy es una extensión de navegador que ofrece funcionalidades avanzadas de configuración de proxy para Chrome, Firefox y otros navegadores basados en Chromium como Opera, Edge y Vivaldi. Esta herramienta simplifica la configuración de proxies en el navegador y proporciona características como cambio automático de proxy, listas de reglas en línea, manejo de eventos y más.
Existen dos versiones de FoxyProxy: Basic y Standard. Ambas son gratuitas y ofrecen esencialmente las mismas características. La diferencia principal es que la versión FoxyProxy Standard incluye una función de Patrones de URL, que permite especificar qué sitios web deben ser accedidos con el proxy mediante listas blancas o negras de dominios deseados. Esta configuración utiliza expresiones regulares, lo cual es extremadamente útil cuando, por ejemplo, no se desea utilizar proxies para acceder a páginas web específicas en un sitio o viceversa.
FoxyProxy también se puede configurar con proxies de Oxylabs, lo que permite a los usuarios configurar proxies directamente para Chrome, Firefox y otros navegadores basados en Chromium. Esto incluye la configuración de proxies residenciales y de centro de datos de Oxylabs.
🌐 FireFox Addons
🌐 Google Chrome Store
FoxyProxy se ejecuta desde las pestañas del navegador. Para configurarlo, click en "options", "add proxy" y lo configuramos de la siguiente manera, por localhost 127.0.0.1 y por el puerto 8080 (que es el vector de escucha por defecto de ZAP):


ZAP
ZAP
⛔ TROUBLESHOOTING
Al empezar a navegar con FoxyProxy activado es posible que aparezca un aviso de conexión no segura:

ZAP
Para solucionarlo hay que ir a https://burp a descargar el CA Certificate, que ocupa 939 bytes. Para ello hay que clicar primero en "Advanced..." y "Accept the Risk and Continue":


Después se procede a instalar el certificado en el navegador (en el ejemplo, Firefox) iendo a "Settings", buscar en la caja por "cert", a "View Certificates", "Import", buscar e importar el archivo "cacert.der" activando la opción de "Trust this CA to identify webites", y OK a todo.

Ya no debería de aparecer el aviso de conexión no segura, y por tanto navegar con FoxyProxy activado en la configuración programada, para enviar el tráfico de red a Zap.
firefox_proxy
👁️ MANUAL EXPLORE
Para explorar manualmente una web desde el navegador (Firefox por defecto en Kali Linux) enviando el tráfico a ZAP, desde el menú de bienvenida, hacemos click en el rayo verde que dice "Manual Explore":

En "URL to explore" pegamos la dirección que vamos a explorar para a continuación lanzar el navegador por defecto con "Launch Browser":

Ahora encontraremos "sites" que aparecen en la izquierda relacionadas con la URL que exploramos (podemos limitar el espectro o scope de búsqueda pero lo veremos más adelante), y en el historial inferior, el tráfico web exponiendo el "método", la URL, el código de estado (200 es exitoso, ver códigos de estado aquí) y otros detalles.
Para visionar el tráfico HTTP en el "Requester", click derecho sobre la línea del historial deseada y "Open in Requester Tab". Desde ahí podemos modificar la Petición y lanzarla con el botón "Send" para ver el resultado en la ventana de Respuesta.

manual_xplore
📡 AUTOMATED SCAN
Para iniciar un escaneo automatizado de una URL, desde el menú de bienvenida hacemos click en el rayo azul que dice "Automated Scan":

En "URL to attack" pegamos la dirección que vamos a escanear para a continuación lanzar el ataque con el resto de opciones por defecto:

A partir de aquí, ZAP hace el resto. Podemos monitorizar el progreso en todo momento, observando las "sites" encontradas o relacionadas con el objetivo, así como la actividad de "Spider", "AJAX Spider" y el "Active Scan" (módulos de escaneo que se ejecutan en este orden durante el escaneo). Podemos pausar o detener el escaneo en cualquier momento.

Una vez finaliza el escaneo, podemos generar un Informe detallado en formato HTML, con la información de todas las vulnerabilidades detectadas y otra información relevante. Podemos generarlo desde

auto_scan
💉 SQL INJECTION DE EJEMPLO (PORTSWIGGER)
LABORATORIO DE PORTSWIGGER (requiere registro en la plataforma):
🌐https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
Una vez registrados, vamos a "Academy", "All content" y ahí "All labs".
Completaremos a modo de ejemplo con ZAP el primer laboratorio, uno de los más fáciles (nivel aprendiz).
Antes de acceder al laboratorio podemos leer alguna información y detalles, que se traducen así:
"Este laboratorio contiene una vulnerabilidad tip inyección SQL en el filtro de categoría. Cuando el usuario selecciona una categoría, la aplicación corre la siguiente petición SQL"
SELECT * FROM products WHERE category = 'Gifts' AND release = 1
"Para resolver este laboratorio, ejecta un ataque de inyección SQL que cause a la aplicación mostrar los productos ocultos"
INFORMACIÓN ADICIONAL:
La base de datos contiene una vulnerabilidad en el filtro de categoría de producto, que permite mostrar los productos que por defecto quedan ocultos (bajo la etiqueta "unreleased" o "no publicados"). El objetivo del laboratorio sería conseguir mostrar esos productos ocultos engañando a la base de datos.
Clickamos en una categoría, en este caso, por ejemplo, en la categoría "Lifestyle", donde vemos que solo hay publicados 3 productos (habría más productos ocultos que ahora no vemos).
Copiamos la URL del navegador y la introducimos en "URL to explore" de la opción "Manual Explore" de ZAP y lanzamos el navegador Firefox (por defecto en Kali Linux):
https://0ac80012031a19f581b2ca440089001a.web-security-academy.net/filter?category=Lifestyle
ZAP habrá analizado la conexión con la web, mostrando "sites" relacionadas a la izquierda y tráfico HTTP en el historial de abajo. Click derecho sobre la primera entrada y "Open in Requester" para enviarlo a las ventanas de "Petición" y "Respuesta":
Cuando el usuario selecciona una categoría (en este caso "Lifestyle"), la QUERY interna de la base de datos es:
SELECT * FROM products WHERE category = 'Lifestyle' AND released = 1
La query selecciona todo valor de la tabla "productos" donde la categoría "Lifestyle" y "publicados" sean "verdaderos".
PARTE VULNERABLE DE LA URL:
.../filter?category=Lifestyle
--------------------------------------------------------------------------------------------------------------------------------------------------------
Desglose de la URL al seleccionar una categoría:
http:// (Protocolo usado para la comunicación. Puede ser http o https (este último con cifrado SSL/TLS)
ejemplo.com (Es el dominio del servidor al que se está haciendo la solicitud. En este caso una tienda online)
/ (Separador)
filter (Subdominio que aplica en la web un filtro por categorias de la base de datos)
?category=Lifestyle (Cadena de consulta (query string) que nos direcciona a la categoría existente "Lifestyle")
Desglose de la Cadena de Consulta:
? (Separador. Indica el inicio de los parámetros de consulta)
category (Nombre del parámetro. Indica filtrar por categoría. Se deduce que "category" es una tabla de la base de datos)
= (Parámetro de enlace entre la categoría (tabla) y un producto (columna de la tabla))
Lifestyle (Nombre de parámetro. Indica nombre de categoría. Se deduce que "Lifestyle" es una columna de la tabla)
INYECCIÓN SQL EN LA URL y enviar con el botón SEND:
http://. . ./filter?category=Lifestyle' or 1=1-- -
Con los parámetros introducidos, en el caso de éste laboratorio, obtenemos una respuesta exitosa de la base de datos, mostrando TODOS los productos de la categoría "Lifestyle", en este caso tanto los productos públicos como los ocultos.
De esto: http://. . ./filter?category='Pets' AND released =1
A esto: http://. . ./filter?category=Pets' or 1=1-- -
Desglose de la Cadena de Consulta con la Inyección:
' (Cierra la cadena)
or (Condicional "o")
1=1 (True Statement. Ordena que se cumplan las condiciones)
-- - (Equivale a "introducir comentario". También "#")
--------------------------------------------------------------------------------------------------------------------------------------------------------
SE DEDUCE EL SIGUIENTE ESQUEMA DE LA BASE DE DATOS:
[BASES DE DATOS]
Shop.com <--------- [TABLAS]
Products <--------- [COLUMNAS]
id
name
category <--------- [Pets]
price
details
released <--------- [True]
unreleased <--------- [True]
--------------------------------------------------------------------------------------------------------------------------------------------------------
El resultado que obtendríamos en el navegador sería visualizar nuevos productos en la categoría "Lifestyle" y el mensaje de "Congratulations, you solved the lab".









sqli_example
bottom of page