Cualquier pentester de aplicaciones web conoce y utiliza frecuentemente herramientas como Burp Proxy, sin embargo en ocasiones debido a la costumbre/hábito no se exploran otras alternativas interesantes o que aportan otra perspectiva para ejecutar las mismas labores. ZAP es uno de los proyectos insignia de la comunidad OWASP y a pesar de su prestigio y lo conocido que es,  en raras ocasiones se utiliza como un proxy web para capturar y manipular peticiones/respuestas como habitualmente se hace en Burp, en su lugar es más común utilizarlo como herramienta de «botón gordo» para lanzar escaneos automatizados y esperar «a ver si suena la flauta» y aparece una vulnerabilidad critica, cosa que también ocurre en muy raras ocasiones. Es posible que esto se deba a que su uso no es tan intuitivo y requiere un poco más de esfuerzo por parte del pentester pero los beneficios que aporta son innegables. A continuación se listan algunas funcionalidades interesantes en ZAP Proxy y que es posible no conozcas.

1. Gestión de Contextos.

Una de las primeras cosas que hay que comprender de ZAP es que permite crear y gestionar contextos. Un contexto define las características que tendrá la aplicación web. Entre otras cosas, el contexto permite declarar cuáles son los mecanismos de autenticación, definición de usuarios, tecnologías soportadas, gestión de usuarios y sesiones, etc. Aunque normalmente se define un contexto por aplicación, es posible incluir múltiples aplicaciones en el mismo contexto pero no es precisamente una buena práctica mezclar 2 o más aplicaciones en el mismo contexto. ZAP permite crear, eliminar y modificar contextos, además cuando se inicia la herramienta crea un contexto por defecto con el que se puede trabajar si así se desea.

2. Marketplace de extensiones.

ZAP es un sistema basado en complementos o extensiones en donde es posible incluir funcionalidades adicionales a las que vienen por defecto en la herramienta. Algunas de las más potentes e interesantes son «requester», «broken access controls», «httpsinfo», «wappalizer», «zest», entre muchas otras. Para la instalación o actualización es necesario contar con una conexión a Internet y se puede hacer desde la interfaz gráfica.

3. Manipulación de peticiones con Requester.

Capturar una petición y manipularla a gusto es una de las actividades básicas que debe realizar cualquier pentester. En ZAP esto también es posible con la extensión requester, la cual tiene una apariencia y funcionalidades muy similares al «repeater» en Burp, ya que a la izquierda se puede manipular la petición HTTP seleccionada, enviarla al servidor web y posteriormente, ver la respuesta en la sección a la derecha.

 

4. Verificación de controles de acceso.

En las aplicaciones web es común encontrar páginas, secciones o endpoints que tienen algún tipo de control de acceso basado en roles. Se trata de una característica que se debe probar cuando se realiza un pentest web y de hecho, el OWASP Top 10 incluye un punto dedicado precisamente a problemas en aplicaciones web que no gestionan correctamente las reglas basadas en los permisos que pueden tener los usuarios, permitiendo accesos no autorizados e incluso elevación de privilegios en la aplicación web (Broken Access Controls). Como pentesters es necesario realizar un mapa o «matriz» de accesos para poder comprobar qué usuarios tienen permisos a qué recursos y comprobar si esas reglas se están cumpliendo correctamente. Hacer esto puede llevar mucho tiempo, especialmente si se hace de forma manual y sobre una aplicación web con un tamaño medio en la que pueden haber cientos de páginas web y decenas de funcionalidades. Precisamente por este motivo se encuentra disponible la extensión «Access Control Testing» la cual se puede instalar directamente desde el marketplace y se configura en el contexto de la aplicación que se desea probar.

Después de que se configuran las reglas para cada uno de los usuarios de la aplicación, hay que dirigirse a la interfaz principal y en la sección inferior seleccionar «+  -> Access Control». Esto abrirá una nueva pestaña en la que se puede seleccionar el contexto en el que se han configurado las pruebas anteriormente y verificar si se están cumpliendo de forma automática.

Aunque es sencillo, hay que tener en cuenta que los resultados no siempre son correctos ya que  esta extensión verificará qué es un acceso prohibido y qué no lo es en función de lo que se encuentre configurado en la sección «Authorization» del contexto, la cual por defecto considerá que solo las respuestas HTTP 403 representan un acceso prohibido. No obstante, es posible que la aplicación web no devuelva una respuesta HTTP 403 y en su lugar, puede retornar una página web de error personalizada y un código de estado HTTP 200. En tales casos veremos muchos falsos positivos. En el mundo del hacking web lo importante no es la herramienta, sino el entendimiento que se tenga sobre la aplicación web y analizar su comportamiento de la forma más profunda y detallada posible.

5. Scripts del tipo Zest.

Durante la interacción con una aplicación web es muy común realizar las mismas labores una y otra vez. La misma interacción, acceder por las mismas páginas y seguir los mismos pasos. En el testing automático y especialmente relevante en las pruebas de calidad (QA Testing) es muy común utilizar herramientas que se basan en Selenium para crear un plan de pruebas completo de tal manera que el tester no tendrá que hacer las mismas cosas una y otra vez manualmente. Esto también puede aplicar al pentesting en aplicaciones web y en el caso de ZAP hay una característica muy interesante llamada «Zest scripting». Es muy similar a lo que se ha explicado previamente sobre Selenium, ya que solamente es necesario pinchar sobre el botón «record a new Zest Script» ubicado en la barra de herramientas en la sección superior de ZAP y empezar a navegar por aquellas páginas de la web que interesa analizar. Una vez se ha seguido el flujo completo de la funcionalidad que se desea probar, basta simplemente con detener el script y a continuación ZAP creará el árbol completo de cada una de las páginas que se han visitado, pudiendo reproducir nuevamente de forma automática toda la interacción completa con los cambios que se considere pertinentes.

En la imagen anterior se puede ver el flujo o secuencia de peticiones que se han capturado y se puede ver el Zest Script generado. Partiendo de este script es posible modificar cada una de las peticiones de forma independiente, cambiando parámetros, ejecutando un escaneo activo sobre una página concreta o cambiando el orden de las peticiones. Se pueden hacer todas las actividades que normalmente se hacen en un pentest, pero con la ventaja de que se pueden probar funcionalidades completas con bastante más flexibilidad y sin necesidad de depender del navegador web para hacer lo mismo una y otra vez.

6. Rest API.

ZAP no solamente se puede utilizar como una herramienta stand-alone para un pentester, es posible arrancar el motor de ZAP en modo «daemon» o «headless» y levantar su API Rest para que otros puedan acceder a los endpoints definidos. Esto permite que un equipo de pentesters puedan utilizar ZAP en un servidor compartido y enviarle «jobs» que se ejecutarán en segundo plano. La API es bastante completa y permite ejecutar escaneos automatizados y muchas de las funciones descritas anteriormente desde un cliente HTTP o desde cualquier script en Python u otro lenguaje. Habilitar la API es tan simple con seleccionar «Tools -> Options … -> API» en donde se puede establecer la «API Key» y otros valores de configuración.

Se trata de algunas de las características que en mi opinión son las más interesantes de ZAP y que utilizo con frecuencia, no obstante hay otras utilidades en la herramienta que merece la pena explorar, después de todo es software libre y tiene el apoyo por parte de la comunidad de OWASP.

 

Un saludo y Happy Hack!
Adastra.