Scrapy es un framework que cuenta con varias
utilidades para crear spiders y crawlers, se ha vuelto bastante popular y
en cada nueva versión es mucho más estable y robusto. Hace algún tiempo
comentaba en un vídeo de la serie de Hacking con Python
los elementos que a mi parecer eran los más interesantes de Scrapy y
cómo se puede utilizar desde cualquier script en Python. Dado que este
tipo de actividades casi siempre suelen ir de la mano con procesos de
minería y extracción de datos, a lo mejor no resulta tan llamativo para
un pentester/hacker (o si), pero cuando hablamos de ejecutar un proceso
de crawling no solo para extraer información, sino para detectar
vulnerabilidades en aplicaciones web, seguro que más de uno comienza a
ver que se pueden hacer cosas muy interesantes.
Si has visto como funciona un spider y la cantidad de elementos involucrados en un proceso de crawling, casi seguro que alguna vez te habrás preguntado ¿Y cómo puedo utilizar esto para ejecutar tareas de pentesting? Creo que es una pregunta bastante lógica, ya que además de visitar enlaces y analizar la estructura de un sitio web, también estás jugando con cabeceras HTTP, parámetros en el cuerpo de la petición o directamente en la URL, formularios, diferentes tipos de “content-types” y un largo etc. Son muchas las posibilidades que tienes a tu disposición.
Ahora bien, imaginar por un segundo que esto lo aplicamos no solamente a aplicaciones web en Internet, sino también a servicios ocultos del tipo HTTP en la red de TOR. A mi personalmente me ha parecido una idea de lo más interesante y ahora mismo me encuentro desarrollándola para la próxima versión Tortazo, algo de lo que pienso hablaros en un próximo articulo.
Si has visto como funciona un spider y la cantidad de elementos involucrados en un proceso de crawling, casi seguro que alguna vez te habrás preguntado ¿Y cómo puedo utilizar esto para ejecutar tareas de pentesting? Creo que es una pregunta bastante lógica, ya que además de visitar enlaces y analizar la estructura de un sitio web, también estás jugando con cabeceras HTTP, parámetros en el cuerpo de la petición o directamente en la URL, formularios, diferentes tipos de “content-types” y un largo etc. Son muchas las posibilidades que tienes a tu disposición.
Ahora bien, imaginar por un segundo que esto lo aplicamos no solamente a aplicaciones web en Internet, sino también a servicios ocultos del tipo HTTP en la red de TOR. A mi personalmente me ha parecido una idea de lo más interesante y ahora mismo me encuentro desarrollándola para la próxima versión Tortazo, algo de lo que pienso hablaros en un próximo articulo.
Si quieres utilizar Scrapy directamente y realizar
pruebas de pentesting contra todos los enlaces encontrados y procesados
por un Spider, no hay demasiados impedimentos para hacerlo, sin embargo
existe una herramienta que ya lo hace por ti, dicha herramienta es
XSScrapy.
-
Instalación y uso de XSScrapy
XSScrapy es una aplicación fácil de instalar y de
usar, como ya os imaginaréis se basa en Scrapy y permite encontrar
vulnerabilidades del estilo XSS (tanto reflejado como almacenado) y
también vulnerabilidades del tipo SQLi. El proyecto se encuentra alojado
en el siguiente repositorio de GitHub https://github.com/DanMcInerney/xsscrapy y para instalarlo basta con utilizar el comando “pip” junto con el fichero de dependencias.
>git clone https://github.com/DanMcInerney/xsscrapy.git && cd xsscrapy
>pip install -r requirements.txt
|
A continuación se puede comenzar a probar la aplicación, que sobresale por su simplicidad.
>./xsscrapy.py -h
usage: xsscrapy.py [-h] [-u URL] [-l LOGIN] [-p PASSWORD] [-c CONNECTIONS]
[-r RATELIMIT] [–basic]
optional arguments:
-h, –help show this help message and exit
-u URL, –url URL URL to scan; -u http://example.com
-l LOGIN, –login LOGIN
Login name; -l danmcinerney
-p PASSWORD, –password PASSWORD
Password; -p pa$$w0rd
-c CONNECTIONS, –connections CONNECTIONS
Set the max number of simultaneous connections
allowed, default=30
-r RATELIMIT, –ratelimit RATELIMIT
Rate in requests per minute, default=0
–basic Use HTTP Basic Auth to login
|
Evidentemente la opción que resulta más interesante
es en la que se puede definir la URL (-u/–url) del objetivo y a partir
de allí, comenzar a ejecutar el procesamiento de enlaces y
peticiones/respuestas HTTP. Otra opción interesante es la que permite
establecer el número de conexiones simultaneas máximo contra el sitio
web en cuestión (-c/–connections) algo que resulta muy practico para
evitar que un WAF detecte el ataque y bloquee las peticiones desde la IP
donde se realizan. Además, en el caso de que el sitio web requiera
autenticación (digest o basic) es posible indicar un usuario y una
contraseña con los interruptores -l y -p.
Ahora que tenemos una imagen general del funcionamiento del programa, podemos comenzar a utilizarlo con una aplicación web vulnerable. Existen aplicaciones web para realizar pruebas de penetración de todos los gustos y colores, algunas de ellas ya las he mencionado y explicado en varias ocasiones en este sitio, tales como DOJO InsecureWebApp, Hacme Casino, DVWA (Damn Vulnerable Web Application), WebGoat, etc. En esta ocasión vamos a utilizar Django-Moth, una aplicación web vulnerable escrita en Django que puedes descargar libremente desde aquí: https://github.com/andresriancho/django-moth pero si lo prefieres puedes utilizar cualquier otra, a efectos prácticos da un poco igual.
Ahora que tenemos una imagen general del funcionamiento del programa, podemos comenzar a utilizarlo con una aplicación web vulnerable. Existen aplicaciones web para realizar pruebas de penetración de todos los gustos y colores, algunas de ellas ya las he mencionado y explicado en varias ocasiones en este sitio, tales como DOJO InsecureWebApp, Hacme Casino, DVWA (Damn Vulnerable Web Application), WebGoat, etc. En esta ocasión vamos a utilizar Django-Moth, una aplicación web vulnerable escrita en Django que puedes descargar libremente desde aquí: https://github.com/andresriancho/django-moth pero si lo prefieres puedes utilizar cualquier otra, a efectos prácticos da un poco igual.
Después de descargar el proyecto del repositorio GitHub, se puede iniciar la aplicación Django de la siguiente forma:
>python manage runserver 8080
Performing system checks…
System check identified no issues (0 silenced).
February 18, 2015 – 17:05:08
Django version 1.7.1, using settings ‘djmoth.settings’
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
|
El puerto por defecto es el 8000, pero como se puede
apreciar se puede cambiar por cualquier otro. Recordar que se trata de
una aplicación web con vulnerabilidades fáciles de explotar, evitar
utilizarla en Internet y mucho menos, utilizar un puerto como el 80 que
requiere privilegios de root.
Todas las vulnerabilidades de Django Moth se
encuentran separadas por secciones, pero aun así, el crawler de
XSScrapy, a la fecha de redactar este articulo, no permite establecer
reglas para indicar en qué momento debe detenerse el ataque y cuales son
los enlaces que se permite visitar. Tal falta de control es un problema
a la larga, ya que muchas páginas tienen enlaces a otros dominios y es
fácil que el proceso recursivo termine llevando al crawler a sitios que
no deberían analizarse, así que hay que estar atentos a las trazas que
arroja el programa en todo momento. Ahora se puede ejecutar algo como lo
siguiente:
./xsscrapy.py -u http://localhost:8080/audit/os_commanding/blind_osc.py?cmd=ls
|
Se podrán ver varias trazas y los elementos que la
herramienta va analizando en cada iteración. En el caso de interrumpir
el proceso manualmente o que termine debido a que ya se han recorrido
todos los enlaces, se genera automáticamente un fichero con nombre:
“xsscrapy-vulns.txt” el cual contiene todos los resultados encontrados.
Incluye cosas como las vulnerabilidades encontradas, puntos de
inyección, parámetros utilizados, la petición y respuesta del servidor,
etc.
Una herramienta interesante con mucho potencial y
aunque a mi juicio se puede explotar mucho más el framework de Scrapy,
puede resultar muy instructiva para aprender detalles avanzados del
framework, eso si, solamente si estas dispuesto a ver el código y
entender cómo funciona, algo que desde luego te recomendaría ya que
tiene detalles técnicos muy valiosos y que te ayudarán a aprender
ciertos “trucos” a la hora de crear tus propias herramientas.
Fuente: http://thehackerway.com/2015/03/12/xsscrapy-para-procesos-de-crawling-e-identificacion-de-vulnerabilidades/
No hay comentarios:
Publicar un comentario