Comprobar credenciales de sitios con “Basic Auth”

Un día, haciendo pruebas y buscando por la red dispositivos en los cuales poder realizar dichas pruebas e investigaciones, se me ocurrió la idea de hacer un pequeño “script” que me permitiera comprobar credenciales en sitios web que utilizan “Basic Authentication”.

La idea pues era poder pasarle al “script” un listado de direcciones IP y que este comprobara si se utiliza autenticación, y en ese caso que comprobara ciertas credenciales utilizadas por defecto como “admin”/”admin” por ejemplo. Además como para buscar las direcciones IP estaba utilizando Shodan, pues que menos que integrar aquí el API de Python para Shodan para que el propio “script” buscara las IP a partir de unos parámetros de búsqueda.

De este modo nació HttpAuthCrack.py el cual podéis encontrar en la sección de descargas de este blog, o en el botón de descargas que os dejo aquí mismo.

Para utilizar el “script” primero hay que editarlo y poner la API Key de Shodan.

El “script” acepta los siguientes parámetros (la opción larga es con doble – aunque en la visualización solo se vea una).

  • -h o –help: Muestra la pantalla de ayuda
  • -s shodan_dork o –shodan shodan_dork: Realiza la búsqueda del “dork” pasado en Shodan para conseguir una lista de direcciones IP. Este parámetro se puede combinar con -I. Uno de los dos es obligatorio.
  • -I iplistfile o –iplist iplistfile: Fichero con listado de direcciones IP, una IP por línea.
  • -u username o –user username: El usuario a utilizar para el proceso de autenticación (por defecto utiliza “admin”).
  • -p password o –passwd password: La contraseña a utilizar para el proceso de autenticación (por defecto se utiliza “admin”).
  • -U userfile o –userfile userfile: Fichero con usuarios para probar en la autenticación (un usuario por línea). Esta opción anula -u, por lo que el usuario “admin” debe estar en el fichero también si se desea probarlo.
  • -P passfile o –passfile passfile: Fichero con contraseñas para probar (una contraseña por línea). Al igual que con los usuarios, si se quiere probar el password “admin” hay que añadirlo al fichero. Para probar el password en blanco, dejar una linea vacía en el fichero.
  • -t num_threads o –threads num_threads: Número de “threads” a utilizar (por defecto se utilizan 10). Aumentar mucho el número de threads significa muchas más conexiones y ficheros abiertos a la vez, por lo que en algunos casos si se llega al limite el “script” en modo “verbose” muestra el error “Too Many Files Open”. En linux se puede aumentar este límite con “ulimit -n”.
  • -v o –verbose: Salida estándar con mucha más información.

El resultado es un informe “html” con una lista de direcciones IP a las que se ha conseguido acceder y el usuario y la contraseña con las que se ha accedido.

Yo he realizado pruebas con 1000 direcciones IP utilizando 200 “threads” y pasando 4 usuarios genéricos y 4 contraseñas genéricas y los resultados han sido asombrosos, y además en un tiempo bastante aceptable (unos 5 minutos).

Ejemplos de uso:

Buscamos en Shodan con el dork “tp-link port:80” y probamos sobre cada uno de los resultados las credenciales admin/admin utilizando 100 hilos (threads). Hay que tener en cuenta que aunque Shodan indique que tiene miles de resultados, la API por defecto entregará 100 a menos que se modifique el “limit” editando el script.

python httpauthcrack.py -s "tp-link port:80" -t 100

Buscamos “alcatel port:80” y probamos las credenciales que le pasamos en los ficheros “usr.txt” y “pass.txt”. Utilizamos el modo “verbose” .

./httpauthcrack.py -s "alcatel port:80" -U usr.txt -P pass.txt -v

Buscamos “comtrend port:80” y probamos las credenciales 1234/1234, en modo “verbose”.

./httpauthcrack.py -s "alcatel port:80" -u 1234 -p 1234 -v

Probamos las credenciales por defecto (admin/admin) contra una lista de direcciones IP pasadas en un fichero con 20 hilos.

./httpauthcrack.py -I ips.txt -t 20

TODO:

Para más adelante tengo una lista de cosas en el “TODO” que mejorarán la funcionalidad del mismo como por ejemplo:

  • Añadir la posibilidad de modificar las opciones “page”, “limit” y “offset” de la búsqueda de shodan desde la llamada al “script”.
  • Añadir la posibilidad de almacenar los resultados en base de datos.
  • Añadir más información de los dispositivos en el informe de resultados.

Cualquier sugerencia más será bienvenida.

Un saludo.

Publicado en: Basic Auth, python, Shodan

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*