martes, 29 de septiembre de 2015

Fuzzing usando software de código abierto alojado en GitHub

En muchas ocasiones cuando estamos realizando una auditoría de seguridad podemos encontrarnos con aplicaciones web para gestión de contenidos (CMS), monitoriación de sistemas, etc. de código abierto.

Estás aplicaciones siempre serán un buen punto de entrada para conseguir información útil o comprometer el sistema. Con el objetivo de realizar fuzzing para ver que archivos se encuentran en el servidor web he creado un pequeño script para recoger todos los nombres de directorios y archivos de un repositorio alojado en GitHub para posteriormente usarlos como path en las URL que pasaremos al fuzzer. En este caso usaremos wfuzz [1].

Dado que estamos buscando archivos que se encuentran y de los cuales existe el código fuente, podríamos analizar el mismo en busca de posibles agujeros de seguridad.



#!/usr/bin/env python

import sys
import requests
from bs4 import BeautifulSoup


def getData(url):
    requests.packages.urllib3.disable_warnings()
    r = requests.get(url, verify=False)
    soup = BeautifulSoup(r.text, "html5lib")
    data = soup.find_all('tr', attrs={'class': 'js-navigation-item'})
    for i in data:
        if (len(i.find_all('td', attrs={'class': 'icon'})) > 0):
            tipo = " ".join(i.find_all('td', attrs={'class': 'icon'})[0].span.get('class'))
            name = i.find_all('td', attrs={'class': 'content'})[0].a.get('title')
            if tipo == "octicon octicon-file-text":
                print(url.replace(f_url, "") + "/" + name)
            elif tipo == "octicon octicon-file-directory":
                print(url.replace(f_url, "") + "/" + name)
                getData(url + "/" + name)


if __name__ == "__main__": 
 f_url =  sys.argv[1] +"/tree/master/"
 getData(f_url)



Ejemplo si queremos probar las URL que existen en un servidor web que tiene el CMS de Drupal:

$ ./getRepoURLweb.py https://github.com/drupal/drupal > drupal_paths.txt

Y luego se lo pasamos a wfuzz, en este

$ wfuzz -c .z file,drupal_paths.txt http://site-with-drupal/FUZZ


Con esto además se podría crear alguna especie de crawler para poder recopilar y crear grandes diccionarios para fuzzing basandonos en repositorios de código abierto.


[1] https://github.com/xmendez/wfuzz

No hay comentarios:

Publicar un comentario