Owasp Zaproxy VII - Zest Script sobre Zap

No Comments
Antes de comenzar a ver la forma de realizar scripts en Zap, veremos de qué se trata Zest, ya que si no entendemos bien la base, es complicado construir hacia arriba.

Zest, es un lenguaje de programación especializado en el scripting creado por el equipo de desarrolladores de seguridad de Mozilla orientada a tools de seguridad. Si querés investigar un poco más, acá está el sitio oficial: (Mozilla Projects Zest).

Este lenguaje de scripting está escrito en json, sin embargo, la idea es que la programación sea visual y que esté definida por la herramienta que integre Zest.

Por el momento, Zap es la única herramienta (por lo que dice el sitio de developers de mozilla (Zest Tools) que integra ésta forma de scriptear.

Vale aclarar que Zest es completamente de código abierto gratuito y se puede incluir en cualquier herramienta de código abierto o cerrado, libre o comercial.



Pasos Preliminares:

Para encontrar botón para grabar un nuevo script, debemos buscar en la parte superior, muy cerca de donde se encuentra el icono para customizar breakpoint http que vimos en entradas anteriores.


En caso de que no figure ahí hay que importarlo de la siguiente manera:

1-  Ctrl+u (Atajo para ‘Check for update’ que también se puede encontrar en la pestaña ‘Help’), ésto abre el ‘Manage Add-ons’.

2- Seleccionar la pestaña ‘Marketplace’ y buscar ‘Zest - Graphical Security

3- Una vez seleccionado vamos abajo a ‘Install Selected

4- Para comprobar, elegimos la pestaña ‘Installed’ y debe aparecer  ‘Zest - Graphical Security’, como vemos en la imagen:


Es recomendable reiniciar Zap una vez realizada la instalación del Add-on para evitar posibles inconvenientes.

Grabación de Scripts modo visual:

Para realizar las pruebas que llevaremos a cabo, hay que tener a Zap como proxy de intercepción (lo hemos visto en entradas anteriores).

Ejemplo 1:
Al hacer click en el botón para iniciar la grabación del Zest script se nos abrirá una ventana con dos pestañas, la primera, ‘Summary’ nos permite:

  • Setear el nombre del script.
  • Tipo (stand alone o authentication)
  • Tipo de grabación.
  • Url inicial..
  • Prefijo, es decir sobre que path raiz.
  • Opción para cargar el script al inicializar la herramienta
  • Descripción

Para este ejemplo hemos elegido el nombre ‘Ejemplo 1’, el script será de ‘Authentication’, grabará del lado del servidor, la url sobre la cual correrá es la de login de google gruyere y el ‘Prefix’ es el index de gruyere. No definimos descripción y tampoco que se cargue al iniciar Zap. Así nos quedó:



La otra pestaña, ‘Default Assertions’ trae configuración por defecto que no conviene modificarlas  


Una vez seteados los parámetros que deseamos, hacemos click en ‘Start Recording’, vamos al panel de logueo de gruyere, iniciamos sesión o introducimos credenciales inválidas y volvemos a Zap para detener la grabación del script.



Al volver a Zap, podemos ver en la ventana ‘Scripts’ que tenemos el que acabamos de grabar ya guardado.


Si seleccionamos el script que hemos terminado de grabar, podemos visualizar la representación gráfica de lo que hemos grabado.

En el panel superior de la derecha, se puede visualizar la representación codificada de lo que hemos grabado, en la pestaña ‘Script Console'

También nos apareció el botón ‘Run’, si lo presionamos el script que hemos terminado de grabar vuelve a correr.

Hasta aquí, la metodología que hemos utilizado para grabar nuestro script en Zest, es muy similar a la de las macros en programas ofimáticos de procesamiento de texto o planillas de cálculo. Para resumir y dejar en claro:

  1. Vamos al botón para iniciar la grabación.
  2. Realizamos el proceso que queremos dejar guardado. Aquí podemos, por ejemplo, explotar un vulnerabilidad como un xss o un bypass al login que luego podemos reproducirlo para generar nuestro reporte .
  3. Finalizamos la grabación para tener nuestro script codificado y representado gráficamente. Podemos volver a correr lo que hemos grabado simplemente dando click en ‘Run’.

Grabación de Scripts modo consola:

Para realizar ésta modalidad de generación de scripts, debemos utilizar un plugin llamado ‘Plug-n-Hack’ que se encuentra en la pestaña ‘Quick Start’ debajo del ‘Url to Attack


Si hacemos click en el botón ‘Plug-n-Hack’ se nos abrirá una pestaña en el browser Firefox con la url: http://localhost:8080/pnh con un botón para configurar el plugin



Una vez que finaliza la configuración, podemos ver las modificaciones que realizó el plugin dirigiéndonos a ‘Preferencias -> Avanzadas -> Configuración’


Para generar nuestros scripts, debemos, desde nuestro browser presionar ‘Shift+F2’. Si sólo ponemos zap veremos todas las opciones que tenemos disponibles para interactuar desde Firefox con Zap.


Para inicializar la grabación del script, debemos escribir ‘zap record on global ’, realizamos la acción que queremos de dejar guardada en nuestro script y para finalizar escribimos en la consola de Firefox ‘zap record off global’. Al vovler al Zap, nos encontraremos con los mismos paneles y visualizaciones que si grabamos un script de manera visual.

Edición de scripts:

Al seleccionar un script que hemos grabado podemos realizar una gran variedad de acciones entre las cuales podemos ver:
  • Agregar request.
  • Agregar acciones como scanear, imprimir o dormir el script.
  • Agregar afirmación length y regex.
  • Agregar asignaciones en variables por ejemplo.
  • Agregar condiciones


Cada una de las opciones de edición nos abrirá una ventana para poder editar nuestro script de manera visual.


Otra forma de editar, es ir directamente al código json seleccionar el string, elegir ‘Redact text’ y modificar a gusto lo que deseamos.
Por ejemplo, si obtenemos cookies de sesión de una aplicación web y hemos generado nuestro script de login con una cookie, podemos modificarla por otra y hacer click en ‘Run’ para que valide el logueo con otra cookie. También podemos hacerlo con las credenciales de acceso, modificar header, variables, etc.

Existen muchas más opciones de modificación y personalización de los scripts, podemos agregar condiciones booleanas, iteraciones, etc, para ajustarlo a nuestras necesidades al 100%. Esa parte quedará para su investigación.

Si quieren interiorizarse más, en github tienen el código de Zest y en mozilla zest  tienen un grupo para realizar las consultas o aportes sobre éste lenguaje de scripting.

Regard {~}

Contribución enviada por: {~}

0 comentarios

Publicar un comentario en la entrada