Saltar al contenido
Portada » Blog – Laprovittera Carlos » Herramientas Avanzadas de ZAP

Herramientas Avanzadas de ZAP

En este capítulo, Herramientas Avanzadas de ZAP, vas a dominar un conjunto de complementos y funcionalidades avanzadas de OWASP ZAP que amplían enormemente su alcance: importación y testing de GraphQL, manejo de gRPC, utilidades de codificación/decodificación/hash, pruebas out-of-band (OAST) con Interactsh/BOAST, descubrimiento de parámetros (Param Digger), reemplazos automáticos en tráfico, control de navegadores con Selenium, grabación y escaneo de secuencias (Zest), soporte SOAP/WSDL, y todo lo relacionado con automatización e integración.

Este artículo se ha creado basado en la guía oficial de ZAP. Se han actualizados las imágenes, agregado ejemplos, prácticas y nuevo contenido para completar el material original. ¿Por qué es útil y necesario en tu carrera como hacker? Porque las aplicaciones modernas usan APIs (GraphQL, gRPC), comunicaciones asíncronas y flujos complejos que requieren herramientas especializadas: estas funcionalidades te permiten generar consultas, inyectar payloads, inspeccionar/editar mensajes binarios (protobuf), detectar y explotar interacciones fuera de banda, automatizar autenticaciones y flujos multi-paso, y producir pruebas reproducibles. En otras palabras: te permiten atacar aplicaciones reales, modernas y complejas con precisión, velocidad y evidencia.

Table of Contents

El Campo de Batalla Ha Cambiado. 

Tus Herramientas También Deben Hacerlo.  Las aplicaciones modernas no son monolitos. Se construyen sobre APIS complejas como GraphQL y gRPC, utilizan flujos asíncronos y operan con lógicas de negocio multi-paso. Para atacar estas aplicaciones con precisión, velocidad y evidencia, necesitas un arsenal especializado. Este deck es tu guía para dominarlo.

  • Atacar APIS  modernas (GraphQL, gRPC).
  • Analizar comunicaciones asíncronas.
  • Automatizar flujos de autenticación complejos.
  • Producir pruebas reproducibles y contundentes.

Hoja de Ruta del Arsenal

Dominio de GraphQL: Deconstrucción, generación de consultas y escaneo activo de APIS GraphQL.

El Arte de la Transformación: Uso experto de las utilidades de Codificar, Decodificar y Hashear para manipular datos.

Dominio de GraphQL

Este complemento de ZAP permite importar esquemas GraphQL, generar automáticamente consultas complejas y, lo más importante, habilitar el escaneo activo para encontrar vulnerabilidades. Analiza cualquier definición dentro del alcance en ZAP 2.10.0 y versiones posteriores.

El poder real reside en la personalización. El panel ‘Opciones -> GraphQL* te da control total sobre cómo ZAP genera las consultas.

Control de Profundidad

Profundidad máxima de consulta: Límite de anidamiento de la consulta.

Profundidad máxima de consulta indulgente: Permite profundidad adicional para evitar consultas inválidas.

Profundidad de consulta adicional: Valor extra usado si la opción indulgente está activa.

Manejo de Argumentos

Profundidad máxima de argumentos: Controla la profundidad de los objetos de entrada como argumentos.

Especificar argumentos opcionales: Incluye argumentos que aceptan valores nulos.

Especificar argumentos: Define cómo se inyectan: ‘En línea’, ‘Uso de variables’ o ‘Ambos’.

Estrategia y Método

Generar consulta para: Elige el objetivo: ‘cada Hojas, ‘cada campo bajo un tipo de operación raíz’, o ‘cada tipo de operación raíz’.

Método de solicitud: POST (con ‘application/ j son’ o ‘application/graphql’) o GET (con la consulta en la URL).

Compatibilidad con GraphQL

Este complemento le permite importar definiciones GraphQL y enviar consultas generadas a partir de ellas. El complemento detectará automáticamente cualquier definición de GraphQL y la analizará mientras esté dentro del alcance. El análisis es compatible con ZAP 2.10.0 y versiones posteriores.

Interfaz de usuario

Se agrega un elemento de menú al menú Importar:

  • Importar un esquema GraphQL

Formato de URL del punto final

La URL del punto final tiene el siguiente formato:

scheme://authority/path

con todos los componentes URI obligatorios al importar desde un archivo.

Panel de opciones

Se ha añadido un panel de opciones de GraphQL en Herramientas -> Opciones -> GraphQL. Estas opciones permiten controlar la salida del generador de consultas.

Opciones de GraphQL

En este documento, una «Consulta» puede referirse a una consulta, suscripción o mutación de GraphQL.

Configuración del generador de consultas

El generador de consultas utiliza el esquema importado para generar consultas para el punto final de destino. Si está habilitado, puede configurarse con las siguientes opciones.

  • Profundidad máxima de consulta La profundidad máxima de una consulta generada.
  • Profundidad máxima de consulta indulgente Si está habilitada, esta opción evita consultas no válidas al permitir una profundidad adicional para campos sin tipos de hoja. Si está deshabilitada, se aplica estrictamente la Profundidad Máxima de Consulta, incluso si esto implica generar una consulta no válida.
  • Profundidad de consulta adicional El valor de esta opción solo se utiliza si la opción «Profundidad máxima de consulta indulgente» está habilitada. La profundidad adicional máxima utilizada para buscar campos de tipo hoja. Si no se encuentra un tipo de hoja, la consulta generada podría no ser válida y se registrará un mensaje.
  • Profundidad máxima de argumentos La profundidad máxima de los argumentos especificados. Esto es útil cuando un campo tiene un objeto de entrada como argumento.
  • Especificar argumentos opcionales Si se selecciona esta opción, también se especificarán argumentos opcionales (que aceptan valores nulos).
  • Especificar argumentos Elija cómo se deben agregar los argumentos del campo en la consulta generada.
    • En línea
    • Uso de variables
    • Ambos: cada consulta se enviará dos veces, una con argumentos en línea y otra con variables.
  • Generar consulta para Se puede generar una consulta independiente para cualquiera de los siguientes en el esquema proporcionado,
    • cada Hoja, es decir cada escalar o enumeración;
    • cada campo bajo un tipo de operación raíz (Consulta, Mutación o Suscripción); o
    • cada tipo de operación raíz.
  • Método de solicitud Las solicitudes realizadas al endpoint pueden ser de los siguientes tipos:
    • Una solicitud POST con un cuerpo JSON (Content-Type: application/json)
    • Una solicitud POST con una consulta GraphQL en el cuerpo (Content-Type: application/graphql)
    • Una solicitud GET con la consulta adjunta en una cadena de consulta

Variante de GraphQL

La variante GraphQL es responsable de dos cosas:

  1. Representar correctamente los nodos de una solicitud GraphQL en el árbol de sitios.
  2. Permitir inyectar cargas útiles en consultas GraphQL (compatibilidad con vector de entrada de escaneo activo).

En las siguientes secciones explicaremos un poco más cada una de estas funcionalidades.

Representación del árbol de sitios

Cada solicitud única de GraphQL enviada mediante ZAP se representa en el árbol de sitios. Las solicitudes se ubican en un nodo común si tienen las mismas operaciones. Dos consultas con los mismos campos se representarán mediante el mismo nodo. La única excepción es cuando una consulta se envía con argumentos en línea y también utiliza variables. En este caso, se añade un prefijo de «0» o «1» para distinguirlas respectivamente. Por ejemplo, la siguiente figura ilustra cómo se pueden representar dos solicitudes en el árbol de sitios.

La Variante GraphQL

La ‘Variante GraphQL’ es el motor que hace dos cosas críticas: representar las solicitudes de forma legible en el Árbol de Sitios y permitir la inyección de payloads para el escaneo activo.

Representación en el Árbol de Sitios: Cada solicitud GraphQL única se mapea en el árbol. Las solicitudes con las mismas operaciones se agrupan en un nodo común para simplificar el análisis.

Vectores de entrada de escaneo activo

Se inyectan valores para los argumentos en línea en todas las consultas enviadas por proxy a través de ZAP. Si una consulta utiliza variables, estas se reemplazan en línea y se eliminan sus definiciones. Tenga en cuenta que, a menos que esté deshabilitado, el controlador integrado de vectores de entrada JSON también funciona cuando una solicitud se envía como JSON. Aquí es donde la configuración se convierte en acción. ZAP inyecta automáticamente valores en los argumentos en línea de todas las consultas que pasan por el proxy.

  • Si una consulta utiliza variables, estas se reemplazan para convertirse en argumentos en línea y sus definiciones se eliminan.
  • Esto permite que el escáner activo pruebe cada parámetro de entrada de la API.
  • Importante: El controlador de vectores de entrada JSON integrado también funciona en paralelo cuando la solicitud se envía como JSON, duplicando la superficie de prueba.

Cuadro de diálogo Codificar / Decodificar / Hash

Esto le permite codificar, decodificar o convertir texto en hash. Una herramienta fundamental para cualquier análisis. Este diálogo te permite transformar texto sobre la marcha, esencial para crear payloads, ofuscar datos o simplemente interpretar tráfico no estándar.

Campos comunes

El cuadro de diálogo tiene un campo que es común a todas las pestañas:

Texto a codificar/decodificar/hacer hash:

Este campo contiene el texto que desea codificar, decodificar o aplicar hash. Si se selecciona algún texto al abrir el cuadro de diálogo, se guardará en este campo. Los demás campos se actualizarán dinámicamente si se modifica el texto.

Barra de herramientas

Agregar nueva pestaña: agrega una nueva pestaña al cuadro de diálogo.

Eliminar pestaña seleccionada: elimina la pestaña seleccionada (o actual) del cuadro de diálogo.

Agregar panel de salida a la pestaña actual: agrega un panel de salida a la pestaña actual.

  • Restablecer: restablece todas las pestañas/paneles a su estado predeterminado.
  • Opciones: abrirá el cuadro de diálogo de opciones, con el foco establecido en el panel de opciones Codificar/Decodificar/Hash.
  • Ayuda: abrirá la Guía del usuario, con el panel de contenido predeterminado en la página de ayuda del complemento Codificar/Decodificar/Hash.

Menú contextual del panel(es) de salida

  • Buscar: abre un cuadro de diálogo de entrada estándar para permitir la búsqueda dentro de un área de texto.
  • Copiar: Funcionalidad de copia estándar.
  • Pegar: Funcionalidad de pegado estándar.
  • Eliminar panel de salida: elimina el área de texto de salida relevante.
  • Reemplazar texto de entrada: reemplaza el contenido del texto de entrada según la selección o el contenido completo del área de texto de salida correspondiente. (Solo está activo si el área de texto tiene contenido).

Pestañas y paneles de diálogo predeterminados

En su estado predeterminado, el cuadro de diálogo Codificar/Decodificar/Hash muestra pestañas y paneles de salida con la siguiente configuración:

Codificar campos de pestañas

  • Codificación base 64
  • Codificación de URL base 64
  • Codificación de URL
  • Codificación de URL completa
  • Codificación hexadecimal ASCII
  • Codificación HTML
  • Codificación HTML completa
  • Codificación JavaScript

Decodificar campos de pestañas

  • Descodificación de base 64
  • Descodificación de URL base 64
  • Descodificación de URL
  • Descodificación completa de URL
  • Descodificación hexadecimal ASCII
  • Decodificación HTML
  • Descodificación de JavaScript

Campos de pestaña hash

  • Hash SHA256
  • Hash SHA1
  • Hash MD5

UTF-8 ilegal

  • 2 bytes
  • 3 bytes
  • 4 bytes

Unicode

  • Texto escapado
  • Texto sin escape

Procesadores de codificación/descodificación/hash predefinidos

Codificadores

  • UTF-8 ilegal de 2 bytes Se mostrará con una secuencia de caracteres UTF-8 ilegal con 2 bytes.
  • UTF-8 ilegal de 3 bytes Mostrará una secuencia de caracteres UTF-8 ilegal con 3 bytes.
  • UTF-8 ilegal de 4 bytes Mostrará una secuencia de caracteres UTF-8 ilegal con 4 bytes.
  • Codificación hexadecimal ASCII Mostrará la codificación hexadecimal ASCII del texto que ingrese.
  • Codificación base 64 Mostrará la codificación base 64 del texto que ingrese.
  • Codificación de URL base 64 Mostrará la codificación URL en base 64 del texto ingresado. Base64URL es una modificación del estándar base 64 principal, cuyo propósito es permitir usar el resultado de la codificación como nombre de archivo o dirección URL. Base64URL se describe en la RFC 4648 , que indica que el alfabeto base 64 estándar incluye caracteres no válidos para URL y nombres de archivo (por ejemplo, el signo más y el signo de interrogación son problemáticos). El estándar principal codificará <<???>>a, PDw/Pz8+Pg==mientras que Base64URL lo convertirá a PDw_Pz8-Pg.
  • Texto Unicode escapado Se mostrarán los caracteres Unicode escapados. Por ejemplo, el texto Açoresse codificaría como %u0041%u00e7%u006f%u0072%u0065%u0073.
  • Codificación HTML Mostrará la codificación HTML del texto que introduzca. Por ejemplo, el texto «piñata»se codificaría como &quot;pi&ntilde;ata&quot;.
  • Codificación HTML completa Mostrará la codificación HTML completa del texto que introduzca. Por ejemplo, el texto <script>se codificaría como&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;
  • Codificación JavaScript Mostrará los literales JavaScript escapados del texto que introduzca. Por ejemplo, el texto «2¢»se codificaría como \»2\uFFE0\».
  • Codificación de URL Mostrará la codificación URL del texto que ingrese.
  • Codificación de URL completa Mostrará la codificación URL completa del texto que ingrese (todos los caracteres convertidos a HEX y el porcentaje añadido).
  • Texto Unicode sin escape Se mostrarán los caracteres Unicode sin escape. Por ejemplo, el texto %u0041%u00e7%u006f%u0072%u0065%u0073se decodificaría como Açores.
  • Codificador de código Morse Se mostrarán puntos (.), rayas (-) y saltos de línea (/) que representan la entrada alfanumérica (incluido el espacio). Por ejemplo, el texto SOS SOSse codificaría como … — …/… — ….

Decodificadores

  • Descodificación hexadecimal ASCII Mostrará la decodificación hexadecimal ASCII del texto ingresado. Si no hay una decodificación válida, el campo se desactivará.
  • Descodificación de base 64 Mostrará la decodificación en base 64 del texto ingresado. Utiliza un decodificador MIME para gestionar el ajuste de línea.
  • Descodificación de URL base 64 Mostrará la decodificación URL en base 64 del texto ingresado. Base64URL es una modificación del estándar base 64 principal, cuyo propósito es permitir usar el resultado de la codificación como nombre de archivo o dirección URL. Base64URL se describe en la RFC 4648 , que indica que el alfabeto base 64 estándar incluye caracteres no válidos para URL y nombres de archivo (por ejemplo, el signo más y el signo de interrogación son problemáticos).
  • Decodificación HTML Mostrará la decodificación HTML del texto ingresado. Por ejemplo, el texto &quot;pi&ntilde;ata&quot;se decodificaría como «piñata».
  • Descodificación de JavaScript Mostrará los literales JavaScript sin escape del texto que introduzca. Por ejemplo, el texto \»2\uFFE0\»se decodificaría como «2¢».
  • Descodificación de URL Mostrará la decodificación URL del texto que ingrese.
  • Descodificación completa de URL Mostrará la decodificación de la URL del texto que ingrese (signos de porcentaje eliminados y HEX decodificado).
  • Decodificador de código Morse Se mostrará una salida alfanumérica (con espacios) que representa la entrada de código Morse. Por ejemplo, el texto … — …/… — …se codificaría como SOS SOS.

Hashers

  • Hash MD5 Mostrará el hash MD5 del texto que ingrese.
  • Hash SHA1 Mostrará el hash SHA1 del texto que ingrese.
  • Hash SHA256 Mostrará el hash SHA256 del texto que ingrese.

Otros procesadores

Los siguientes procesadores también se pueden agregar a cualquier pestaña.

  • Costumbre Se pueden crear o añadir scripts personalizados de «Codificación/Decodificación» al Árbol de Scripts para que los paneles de salida personalizados los utilicen. Deberían devolver EncodeDecodeResultlos objetos indicados en las plantillas. Sin embargo, si los usuarios no tienen cuidado al hacerlo, devolverán otros tipos de datos aprovechando su toString()implementación (lo cual puede resultar útil o obvio a primera vista).

Utilidad

  • A minúsculas Convierte la entrada a todos los caracteres en minúscula.
  • Eliminar espacios en blanco Elimina todos los caracteres de espacio en blanco del texto, según Character.isWhiteSpace(char) .
  • Contrarrestar Invierte el orden de la entrada.
  • A mayúsculas Convierte la entrada a todos los caracteres en mayúsculas.
  • ASCificar Convierte texto eliminando acentos, diacríticos y ligaduras (quizás no completamente, debido al funcionamiento en modo de compatibilidad), dejando solo caracteres ASCII. Ejemplos:
    • Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ: fi. étrange.se convierte en This is a funky String: fi. etrange..
    • 鸟儿Se convierte en una cadena vacía (se omiten todos los caracteres). Véase también:
  • Misceláneas
  • Codificación de PowerShell

Convertido a UTF-16LE y codificado en base64. Equivalente a uno de los siguientes ejemplos (codificación «dir»):

printf «dir»| iconv -t UTF-16LE | base64 -w 0 –

$command = ‘dir’
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
echo $encodedCommand

Resultando en: ZABpAHIA.

Lo cual se puede aprovechar a través de algo como lo siguiente (donde $encodedCommandse establece en el valor codificado ZABpAHIA):

powershell -exec bypass -enc $encodedCommand

Pantalla de opciones Codificar/Decodificar

Esta pantalla le permite configurar las opciones de Codificación/Decodificación/Hash :

  • Base64 – Juego de caracteres Permite al usuario seleccionar qué conjunto de caracteres debe utilizarse para las conversiones Base64.
  • Base64 – Líneas de ruptura Indica si la codificación Base64 debe dividir o no líneas de 76 caracteres (estándar MIME).
  • Hashers: ¿Siempre imprimir en minúsculas? Indica si la salida de los procesadores Hash predefinidos debe ser siempre en minúsculas o no (mayúsculas).

Compatibilidad con Grpc

Este complemento le permitirá inspeccionar, atacar puntos finales de gRPC, decodificar y codificar mensajes protobuf. El complemento aún se encuentra en una etapa inicial, por lo que su funcionalidad es limitada. Sin embargo, puede combinarlo con la funcionalidad ZAP existente para aprovechar al máximo los endpoints de gRPC de diversas maneras.

El complemento gRPC

Este complemento tiene como objetivo simplificar el proceso de prueba al proporcionar herramientas para:

  • Codificación y decodificación : codifique y decodifique fácilmente mensajes Protobuf para fines de prueba.
  • Prueba de puntos finales de gRPC : puede combinarlo con la funcionalidad ZAP existente para abusar de los puntos finales de gRPC de muchas formas diferentes.

Cómo ver el mensaje decodificado de gRPC

En el panel Vista de mensaje, cambie el Cuerpo a gRPC. 

Comprensión de los mensajes decodificados de Protobuf

Al decodificar mensajes de Protobuf, es fundamental comprender la estructura de los datos decodificados. Los mensajes de Protobuf constan de campos, cada uno con un número de campo, un tipo de cable y un valor. Profundicemos en estos componentes:

Estructura del campo

  • Número de campo : A cada campo de un mensaje de Protobuf se le asigna un número único. Este número se utiliza para identificar y distinguir los diferentes campos dentro del mensaje.
  • Tipo de cable : el tipo de cable determina cómo se codifica el valor del campo y proporciona información sobre el tipo de datos almacenados en el campo.
  • Valor : Los datos reales contenidos dentro del campo, codificados según su tipo de cable.

Comprendamos la estructura del mensaje Protobuf decodificada usando el siguiente ejemplo

Esta es la forma codificada en Base64 del texto binario recibido por ZAP.

AAAAAIYJZCZMzMzcXkAVrseHQhi5YCDqrcDlJCixqAM1QEIPADOQSGVsbG8sIFByb3RvYnVmIUJMCgsxMjMgTWFpbiBTdBIGT X1DaXR5GgUxMjMONSIuCgtIZWxsbyBXb3JsZBIITXkgV29ybGQaCllvdXIgV29ybGQiCU91ciBXb3JsZEjqrcDLJA==

A la izquierda, tenemos el mensaje original recuperado por el endpoint gRPC en el backend. A la derecha, tenemos el mensaje decodificado del texto codificado anterior, procesado por el complemento ZAP gRPC.

  • Cada campo del mensaje se representa como “número de campo:tipo de cable::valor”.
  • Cada par clave-valor comienza en una nueva línea.
  • Los especificadores adicionales solo se utilizan para mensajes dobles ( 1D), flotantes ( 5F) y anidados ( 2N).
  • Para el tipo de cable 2, el valor debe estar entre comillas dobles, excepto para los mensajes anidados ( 2N).
  • Para mensajes anidados( 2N):
    • Después del número de campo y el tipo de cable ( fieldNumber:2N::), se coloca una llave abierta y se comienzan a agregar campos de mensajes anidados desde una nueva línea.
    • El mensaje anidado se cierra con una llave de cierre en una nueva línea separada.
  • Por favor, no utilice espacios innecesarios.

Escritura y edición de mensajes decodificados de Protobuf

Solo puede editar este mensaje decodificado en la ventana del editor de solicitud manual y del solicitante; simplemente cambie la parte después de («::») que contiene el valor o puede escribir nuevos campos siguiendo las reglas mencionadas anteriormente.

Variante de gRPC

La variante gRPC permite inyectar cargas útiles en valores gRPC (compatibilidad con vector de entrada de escaneo activo).

 

Vectores de entrada de escaneo activo

Los valores personalizados se inyectan en todos los pares clave-valor en todos los valores gRPC que se procesan mediante ZAP.

Compatibilidad con gRPC WebSocket

La función de compatibilidad con gRPC WebSocket permite que el complemento WebSocket decodifique y codifique mensajes gRPC sin problemas. Esta integración permite a los usuarios inspeccionar, modificar y gestionar la comunicación gRPC a través de WebSockets.

Soporte para pruebas de seguridad de aplicaciones fuera de banda

El complemento de soporte OAST le permite detectar y explotar vulnerabilidades fuera de banda en aplicaciones web.

  • Servicios Para obtener una lista de los servicios admitidos, consulte la página de Servicios OAST .
  • Menú contextual Un menú contextual, “Insertar carga útil OAST”, está disponible en los componentes de texto editables que permiten insertar nuevas cargas útiles de los servicios OAST compatibles.
  • Guiones Si se instalan la Consola de Scripts y los complementos JavaScript de GraalVM , se añade a ZAP una nueva plantilla de script de Extender llamada «OAST Request Handler.js». Con esta plantilla, puede crear un script que realice una acción al detectar una solicitud fuera de banda. Esta acción podría ser, por ejemplo, enviarse un correo electrónico o ejecutar otro script en ZAP.

Opciones de OAST

Un panel con pestañas le permite configurar los servicios OAST disponibles.

Configuración general

Estas son opciones que no son específicas de un solo servicio OAST.

  • Servicio de escaneo activo Un menú desplegable que le permite seleccionar el servicio fuera de banda que utilizarán las reglas de escaneo activas.
  • Base de datos permanente Al habilitar la opción «Usar base de datos permanente», podrá conservar las cargas útiles fuera de banda registradas en la base de datos permanente de ZAP. Estas cargas se cargarán en la memoria y se sondearán junto con otras cargas útiles según el intervalo de sondeo establecido. Actualmente, la base de datos permanente solo es compatible con el servicio BOAST. NOTA : Esto significa que podrían aparecer alertas en una sesión de ZAP que no esté relacionada directa o específicamente con la evaluación/escaneo original.
  • Días para mantener registros El número de días que se conservarán los registros en la Base de Datos Permanente. Los registros solo se eliminarán al iniciar ZAP o si guarda las opciones con un valor inferior en «Días para conservar registros».
  • Borrar todos los registros Este botón eliminará todos los registros de la Base de Datos Permanente. No recibirá alertas OOB por los registros eliminados.

Configuraciones específicas del servicio

Consulta la página de opciones individuales de cada servicio para obtener más información sobre las configuraciones disponibles para ese servicio.

Servicios OAST

El complemento OAST actualmente admite los siguientes servicios:

  • BOAST
  • Devoluciones de llamadas
  • Interactsh

BOAST

BOAST es un servidor creado para recibir e informar interacciones de pruebas de seguridad de aplicaciones fuera de banda. BOAST cuenta con receptores de protocolo DNS, HTTP y HTTPS con soporte para múltiples puertos simultáneos para cada receptor. Las solicitudes realizadas a BOAST por la aplicación web de destino se pueden ver en la pestaña Devoluciones de llamadas OAST en la GUI de ZAP.

Scripts

Si se instalan la Consola de Scripts y los complementos JavaScript de GraalVM , se añade a ZAP un nuevo script llamado «OAST Get BOAST Servers.js». Este script imprime toda la información disponible relacionada con los servidores BOAST registrados. Su objetivo principal es mostrar cómo interactuar con BOAST desde un script. Esto le permitirá escribir otros scripts que utilicen las cargas útiles de BOAST y los valores canarios para realizar ataques fuera de banda.

Opciones BOAST

La pantalla Opciones de BOAST le permite configurar los ajustes que afectan la forma en que ZAP interactúa con los servidores BOAST.

  • URI del servidor Esta dirección debe apuntar a la URI que se utilizará para registros y sondeos. Una URI válida incluirá el esquema, el host, el puerto y el /eventspunto final. El host debe ejecutar una instancia de BOAST en funcionamiento.
  • Un ejemplo de una URI válida es: https://example.com:1337/events.
  • Frecuencia de sondeo Esta opción permite cambiar la frecuencia de sondeo de los servidores BOAST registrados. Se expresa en segundos. El valor mínimo permitido es de 10 segundos y el máximo de 21 600 segundos (6 horas). El valor predeterminado es de 60 segundos.
  • Servidores activos Esta tabla muestra las cargas útiles y los valores Canary de todos los servidores BOAST registrados. Se añade una entrada cada vez que se registra un nuevo servidor BOAST.
  • Carga útil La carga útil es la dirección de un servidor BOAST activo que se puede utilizar en ataques fuera de banda.
  • Canario El valor Canary es una cadena aleatoria que se devuelve a la aplicación web de destino cuando realiza una solicitud a la dirección de carga útil correspondiente. Considere un ejemplo de cómo se podría utilizar este valor: si la aplicación web de destino termina usando el valor canario en algún lugar, entonces puede ser vulnerable a ataques de inyección fuera de banda.

 

Devoluciones de llamadas – callback

Varios componentes de ZAP (reglas de escaneo, etc.) pueden aprovechar cargas útiles que generan solicitudes HTTP a ZAP. Estas solicitudes de devolución de llamada pueden ser activadas por las arañas, un usuario o una acción futura de un sistema terciario. La GUI de ZAP incluye un panel en el que se pueden revisar dichas solicitudes: pestaña OAST .

Opciones de devolución de llamada

La pantalla Opciones de devolución de llamada le permite configurar la dirección utilizada para detectar vulnerabilidades que permiten a un atacante llamar a URL remotas.

En versiones anteriores se utilizaba la API ZAP para este propósito, pero desde la versión 2.6.0 en adelante se utiliza un punto final separado para que los sistemas de destino ya no necesiten acceso a la API.

  • Dirección local (por ejemplo, 0.0.0.0) La dirección local en la que ZAP escuchará las conexiones entrantes. El valor predeterminado «0.0.0.0» significa que ZAP escuchará en todas las direcciones locales disponibles.
  • Dirección remota La dirección que se especificará en los ataques relevantes. Esta dirección debe ser accesible desde el sistema objetivo. Puede usar la URL de prueba para comprobarlo.
  • Puerto aleatorio De forma predeterminada, ZAP usará un puerto diferente cada vez que se ejecute. Si necesita usar el mismo puerto (por ejemplo, para permitir el acceso a través de firewalls), desmarque esta opción.
  • Especificar puerto Si la opción «Puerto aleatorio» no está marcada, este es el puerto en el que ZAP escuchará. Debe ser diferente de los demás puertos que usa ZAP, por ejemplo, el puerto que usa para las conexiones proxy.
  • URL de prueba Esta es la URL de prueba a la que puede acceder desde sistemas remotos. Todos los accesos a la URL de prueba se registrarán en el archivo de registro ZAP en el nivel INFO. Si utiliza la interfaz de usuario de ZAP, los accesos también se mostrarán en la pestaña Salida, así como en la pestaña OAST .

Interactsh

Interactsh es una solución de código abierto para la extracción de datos fuera de banda.

Características

  • Compatibilidad con la interacción DNS/HTTP/SMTP
  • Cifrado AES sin registro
  • Soporte de servidor autoalojado
  • TLS comodín automático basado en ACME con renovación automática

Las solicitudes realizadas a Interactsh por la aplicación web de destino se pueden ver en la pestaña Devoluciones de llamadas OAST en la GUI de ZAP.

Opciones de interacción

La pantalla Opciones de Interactsh le permite configurar los ajustes que afectan la forma en que ZAP interactúa con Interactsh.

  • URL del servidor Esta dirección (proporcionada por el usuario) debe apuntar a la URL que se utilizará para los registros y las encuestas. Una URI válida incluirá al menos el esquema y el host. El host debe ejecutar una instancia de Interactsh en funcionamiento. Un ejemplo de una URI válida es: https://oast.live.
  • Token de autorización Se debe especificar un valor para este token si el servidor Interactsh en la URL del servidor especificada requiere autenticación. Este token se añade como valor del encabezado de autorización a todas las solicitudes realizadas al servidor.
  • Frecuencia de sondeo Esta opción permite cambiar la frecuencia de sondeo de Interactsh. Se expresa en segundos. El valor mínimo permitido es de 10 segundos y el máximo de 21 600 segundos (6 horas). El valor predeterminado es de 60 segundos.
  • Cargas útiles activas Esta tabla enumera todas las cargas útiles generadas y sus valores Canary correspondientes. Se añade una entrada cada vez que se crea una nueva carga útil. El botón «Nueva carga útil» se desactiva si se cambia la URL del servidor o el token de autorización. Para crear nuevas cargas útiles, revierta los cambios o guarde la configuración y vuelva a abrir la pantalla de opciones.
  • Carga útil La carga útil es la dirección que se puede utilizar en ataques fuera de banda.
  • Canario El valor Canary es una cadena que se devuelve a la aplicación web de destino cuando realiza una solicitud a la dirección de carga útil correspondiente. Se obtiene invirtiendo el subdominio en la carga útil.

Una aplicación web que termina usando el valor canario en algún lugar puede ser susceptible a ataques de inyección.

Pestaña OAST

Esta pestaña muestra un resumen de los mensajes fuera de banda descubiertos por ZAP.

Mensajes

Para cada mensaje, podrás ver:

Una identificación
La marca de tiempo de la solicitud recibida.
El método asociado con la solicitud (GET, POST, etc.)
La URL
El controlador: el componente que capturó o respondió a la solicitud de devolución de llamada.
La fuente: la dirección del remitente de la solicitud original.
El referente: el valor del encabezado del referente HTTP (si se incluyó uno en la solicitud).

Botones

Mensajes clarosBorra todos los mensajes de la tabla.
Encuesta ahoraSondea todos los servicios registrados y reinicia el tiempo para el siguiente sondeo. Esto significa que, si la frecuencia de sondeo está establecida en 120 segundos y hace clic en el botón con 30 segundos restantes, el siguiente sondeo automático se realizará después de 120 segundos.

Indicadores

La pestaña OAST contiene indicadores de estado para los servicios OAST externos. El color gris indica que el servicio aún no se ha registrado. El color verde indica que el servicio está registrado y se está sondeando. Si el servicio está registrado como servicio de escaneo activo, se añade un pequeño icono de llama en la esquina inferior derecha del indicador. La marca de tiempo junto al nombre del servicio se actualiza cada vez que se sondea.

Pestaña de parámetros

Aquí se muestra un resumen de los parámetros y los campos del encabezado de respuesta que utiliza un sitio. Los sitios se pueden seleccionar mediante la barra de herramientas o la pestaña Sitios . Para cada parámetro puedes ver:

El tipo: cookie, formulario, URL o encabezado
El nombre del parámetro (o encabezado de respuesta)
El número de veces que se ha utilizado
El número de valores únicos
El cambio porcentual, donde 0 significa que solo se ha utilizado un valor y 100 significa que todos los valores son únicos
Las banderas, incluidas las banderas de cookies y anticsrf y de sesión
Algunos de los valores (el conjunto completo de valores puede no estar visible)

Menú de clic derecho

Al hacer clic derecho en un nodo aparecerá un menú que le permitirá:

  • Buscar Esto mostrará todos los ejemplos del parámetro seleccionado en la pestaña Buscar .
  • Marcar como token anti CSRF Esto marcará el parámetro como un token Anti CSRF .
  • Desmarcar como token anti CSRF Esto eliminará el indicador de token Anti CSRF del parámetro.
  • Marcar como token de sesión Esto marcará el parámetro como un token de sesión para el sitio actual y notificará a la herramienta Sesiones HTTP en consecuencia.
  • Desmarcar como token de sesión Esto desmarcará el parámetro como token de sesión para el sitio actual y notificará a la herramienta Sesiones HTTP en consecuencia.

Buscador de parámetros

Param Digger es una herramienta que permite descubrir parámetros. Identifica parámetros ocultos, no vinculados y poco conocidos que pueden ser útiles para aumentar la superficie de ataque, facilitando así la búsqueda de vulnerabilidades. Utiliza una URL determinada como semilla y realiza ataques de fuerza bruta para identificar parámetros. Se basa principalmente en la investigación e implementación de James Kettle : Practical Web Cache Poisoning and Web Cache Entanglement . Param Digger se puede configurar e iniciar mediante el cuadro de diálogo Param Digger . Proporciona:

DIALOGO

Control

  • La primera pestaña permite seleccionar o cambiar la URL, así como los usuarios que la interpretan.
  • Si la URL se encuentra en uno o más contextos, podrá elegir uno.
  • También puede modificar el número de subprocesos que se usarán para el buscador de parámetros.
  • Si selecciona/marca la casilla «Adivinar URL», se mostrará la pestaña «Adivinar URL», que proporciona un control preciso sobre el proceso de adivinación de parámetros de URL.
  • Actualmente, Param Digger puede realizar ataques de adivinación y solo tiene disponible uno de los adivinadores: el Adivinador de Parámetros de URL, habilitado por defecto.
  • Si selecciona/marca la casilla de verificación ‘Adivinación de encabezado’, se mostrará la pestaña Adivinación de encabezado, que proporciona control sobre el proceso de adivinación de encabezados HTTP. (Aún no disponible)
  • Si selecciona/marca la casilla de verificación ‘Adivinación de cookies’, se mostrará la pestaña Adivinación de cookies, que proporciona control sobre el proceso de adivinación de cookies. (Aún no disponible)

Adivinar URL

  • Esta pestaña permite configurar el procedimiento de adivinación de URL.
  • Si selecciona la opción «Añadir eliminador de caché fcbz», se añadirá un eliminador de caché estático a la URL. (Aún no se utiliza).
  • El menú desplegable «Lista de palabras» permite a los usuarios especificar su lista de palabras.
  • Por defecto, está seleccionada la opción «Predefinida», que consta de 835 parámetros.
  • Si selecciona la opción «Personalizada», podrá introducir su propia lista de palabras.
  • Si selecciona la opción «Ambas», se utilizarán la lista de palabras predefinida y la lista personalizada que haya especificado.
  • Para su lista personalizada, asegúrese de que las palabras estén separadas por una nueva línea.
  • A partir de la versión actual, la lista de palabras predefinida que utiliza el complemento se basa en la pequeña lista de palabras de Arjun .
  • El campo «Número de fragmentos» permite controlar la cantidad de fragmentos utilizados. Si utiliza una lista de palabras con más de 1000 palabras, puede aumentar el número de fragmentos según sus necesidades. De lo contrario, puede usar el valor predeterminado.
  • La lista «Métodos» le permite seleccionar los métodos que desea utilizar. Por defecto, se selecciona GET. Puede elegir uno o varios métodos de la lista simplemente usando Ctrl + clic o (Cmd + clic).

 

Pestaña Param Digger

La pestaña Param Digger muestra el conjunto de parámetros identificados por Param Digger durante los escaneos. El botón «Nuevo escaneo» abre el cuadro de diálogo «Param Digger» , que permite especificar con exactitud la URL que se debe escanear. Param Digger puede ejecutarse en varias URL simultáneamente y los resultados de cada escaneo se muestran al seleccionarlo en el menú desplegable «Progreso». La barra de herramientas muestra información sobre un escaneo y permite controlarlo. Incluye un conjunto de botones que facilitan los siguientes controles y funciones:

Pausar (y 

reanudar) el escaneo de Param Digger seleccionado;

Detener el escaneo de Param Digger seleccionado;

Escaneos limpios y completados;

La barra de progreso muestra el progreso del análisis de Param Digger seleccionado. Param Digger cuenta con dos pestañas: «Historial» y «Resultados». En la pestaña ‘Historial’ de cada URL intentada puedes ver:

  • ID – El ID del mensaje
  • Marca de tiempo requerida: la marca de tiempo en la que el remitente HTTP de ZAP realizó la solicitud.
  • Res. Timestamp: la marca de tiempo cuando se recibió la respuesta.
  • Método: el método HTTP utilizado.
  • URL: La URL utilizada para adivinar.
  • Código: el código de estado de la respuesta.
  • Motivo: El motivo detrás del código de estado particular.
  • RTT – El tiempo de ida y vuelta para la solicitud.

Para cada mensaje de Param Digger, que se muestra en la pestaña Salida, puede ver detalles del parámetro encontrado y el motivo por el cual se detectó.

Reemplazador

El reemplazador es una forma sencilla de reemplazar cadenas en solicitudes y respuestas.  Se puede acceder a él a través de las Opciones y, de forma predeterminada, se puede acceder rápidamente mediante la tecla de acceso rápido ‘<ctrl> R’.

También es compatible con Automation Framework . El panel Opciones del reemplazador le permite definir tantas reglas de reemplazo como necesite. Cada regla se define mediante los siguientes campos:

  • Descripción Una descripción que le permite identificar la regla.
  • URL Una expresión regular para que coincida con la URL del mensaje; si está vacía, la regla se aplica a todos los mensajes. Por ejemplo, permite restringir las reglas a ciertos dominios al proporcionar credenciales de autenticación.
  • Tipo de coincidencia Puede ser uno de los siguientes:
  • Encabezado de solicitud (se agregará si no está presente) En este caso, la ‘Cadena de coincidencia’ se tratará como un nombre de encabezado. Si el encabezado está presente, su valor se reemplazará por el texto de reemplazo. Si el texto de reemplazo está vacío, se eliminará el encabezado (si está presente). Si el encabezado no está presente y el texto de reemplazo no está vacío, se agregará el encabezado.
  • Cadena de encabezado de solicitud En este caso, la ‘Cadena de coincidencia’ se tratará como una cadena o una expresión regular. Si está presente en el encabezado de la solicitud, se reemplazará por el texto de reemplazo.
  • Encabezado de host Tanto el tipo de coincidencia Encabezado de solicitud como la Cadena de encabezado de solicitud pueden cambiar/eliminar el encabezado de host, mientras se envía el mensaje al destino de la solicitud original.
  • Cadena del cuerpo de la solicitud En este caso, la ‘Cadena de coincidencia’ se tratará como una cadena o una expresión regular. Si está presente en el cuerpo de la solicitud, se reemplazará por el texto de reemplazo.
  • Encabezado de respuesta (se agregará si no está presente) En este caso, la ‘Cadena de coincidencia’ se tratará como un nombre de encabezado. Si el encabezado está presente, su valor se reemplazará por el texto de reemplazo. Si el texto de reemplazo está vacío, se eliminará el encabezado (si está presente). Si el encabezado no está presente y el texto de reemplazo no está vacío, se agregará el encabezado.
  • Cadena de encabezado de respuesta En este caso, la ‘Cadena de coincidencia’ se tratará como una cadena o una expresión regular. Si está presente en el encabezado de la respuesta, se reemplazará por el texto de reemplazo.
  • Cadena del cuerpo de la respuesta En este caso, la ‘Cadena de coincidencia’ se tratará como una cadena o una expresión regular. Si está presente en el cuerpo de la respuesta, se reemplazará por el texto de reemplazo.
  • Cadena de coincidencia La cadena que se utilizará para identificar qué se debe reemplazar; consulte Tipo de coincidencia para obtener más información.
  • Expresión regular de coincidencia Si se establece, la cadena de coincidencia se tratará como una expresión regular. Esta opción está deshabilitada cuando se coinciden los encabezados reales. Los bytes hexadecimales se representan con “\x00 – \xFF” (por ejemplo, “abc\x01\x02\x03def”).
  • Cadena de reemplazo La nueva cadena que reemplazará la selección especificada. Los bytes hexadecimales se representan con “\x00 – \xFF”. La cadena literal “\x00” se puede mantener con “\\x00”.
  • Habilitar Si no se establece, la regla no se aplicará.
  • Procesamiento de tokens Cuando se habilita, la cadena de reemplazo puede contener un solo token que se reemplaza con un valor dinámico:
TokenDescripción
{{RINT|MIN|MAX}}Entero aleatorio. MINy MAXson opcionales. El valor MINpredeterminado 0 MAXes Entero.maxValue
{{UUID}}UUID aleatorio generado usando java.util.UUID.randomUUID()
{{TICKS}}Milisegundos de época Unix usando System.currentTimeMillis()

Nota: Esta opción solo se aplica a los siguientes tipos de coincidencia:

  • Cadena de encabezado de solicitud
  • Cadena de cuerpo de solicitud
  • Cadena de encabezado de respuesta
  • Cadena de cuerpo de respuesta

Selenium

El complemento Selenium proporciona controladores web para que otros complementos invoquen y controlen navegadores web de forma remota. También incluye el navegador web HtmlUnit, un navegador web sin interfaz gráfica basado en Java. Añade un tipo de script ‘Selenium’: estos scripts se invocan cada vez que Selenium inicia un navegador, por ejemplo, para Ajax Spider o para la navegación manual. El complemento también añade una opción de clic derecho a los paneles ZAP que enumeran las URL (como el Historial y el árbol de Sitios), lo que permite abrir la URL seleccionada en cualquiera de los navegadores compatibles. Los scripts de Selenium tienen acceso al navegador iniciado y pueden interactuar con él, por ejemplo, ejecutar scripts de JavaScript, acceder a URL, rellenar formularios, hacer clic en botones… Los scripts de Selenium se ejecutan sincrónicamente para AJAX Spider. Para evitar interferencias con el rastreador posteriormente, los scripts deben acceder a las URL requeridas.

Navegadores compatibles

Los siguientes navegadores web son compatibles:

NombreIDRequisitos/Notas
ChromeChromeRequiere ChromeDriver. Si no está en la RUTA del sistema, se puede configurar en las opciones. Para obtener más información sobre ChromeDriver y cómo obtenerlo, consulte el sitio web de ChromeDriver .
Chrome sin interfaz gráficachrome-headlessInicia Chrome sin interfaz gráfica.
EdgeedgeRequiere EdgeDriver. Si no está en la RUTA del sistema, se puede configurar en las opciones. Para obtener más información sobre EdgeDriver y cómo obtenerlo, consulte el sitio web de EdgeDriver .
Edge sin interfaz gráficaedge-headlessInicia Edge sin interfaz gráfica.
FirefoxFirefoxRequiere geckodriver, se puede configurar en las opciones. Para obtener más información sobre geckodriver y cómo obtenerlo, consulte el sitio web de geckodriver .
Firefox sin interfaz gráfica de usuariofirefox-headlessInicia Firefox sin interfaz gráfica de usuario.
HtmlUnithtmlunitNavegador incluido, no tiene ningún requisito.
Safarisafari 

Para usar Firefox, Chrome, Edge y Safari, debe tenerlos instalados en su sistema. El ID del navegador se puede usar para elegir el navegador al configurar ZAP a través de la línea de comandos o usando la API de ZAP (por ejemplo, para configurar AJAX Spider para que use uno u otro navegador). Algunos de los requisitos (por ejemplo, los controladores web) de los navegadores se pueden configurar en la pantalla Opciones de Selenium .

Controladores web incluidos

ZAP proporciona complementos con los WebDrivers. Cuando estos complementos se instalan, ZAP intentará usar esos WebDrivers incluidos de forma predeterminada. Es posible que algunos sistemas operativos no tengan un WebDriver para algunos navegadores; en esos casos, ZAP informará, en el panel de opciones, que no hay ningún WebDriver incluido disponible. Los WebDrivers incluidos también se pueden (re)configurar con el botón «Incluido» (por ejemplo, si se configuró manualmente otro WebDriver). No todas las versiones de navegadores son compatibles con los WebDrivers incluidos; se recomienda utilizar las versiones más recientes de los navegadores siempre que sea posible. Los complementos de ZAP pueden agregar navegadores adicionales.

Pantalla Opciones de Selenium

Esta pantalla le permite configurar los requisitos de algunos de los controladores web.

Opciones de configuración

Controladores web

CampoDetallesPredeterminadoArchivo de configuración
ChromeDriverEsto le permite seleccionar la ubicación de ChromeDriver.La ruta al controlador web incluido, si está disponible.Clave: selenium.chromeDriverValor: ruta del sistema de archivos al ChromeDriver
EdgeDriverEsto le permite seleccionar la ubicación de EdgeDriver.La ruta al controlador web incluido, si está disponible.Clave: selenium.edgeDriverValor: ruta del sistema de archivos al EdgeDriver
geckodriverEsto le permite seleccionar la ubicación de geckodriver (controlador de Firefox).La ruta al controlador web incluido, si está disponible.Clave: selenium.firefoxDriverValor: ruta del sistema de archivos al geckodriver

Binarios

CampoDetallesPredeterminadoArchivo de configuración
ChromeEsto le permite seleccionar la ubicación del binario de Chrome (por ejemplo, para usar una versión diferente a la predeterminada del sistema).(Ninguno)Clave: selenium.chromeBinaryValor: ruta del sistema de archivos al binario de Chrome
EdgeEsto le permite seleccionar la ubicación del binario de Edge (por ejemplo, para usar una versión distinta a la predeterminada del sistema).(Ninguno)Clave: selenium.edgeBinaryValor: ruta del sistema de archivos al binario de Edge
FirefoxEsto le permite seleccionar la ubicación del binario de Firefox (por ejemplo, para usar una versión distinta a la predeterminada del sistema).(Ninguno)Clave: selenium.firefoxBinaryValor: ruta del sistema de archivos al binario de Firefox

También es posible establecer las ubicaciones anteriores (binarios y WebDrivers) mediante las propiedades del sistema Java, en cuyo caso se anularán las opciones anteriores y se mostrarán esos valores en su lugar. Puede encontrar más detalles sobre los WebDrivers incluidos en la página de descripción general.

Argumentos del navegador

Los binarios de Chrome, Edge y Firefox pueden tener argumentos adicionales (CLI) especificados mediante el Arguments…botón . Agregar argumentos no válidos puede provocar que el navegador no se inicie. ZAP ya agrega algunos argumentos (por ejemplo, sin interfaz gráfica).

Perfiles del navegador

Puedes elegir qué perfil de Firefox usar de forma predeterminada. El <temporary>perfil es uno que Selenium crea cada vez que se inicia el navegador. El complemento ‘cliente’ crea un perfil llamado zap-client-profile; si eliges otro perfil, el complemento Cliente no funcionará sin una configuración manual.

Extensiones del navegador

Puedes añadir, eliminar, habilitar o deshabilitar las extensiones del navegador mediante los botones correspondientes en esta pantalla. Los navegadores y las extensiones de archivo compatibles son:

  • Firefox: .xpi
  • Chrome/Edge: .crx

Los complementos también pueden añadir nuevas extensiones del navegador. Si eliminas una extensión del navegador a través de esta pantalla, el complemento la añadirá de nuevo, así que simplemente deshabilítala o desinstala el complemento para eliminar la extensión del navegador.

Escáner de secuencias

Este complemento facilita la grabación y el escaneo de secuencias de solicitudes. En algunas aplicaciones web, es necesario acceder o completar determinados eventos o páginas en un orden determinado. Al grabar una secuencia y luego escanearla, es posible garantizar que dichos flujos se produzcan de la manera esperada. El escáner de secuencias activas reproducirá la secuencia que está atacando. Si se selecciona una secuencia en la pestaña «Scripts», el resultado de la ejecución del script se mostrará en la pestaña «Resultados de Zest». Si la secuencia incluye aserciones de Zest, estas deberían darle una buena indicación de si la secuencia se está ejecutando de la misma manera que cuando se grabó

El escáner activo se ejecutará en cada paso de la secuencia y cada escaneo se completará antes de que se realice el siguiente paso. Si utiliza el escritorio, podrá ver los escaneos de cada paso en la pestaña «Escaneo activo»; estarán etiquetados como «<nombre de la secuencia>/Paso <id>».

Reproducir cada paso y ejecutarlo antes de avanzar al siguiente aumenta significativamente las posibilidades de que el escaneo activo ataque la secuencia con éxito. Sin embargo, debe comprobar que la secuencia se completó correctamente y que las solicitudes de escaneo activo no se rechazaron automáticamente. Los informes que admiten secuencias incluirán información que puede ayudarle a determinar esto. Este complemento es compatible con Automation Framework .

Creación de secuencias

Se debe crear un script de secuencia para cada operación de varios pasos en la aplicación/sitio que se está probando. Hay varias opciones para crear secuencias:

  1. Utilice el trabajo de importación de secuencias de Automation Framework .
  1. Utilice el elemento del menú Importar Importar HAR como secuencia
  2. En el árbol de Sitios o en la pestaña Historial, seleccione las solicitudes que desea incluir, haga clic derecho y use «Agregar al script de Zest» (ya sea eligiendo crear un nuevo script o agregarlo a un script de secuencia existente).
  3. Desde la barra de herramientas principal, use el botón «Grabar un nuevo script de Zest…», seleccionando «Secuencia» como tipo.

Afirmaciones

Al importar las secuencias, es posible elegir crear aserciones para cada mensaje HTTP de la secuencia:

  • Código de estado de afirmación: afirma que el mensaje HTTP reproducido tiene el mismo código de estado
  • Afirmar longitud: afirma que el mensaje HTTP reproducido tiene la misma longitud del cuerpo de respuesta, dentro del margen (porcentaje) especificado.

Escaneo

Puede activar secuencias de escaneo a través de:

  • El cuadro de diálogo «Escaneo activo de secuencia».
  • La opción «Secuencia de escaneo activo» del menú contextual en el nodo superior de un script de secuencia.
  • El trabajo sequence-activeScan de Automation Framework .

Cuadro de diálogo Escaneo activo de secuencia

Se puede acceder a este cuadro de diálogo a través del menú «Herramientas» y le permite escanear secuencias de forma activa.

Política de escaneo El nombre de la política de escaneo que se usará para el escaneo activo. La política «Secuencia» incluida con este complemento es la recomendada.

Secuencias Las secuencias para el escaneo activo. Debe seleccionar al menos una secuencia. Las secuencias seleccionadas se escanearán activamente en orden.

Informes

Los siguientes informes pueden incluir resultados de escaneo de secuencias:

  • Informe JSON tradicional .
  • Informe JSON tradicional con solicitudes y respuestas .

Política de secuencias

Una política de escaneo activa con un pequeño conjunto de reglas de escaneo que creemos que son buenas para probar secuencias.

Compatibilidad con SOAP

Este complemento importa y escanea archivos WSDL que contienen puntos finales SOAP. También es compatible con Automation Framework .

Importación

El complemento detectará automáticamente cualquier definición SOAP y la rastreará siempre que esté dentro del alcance. Se agrega un elemento de menú al menú Importar:

  • Importar un archivo WSDL

Las operaciones para importar un archivo WSDL desde el sistema de archivos local o desde una URL también están disponibles a través de la API. A partir de la versión 6 de este complemento, solo se admiten URL codificadas.

Compatibilidad con el complemento de controlador de formularios

El complemento SOAP admite la anulación de los valores de los parámetros predeterminados basados ​​en los nombres de campo a través del complemento de controlador de formularios. Por ejemplo,

Estadísticas

Este complemento mantiene las siguientes estadísticas:

  • soap.urls.added: El número total de URL (o acciones SOAP) añadidas desde archivos WSDL importados.

Alertas de SOAP

Las siguientes alertas son generadas por el complemento SOAP. {#id-90026}{#id-90029}{#id-90030}

Referencia de alertaNombreDescripciónCódigo más reciente
90026Suplantación de acciónLas solicitudes SOAP contienen algún tipo de operación que posteriormente ejecuta la aplicación web. Esta operación se puede encontrar en el primer elemento secundario del cuerpo SOAP. Sin embargo, si se utiliza HTTP para transportar el mensaje SOAP, el estándar SOAP permite el uso de un elemento de encabezado HTTP adicional llamado SOAPAction. Este elemento de encabezado contiene el nombre de la operación ejecutada. Se supone que informa al servicio web receptor de qué operación está contenida en el cuerpo SOAP, sin tener que realizar ningún análisis de XML. Un atacante puede utilizar esta optimización para montar un ataque, ya que ciertos marcos de servicios web determinan la operación que se ejecutará únicamente en la información contenida en el campo de encabezado SOAPAction.SOAPActionSpoofingActiveScanRule.java
90029Inyección XML SOAPDurante una «inyección XML», un atacante intenta añadir o manipular varias etiquetas XML en el mensaje SOAP con el objetivo de manipular la estructura XML. Por lo general, una inyección XML exitosa resulta en la ejecución de una operación restringida o no intencionada. Dependiendo de la operación ejecutada, se podrían violar varios controles de seguridad o comercialesSOAPXMLInjectionActiveScanRule.java
90030Detección de archivos WSDLEsta alerta se activa cuando el escáner pasivo detecta un archivo WSDL.WSDLFilePassiveScanRule.java

Resumen ejecutable del capítulo

  1. GraphQL
    • Importa esquemas (introspection o desde archivo) y genera automáticamente consultas/mutations/subscriptions.
    • Configura profundidad de rutas y cómo insertar argumentos (inline, variables o ambos).
    • Representación en el árbol de sitios: agrupa por operaciones; soporta inyección en argumentos para active scan.
    • Soporta POST (JSON / application/graphql) y GET.
  2. Codificar/Descodificar/Hash
    • Herramienta GUI para Base64, URL encode, hex, HTML/JS escape, SHA-1/256/MD5, transformaciones (upper/lower, trim, ASCII-only, PowerShell -enc), etc.
    • Soporta añadir procesadores personalizados vía scripts. Muy útil para preparar payloads o analizar respuestas.
  3. gRPC
    • Decodifica/edita mensajes protobuf (representación campo:número:tipo::valor).
    • Permite inyectar valores en pares clave-valor para pruebas (vector de entrada).
    • Integración con WebSocket y decodificación para pruebas de endpoints gRPC.
    • Ideal para auditar APIs backend modernas que usan protobuf/gRPC.
  4. OAST (Out-Of-Band Application Security Testing)
    • Integra servicios externos: Interactsh, BOAST, y callbacks locales para detectar interacciones DNS/HTTP/SMTP fuera de banda.
    • Genera cargas únicas (canaries) y registra interacciones; panel OAST en la UI muestra mensajes y metadatos.
    • Configura frecuencia de sondeo, URIs de servidor, y opción de base de datos persistente.
    • Uso clave para detectar SSRF, blind-XXE, blind SQLi, deserializaciones remotas, etc.
  5. Param Digger
    • Fuerza bruta para descubrir parámetros ocultos o no vinculados (amplía superficie de ataque).
    • Usa listas de palabras (predefinida o personalizada), múltiples hilos y fragmentación.
    • Muestra historial y motivos por los que se marca un parámetro.
  6. Reemplazador (Replacer)
    • Reglas para modificar headers / cuerpos de petición y respuesta en vuelo (basadas en regex o literal).
    • Soporta tokens dinámicos ({{UUID}}, {{RINT|min|max}}, {{TICKS}}).
    • Útil para inyectar credenciales, forzar cabeceras auth, modificar respuestas para testing, etc.
  7. Selenium
    • Control remoto de navegadores (Chrome/Firefox/Edge/Safari/HtmlUnit), incluyendo headless.
    • Configura drivers/binarios y argumentos; añade extensiones; usar perfiles.
    • Usado por Ajax Spider, autenticación basada en navegador, grabación y scripts Selenium.
  8. Escáner de secuencias (Zest / Sequence Scanner)
    • Graba flujos multi-paso (HAR o mediante botón de grabación) y los reproduce para escanear cada paso.
    • Las aserciones permiten validar que la reproducción fue fiel (status, longitud).
    • Escaneo activo por paso mejora chances de atacar flujos dependientes del orden (checkout, wizards).
  9. SOAP / WSDL
    • Importa WSDL, añade operaciones al árbol de sitios y permite ataques específicos de SOAP (XML injection, SOAPAction spoofing).
    • Genera alertas específicas y soporta anulación de parámetros por nombre.
  10. Automatización y jobs
    • Todos los componentes anteriores (spiders, activeScan, ajaxSpider, importers, OAST, paramDigger, sequences, SOAP, scripts) se integran en el Automation Framework: crear planes YAML, ejecutar con -autorun, generar códigos de salida según resultados, y ejecutar en CI/CD.
    • Soporte para jobs de script (agregar/ejecutar), alert filters, requestor, tests de estadística/URL/alerta y más.
  11. Buenas prácticas y uso táctico
    • Para APIs modernas (GraphQL/gRPC) importa esquemas y limita profundidad para evitar DoS.
    • Usa OAST/Interactsh en entornos controlados o con autorización; las cargas fuera de banda deben monitorearse.
    • Usa Replacer con cuidado (evita filtrar datos sensibles).
    • Para secuencias/flows: grabar, añadir aserciones y usar sequence-scan policy.
    • En automatización: parametriza credenciales, tokens y endpoints; revisa códigos de salida y añade pruebas de monitorización.

10 Preguntas basadas en el artículo

  1. ¿Qué permite hacer el complemento de GraphQL en ZAP?
  2. ¿Qué configuraciones se pueden ajustar en el generador de consultas GraphQL?
  3. ¿Cómo representa ZAP las solicitudes GraphQL en el árbol de sitios?
  4. ¿Qué funcionalidades ofrece el complemento gRPC en ZAP?
  5. ¿Qué es y para qué sirve la pestaña OAST?
  6. ¿Cómo funciona el complemento Param Digger y qué parámetros permite descubrir?
  7. ¿Qué tipos de reglas permite definir el Reemplazador en ZAP?
  8. ¿Qué navegadores son compatibles con el complemento Selenium en ZAP?
  9. ¿Qué es el escáner de secuencias y cómo se puede crear una secuencia?
  10. ¿Qué alertas puede generar el complemento SOAP y cómo detecta vulnerabilidades?

10 Ejercicios prácticos

  1. Importa un archivo de esquema GraphQL y configura el generador de consultas con una profundidad máxima de 3.
  2. Crea y ejecuta una consulta GraphQL utilizando variables y analiza cómo se representa en el árbol de sitios.
  3. Decodifica un mensaje gRPC capturado desde el visor de mensajes de ZAP.
  4. Inserta una carga útil OAST en una solicitud e interpreta los resultados en la pestaña OAST.
  5. Usa Param Digger para descubrir parámetros ocultos en una URL con método GET.
  6. Configura una regla del Reemplazador para añadir un encabezado de autenticación en todas las solicitudes a un dominio específico.
  7. Usa Selenium para abrir una URL en Firefox sin interfaz gráfica desde el menú contextual del árbol de sitios.
  8. Graba una secuencia usando Zest con tres pasos de autenticación e inicia un escaneo activo por pasos.
  9. Importa un archivo WSDL, genera sus endpoints y lanza un escaneo activo SOAP.
  10. Utiliza el cuadro de diálogo de codificar/decodificar/hash para convertir un texto en SHA256 y codificarlo en Base64URL.

Respuestas completas a las 10 preguntas

1. ¿Qué permite hacer el complemento de GraphQL?

Permite importar esquemas GraphQL y generar/enviar consultas automáticamente desde dichos esquemas. Detecta automáticamente definiciones GraphQL dentro del alcance, y es compatible con inyecciones durante escaneos activos.

2. ¿Qué configuraciones permite el generador de consultas GraphQL?

  • Profundidad máxima de consulta.
  • Profundidad adicional para campos sin tipos de hoja.
  • Profundidad máxima de argumentos.
  • Incluir argumentos opcionales.
  • Estilo de argumentos (en línea, variables o ambos).
  • Tipo de entidad sobre la que generar la consulta (hojas, campos, tipos raíz).
  • Método de solicitud (POST JSON, POST raw GraphQL o GET).

3. ¿Cómo representa ZAP las solicitudes GraphQL en el árbol de sitios?

Las solicitudes se agrupan según la operación usada. Si se usan argumentos en línea y variables, se distinguen con un prefijo (0 o 1). Dos consultas con mismos campos estarán en el mismo nodo.

4. ¿Qué ofrece el complemento gRPC?

  • Decodificación/codificación de mensajes Protobuf.
  • Inyección de cargas útiles para escaneo activo.
  • Soporte para WebSocket con gRPC.
  • Visualización de mensajes decodificados directamente desde la vista de mensaje.

5. ¿Qué es la pestaña OAST?

Es donde se visualizan las solicitudes fuera de banda (OOB) capturadas por ZAP, útiles para detectar vulnerabilidades como SSRF, RCE, etc. Muestra el servicio, fuente, URL, método, etc.

6. ¿Qué hace Param Digger?

Permite descubrir parámetros ocultos o no documentados mediante fuerza bruta en URLs, cookies o headers (cookies y headers aún no disponibles). Usa diccionarios predefinidos o personalizados.

7. ¿Qué tipos de reglas permite definir el Reemplazador?

Reglas de reemplazo en:

  • Encabezados de solicitud/respuesta
  • Cuerpo de solicitud/respuesta
  • URL
    Puede usar expresiones regulares y valores dinámicos como {{UUID}}, {{TICKS}}, etc.

8. ¿Qué navegadores son compatibles con Selenium en ZAP?

  • Chrome / Chrome sin interfaz
  • Firefox / Firefox sin interfaz
  • Edge / Edge sin interfaz
  • Safari (si está instalado)
  • HtmlUnit (incluido, sin interfaz gráfica)

9. ¿Qué es el escáner de secuencias?

Es una herramienta que permite grabar y escanear flujos de múltiples pasos en una aplicación. Puede grabarse desde HAR, script Zest o historial, y escanear paso a paso con aserciones.

10. ¿Qué alertas genera el complemento SOAP?

  • 90026: Suplantación de acción (SOAPAction spoofing)
  • 90029: Inyección XML SOAP
  • 90030: Detección de archivos WSDL

Detecta al importar archivos WSDL dentro del alcance del escaneo.

Respuestas detalladas a los 10 ejercicios

1. Importar esquema GraphQL y configurar profundidad

  • Menú > Importar > Importar un esquema GraphQL.
  • En Opciones > GraphQL, ajusta la profundidad a 3.
  • Selecciona si deseas argumentos en línea o por variables.

2. Ejecutar consulta GraphQL con variables

  • Usa el generador de consultas para generar una operación con variables.
  • Observa en el árbol cómo aparece como “1.…” indicando uso de variables.

3. Decodificar mensaje gRPC

  • Captura una solicitud gRPC.
  • En la pestaña de mensaje, cambia el “Body” a “gRPC”.
  • ZAP mostrará los campos en formato fieldNumber:type::value.

4. Insertar carga OAST

  • En un cuerpo editable, clic derecho > “Insertar carga útil OAST”.
  • Escoge BOAST, Interactsh, etc.
  • Verifica la respuesta en la pestaña OAST si hubo interacción.

5. Usar Param Digger

  • Herramientas > Param Digger > Nueva URL.
  • Ingresa la URL base.
  • Elige lista de palabras predefinida.
  • Ejecuta y observa parámetros descubiertos.

6. Configurar regla del Reemplazador

  • Opciones > Reemplazador > Añadir regla.
  • URL: .*mi-dominio.com.*
  • Tipo: Encabezado de solicitud.
  • Cadena: Authorization
  • Reemplazo: Bearer mi_token
  • Habilitar.

7. Abrir URL en Firefox sin interfaz

  • Clic derecho en un nodo del árbol de sitios > “Abrir en navegador”.
  • Selecciona “firefox-headless”.

8. Grabar secuencia con Zest y escanear

  • Herramientas > Grabar nuevo script Zest > Tipo: Secuencia.
  • Realiza navegación con tres pasos (login, navegación, acción).
  • Detén grabación.
  • Herramientas > Escaneo activo de secuencia.

9. Importar archivo WSDL y escanear

  • Importar > Importar archivo WSDL.
  • El archivo generará nodos SOAP.
  • Clic derecho > Escaneo activo.
  • Verifica si aparecen alertas 90026, 90029, 90030.

10. Usar cuadro de codificación/hash

  • Herramientas > Codificar/Decodificar/Hash.
  • Ingresar texto en campo principal.
  • Pestaña SHA256: copiar hash.
  • Pestaña Base64URL: convertir hash en base64 URL-safe.

Despedida — lo que aprendiste y cómo te hará mejor hacker

Has aprendido a ampliar ZAP más allá del simple proxy/active scan: ahora sabes cómo atacar APIs GraphQL y gRPC, manipular y generar payloads (encode/decode/hash), detectar y explotar interacciones fuera de banda, descubrir parámetros ocultos, automatizar reemplazos de tráfico, controlar navegadores reales con Selenium, reproducir y escanear secuencias multi-paso, y trabajar con SOAP/WSDL. Además, todo esto puede integrarse en planes reproducibles con el Automation Framework para ejecutarlo en pipelines.

Resultado práctico en tu carrera como hacker: podrás auditar aplicaciones modernas con profundidad y precisión, encontrar vulnerabilidades que solo aparecen en flujos complejos o mediante comportamientos fuera de banda, generar evidencia técnica fiable y automatizar verificaciones recurrentes para validar correcciones. Usa siempre estas herramientas con autorización y responsabilidad: cuando combinas conocimiento técnico con herramientas potentes, transformas hallazgos en mitigaciones reales y medibles. ¡A probar y automatizar con criterio!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *