Auditorías Web con OWASP ZAP – Introducción y ejemplos de uso

OWASP Zap es una herramienta disponible para Linux, Windows y Mac desarrollada dentro del Open Web Application Security Project. Dentro de esta fundación se han desarrollado varias herramientas, entre ellas la que nos ocupa hoy: OWASP ZAP.

Esta herramienta nos permite realizar múltiples pruebas de penetración (SQLi, XSS, Descubriemiento de ficheros, etc) en aplicaciones Web de una forma muy sencilla. Aunque la herramienta en sí tiene un potencial casi infinito (e infinito si lo aderezamos con plugins). En este tutorial vamos a ver las opciones más utilizadas de ZAP y un par de pruebas de concepto.

Cuando iniciemos la aplicación veremos una pantalla donde podremos restaurar una sesión anterior o iniciar una nueva. En nuestro ejemplo ya que vamos a iniciar una auditoría nueva no restauraremos ninguna sesión.


En grande y en la parte derecha tenemos un modo de ataque automático o activo. Si colocamos en input la URL de la Web a auditar comenzará a navegar a través de los diferentes enlaces y a descubrir ficheros ocultos de la misma usando diferentes técnicas como la lectura del fichero robots.txt, spider, etc. En la parte izquierda podemos ver el árbol de consultas, esto es muy útil tanto para descubrir ficheros ocultos como para descubrir formularios post dentro de la Web, etc. Si pulsamos sobre alguna de las peticiones podremos ver en la parte derecha los datos que se enviaron (cabeceras y formularios) así como los que se recibieron, además, pulsando con botón derecho podremos reenviar la petición o modificarla, aunque eso lo veremos mas abajo junto al modo de ataque pasivo.

Cuando el análisis automático haya terminado podremos ver en la parte inferior un listado de alertas y vulnerabilidades sobre el sitio Web.

 

Análisis pasivo de un sitio Web: Ataques de fuerza bruta y búsqueda de XSS con ZAP

El análisis pasivo mediante ZAP  nos permite navegar por el sitio Web como si fuésemos un usuario más del sitio y, posteriormente, realizar pruebas de penetración sobre las diferentes partes que hemos visitado. Para ello ZAP creará un proxy en nuestro equipo local. Podemos modificar los parámetros del proxy (como el puerto) yendo a el botón de configuración (rueda dentada) y seleccionando el menú Proxy Local. Una vez configurado a nuestro gusto deberemos configurar nuestro navegador con el proxy localhost y el puerto que hayamos elegido, normalmente el 8080.

Una vez tenemos todo funcionando, si empezamos a navegar por un sitio Web con el navegador, veremos que todas nuestras consultas van quedando reflejadas dentro de ZAP y que podemos consultarlas, modificarlas, etc. Igual que si hubiésemos hecho un análisis activo. La ventaja es obviamente que generaremos mucho menos ruido que con el ataque activo.

Para nuestro ejemplo de fuerza bruta vamos a colocarnos sobre una de las peticiones de tipo POST que se han hecho en un formulario de login, pulsaremos con el botón derecho y dentro del mismo iremos a la opción Atacar>Fuzz.


A continuación se nos abrirá una ventana donde podemos ver los detalles de la petición y la respuesta. Para nuestro primer ejemplo vamos a intentar un ataque de fuerza bruta contra el campo “pwd” correspondiente al password del usuario, así que elegiremos el valor que se ha enviado en la petición y nos iremos al botón “Add” para añadir un diccionario que pruebe en lugar del valor.


Veréis que hay varios de diccionarios ya creados, algunos son, por ejemplo sentencias SQLi o ataques XSS de forma que podamos probar toda una batería de combinaciones contra el campo. En nuestro caso y como vamos a hacer un ataque de fuerza bruta elegiremos un diccionario propio que contenga diferentes tipos de contraseñas

Así pues la diferencia a la hora de lanzar un ataque de tipo fuerza bruta, XSS o SQLi será únicamente el diccionario que elijamos, además ZAP viene con un montón de diccionarios ya creados para estos fines que podéis utilizar. Una vez elegido el diccionario que queramos pulsamos añadir y damos sobre el botón Start Fuzzer.
Ahora, ZAP empezará a repetir la petición inicial pero sustituyendo el campo que hemos seleccionado anteriormente por cada una de las combinaciones que disponga nuestro diccionario. En la parte inferior de ZAP podemos ver todas las peticiones y el resultado de la misma, además, si pulsamos sobre ella podemos ver en la parte superior los detalles de la petición y la respuesta. Para ver qué intentos de contraseña han tenido éxito una buena estrategia es fijarnos en el tamaño de la respuesta de cada petición. Si nosotros vemos que al hacer una petición con una contraseña errónea el servidor nos envía respuestas de 3,29Kb y de repente vemos que en una de esas peticiones la respuesta es de un tamaño distinto quiere decir que el servidor ha respondido otra cosa, es decir que probablemente la haya aceptado.

En este ejemplo podemos ver que se ha obtenido un resultado diferente con la contraseña “cursoowasp” que es la correcta.
En el caso de que usásemos un diccionario de XSS deberemos fijarnos en la columna “Estado” la cual aparecerá con una señal y el texto Reflected en caso de que el mismo payload que hemos enviado sea devuelto por la página, es decir, en caso de que sea vulnerable.

Es importante también destacar, que a pesar de que nosotros hemos usado un campo de formulario para hacer nuestros ataques podríamos usar varios campos o cabeceras de la misma forma que hemos hecho.
Por último acabar diciendo que para aquellas páginas que contienen CSRF ZAP dispone de una utilidad (Configuración>Tokens anti CSRF) en la que podemos especificar el campo correspondiente al token para que lo tenga en consideración a la hora de hacer las peticiones, en el vídeo de la entrada podéis ver un ejemplo de su uso.

Seguir en twitter: @disoftin


Publicar un comentario

0 Comentarios