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