Hacking web: buscando leaks en github con Scrapy

Muchas veces no es necesario hackear nada para hacerse con credenciales o datos confidenciales. Muchos desarrolladores tienen la extraña manía de dejarse información sensible en su código. Y es deber de un pentester hacerse con esa información.

Hoy voy a hacer un pequeño tutorial sobre cómo puedes rastrear la web en busca de información sensible. Para ello, utilizaré la herramienta Scrapy, un crawler muy potente que es muy sencillo de configurar en python. Lo más destaclable de esta heramienta es la rapidez con la que realiza el crawling. Para esta pequeña prueba de concepto, mostraré cómo obtener información sensible de repositorios de GitHub.

Para empezar, instalamos scrapy con “pip install scrapy“. Una vez instalado, creamos un nuevo proyecto:

Teniendo el proyecto creado, vamos a crear nuestro primer scrapper. Para este primer ejemplo, analizaré el github de v1s1t0r.

Nos situamos en la carpeta spiders/ dentro del proyecto, y generamos el scraper:

 

Este comando nos crea un archivo scrapv1s1t0r.py en el que encontramos el esqueleto del scraper:

Èn la variable “allowed_domains” indicamos las URLs a las que le está permitido al scraper explorar. Como puede haber otros githubs relacionados que sea interesante comprobar, y como github muestra el contenido de los ficheros desde raw.githubusercontent.com, vamos a permitir estos dos dominios. En la variable start_urls aparece indicada la url objetivo, en este caso el github de v1s1t0r.

Si quisieramos analizar un conjunto de repositorios, en vez de uno solo, bastaría con guardar las URLs en un archivo y asignar la lista de repositorios a la variable start_urls con el siguiente comando:

start_urls = open('githubRepos.txt').read().splitlines()

A continuación procedemos a parsear la respuesta, mediante la función parse. Me interesa guardar los resultados en un fichero, que he llamado “results.txt”. Además, sólo me quedaré con el contenido de los archivos, no me interesa analizar lo que haya en los distintos directorios de github sino en sus ficheros. Para poner esta restricción compruebo que la respuesta venga de raw.githubusercontent.com.

Además, no quiero analizar solo la página de inicio del github de v1s1t0r, sino que quiero que vaya por las distintas ramas hasta que las recorra todas. Para ello añadiré al final el siguiente código, que va generando nuevas peticiones a scrapy por cada URL en las tres ramas principales de un repositorio de github: blob/master, tree/master y raw/master.

Ya solo queda establecer qué queremos buscar. La respuesta está en response.body, por lo que podemos añadir patrones a buscar mediante la librería re de python. Así no solo podemos buscar palabras literales, sino expresiones regulares. Por ejemplo, vamos a buscar que emails aparecen en este repositorio:

El scraper se ejecuta mediante el siguiente comando:

scrapy runspider Scrapv1s1t0rSpider.py

Tras ejecutarlo, veamos el archivo results.txt

 

Parece que el dueño del repositorio ha dejado su email personal. Al ponerlo el google, encontramos una referencia a un famoso hacker:

¿Será realmente este github de OscarAkaElvis? Voy a cambiar la expresión regular del email por “OscarAkaElvis”.

¡Efectivamente! 

Como has podido ver en este ejemplo, gracias a esta potente herramienta podemos analizar toda la web en busca de información que pueda resultar de utilidad. Ajustando la expresión regular que necesites, puedes encontrar usuarios, contraseñas, API Keys, claves privadas SSH… En definitiva, todo lo que se hayan dejado por ahí y nos pueda ser de utilidad para realizar un pentesting.

Lethani.

Esta entrada tiene un comentario

Deja una respuesta