miércoles, 18 de noviembre de 2015

bxf.py: Haciendo nuestra herramienta de auditoría web I

En esta serie de posts vamos a hacer nuestra "herramienta de auditoría web automatizada". Veremos como mediante python podemos escribir herramientas que, aunque simples, pueden servirnos de base para otras más complejas centradas en la auditoría web.

En esta primera entrada dedicada a los XSS, veremos como detectarlos en los formularios de una página. Para ello tenemos el script bxf.py disponible en el github de 0verl0ad:

https://github.com/0verl0ad/pyJuanker/blob/master/scripts/bxf.py
Empezando con el código:



 vemos que utiliza la librería mechanize de python (rama 2.7.x, no lo he probado con python 3) que permite desde este lenguaje emular un navegador web.

A la declaración de éstas (las librerías) le siguen los parámetros de uso, siendo la url objetivo el primero y el segundo, un diccionario de payloads para probarlos en todos los formularios (éste es opcional).

Los siguientes parámetros que aparecen son para configurar mechanize para que funcione correctamente en la mayoría de páginas.

Siguiendo con el código:



A partir de la línea 43 se recorre el listado de payloads proporcionado y va rellenando cada campo de texto de los formularios para después proceder a enviarlos.

Acto seguido comprueba si el payload está contenido en la página respuesta para ver si el formulario es vulnerable a un XSS.


El problema de este método es que producirá bastantes falsos positivos, pero como aproximación y como base de scripts más complejos cumple su cometido.


Para su uso he utilizado el diccionario de payloads que ofrece un plugin de ZAP disponible en:
https://github.com/zaproxy/zap-extensions/blob/master/src/org/zaproxy/zap/extension/fuzzdb/files/fuzzers/fuzzdb-1.09/attack-payloads/xss/xss-rsnake.txt 



Con el diccionario en nuestro poder, basta con ejecutar el script con:
python bxf.py "http://xxx.com" xss-rsnake.txt
donde http://xxx.com es la url objetivo y xss-rsnake.txt es el archivo de payloads.

La salida resultante:


Al detectar un posible formulario vulnerable se muestran información sobre éste y el payload utilizado para explotarlo (el script para una vez detecta un payload vulnerable, es decir, no prueba toda la lista si ya tiene un posible positivo).


Con todo esto me despido, nos leemos en breve ;)


5 0verl0ad Labs: bxf.py: Haciendo nuestra herramienta de auditoría web I En esta serie de posts vamos a hacer nuestra "herramienta de auditoría web automatizada". Veremos como mediante python podemos esc...

1 comentario:

Anónimo dijo...

Hola, tambien he usado mechanize. Pero tenia problemas con las paginas locales donde solo pones la ip y tiene certificado auto-firmado. Sabes como hacer que mechanize lo entienda y no genere error? Urllib2 si funciona, pero mechanize sería mucho más simple

< >