Fuzzing.

El fuzzing consiste en descubrir directorios, subdominios o archivos expuestos en un sitio web.
A continuación se examinarán dos herramientas utilizadas en la fase de reconocimiento para aplicar fuzzing, las cuales son gobuster y wfuzz.

Wfuzz.

Wfuzz sirve para detectar archivos, subdominios y directorios en un sitio web. Wfuzz envía solicitudes HTTP a un servidor web y variando los parámetros de la solicitud de manera automática. Esto permite a wfuzz probar distintos valores para los parámetros y ver cómo el servidor web responde a ellos, lo que ayuda a detectar posibles vulnerabilidades.

Instalación: apt install wfuzz
Instalación del diccionario: apt install seclists

Parámetros más comunes

  • –ssl-ignore-cert -> Deshabilita la verificación del certificado SSL.
  • -c -> Indica que se debe mostrar el progreso de la ejecución del comando. Esto puede ser útil si estás ejecutando una prueba que llevará mucho tiempo y quieres tener una idea de cómo va.
  • -z -> Indica a wfuzz que debe utilizar un archivo de datos específico como entrada para la prueba (Una lista separada por un guion).
  • –hs -> Indica a wfuzz que debe incluir una cadena específica en la solicitud que envía al sitio.
  • -w -> Indicar el diccionario a usar.
  • -l -> Aplicar redirección en código de estado 302.
    Tambien puedes filtrar por ciertas cosas para que no te aparezcan en el output. Con –sl las muestras lineas y con –hl las ocultas.
  • –hl=<number> -> Ocultar todas las lineas que contengan el número indicado.
  • –hw=<number> -> Ocultar todas palabras que contengan el número indicado.
  • –hh=<number> -> Ocultar todos los caracteres que cotengan el número indicado.



Enumeración de directorios. wfuzz -c –hc=404 -t <threads> -w <dictionary> <URL>/FUZZ/
Ataque de fuerza bruta en búsqueda de URL o rutas en un dominio especificado e ignoran los certificados SSL en caso de que sea un ataque por HTTPS.

wfuzz -c --hc=404 -t 200 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt http://192.168.55.68/FUZZ --ssl-ignore-cert



Buscar archivos con diferente tipo de extensiones.

wfuzz -c --hc=404 -t 200 -w /usr/share/SecLists/Discovery/Web-Content/common.txt -z list,sh-pl-html-txt-php-git-bak-backup-pdf-asp-aspx-pdf-php.bak-php-backup http://<ip-address>/cgi-bin/FUZZ.FUZ2Z
  • -z list -> Indica que quieres añadir una lista separada por un “-“.
  • FUZZ -> Palabra clave donde se sustituirá el nombre del archivo.
  • FUZ2Z -> Aquí es donde se sustituirán las extensiones que agregues en la lista.



Brute force cuando se tenga que autenticar en un panel.

wfuzz -c -z file,password_list.txt --hs "password=FUZZ" http://dominio.com/login

–hs -> Indica a wfuzz que debe incluir una cadena específica en la solicitud que envía al sitio. En este caso se utiliza la cadena “password=FUZZ” para indicar que la contraseña de la lista debe reemplazarse en el parámetro “password=” del formulario de inicio de sesión.



Enumerar subdominios.

wfuzz -c --hc=404 -t 100 -w /usr/share/Seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.nunchucks.htb" https://nunchucks.htb

-H -> Cabecera para indicar el dominio donde se aplicará la sustitución.



Enumerar puertos internos de una máquina (SSRF).

wfuzz -c -t 100 -z range,1-65535 "http://<ipAddress or domain>/utility.php?url=http://127.0.0.1:FUZZ"



Buscar objetos que estén indexados por un ID ya sea mediante números o letras utilizando un rango (IDORs)

wfuzz -c -t 100 -z range,1-10000 'http://<ip-address>/id=FUZZ/'

-z range -> Comando para indicar el rango que quieres abarcar.



wfuzz -c -X POST -t 50 -z range,1-1000 'http://<ip-address>/' -d 'pdf_id=FUZZ'

-d -> Indicar la data que se va a tramitar.



Enumerar los métodos permitidos en un a API (API Abuse).

wfuzz -c -X FUZZ <URL> -w /usr/share/Seclists/Fuzzing/http-request-methods.txt



Listar los atributos configurados de los usuarios en LDAP (Se tiene que interceptar la data enviada antes de aplicar brute force) (LDAP Injection).

wfuzz -c -w /usr/share/seclists/Fuzzing/LDAP-openldap-attributes.txt -d 'user_id=*)(FUZZ=*))%00&password=*&login=1&submit=Submit'  <URL>

El null byte (%00) es para comentar el resto de la petición.

Enumerar el número telefónico de un usuario.

wfuzz -c -z range 0,9 -d 'user_id=<userName>)(telephoneNumber=FUZZ))%00' <URL>



Listar los plugins de un gestor de contenido WordPress.

wfuzz -c --hc=404 -t 200 -w /usr/share/Seclists/Discovery/Web-Content/CMS/wp-plugins.fuzz.txt <URL>/FUZZ 



Enumerar usuarios en un sitio web.

wfuzz -c -t 200 --hs"Failed login" -w /usr/share/Seclist/Username/Names/names.txt -d 'username=FUZZ&password=password' http://<ip-address>/login.php
  • –hs -> Te permite filtrar por una cadena texto que se encuentre como respuesta al enviar una petición.
    Lo que hace es que cada vez que nos aparezca esa cadena de texto la va a quitar para no verla en el output del comando.
  • -d ‘<data>‘ -> Es la data que se va a tramitar por POST al momento de hacer el ataque de fuerza bruta.
    La data la obtienes haciendo ctrl + shft + c en el sitio web, te vas a la sección red o network, das clic en el boton “sin procesar” y te mostrará la data que se esta tramitando en formato raw.



Gobuster.

Instalación:apt install gobuster

Parámetros comunes

  • dir -> Indica que se desea realizar un escaneo en busca de directorios.
  • vhost -> Indicar un escaneo en busca el subdominios.
  • -t <number> -> Indica los hilos o las tareas que quieres que se ejecuten simultáneamente.
  • -w -> Especificar el diccionario.
  • -u o –url -> Indicar la dirección IP o el nombre del dominio donde se realizará el escaneo.
  • -k -> Es para deshabilitar la verificación de certificados SSL. No se verificará si un certificado SSL es válido o no al realizar las solicitudes HTTPS.
  • -x -> Indica que se utilizará una lista de extensiones separadas por coma. Sino se especifica una extensión te mostrará todas las extensiones encontradas.
  • -r -> Aplicar redireccionamiento para ver el código de estado final.
  • –exclude-length <length> -> Excluir una longitud en la respuestas.
  • –no-error -> Excluir los errores por consola.
  • –proxy -> Indicar IP y puerto del proxy.
  • –add-slash -> Agregar una diagonal al final de cada petición para encontrar más directorios o archivos.
  • -b <statuscode> -> Ocultar un código de estado.(blacklist)

Nota: Cuando te arroje un problema con el código de estado o la longitud puedes excluir ese código o longitud con el parámetro –exclude-length <length>

Excluir aquellas respuestas que tengan como longitud 32.

gobuster dir -t 200 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2-3-medium.txt -u <URL> -k -r --exclude-length 32 



Enumeración de directorios.

gobuster dir -u http://<ip-address>/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100 --add-slash -b 403,404


También puedes filtrar por el código de estado 200 en lugar de ocultar los códigos de estado erroneos con el parámetro -s, pero la blacklist (-b) tiene que esta vacia

gobuster dir -u http://<ip-address>/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 50 --add-slash -b '' -s 200


gobuster dir -t 200 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u https://<ip-address> -k



Enumeración de subdominios.

gobuster vhost -t 100 -w /usr/share/SecLists/Discovery/DNS/Subdomain-top1million-5000.txt --url https://<ip-address> -k



Buscar archivos ocultos con diferente tipo de extensiones.

gobuster dir -t 200 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://<ip-address> -x txt,php,html,bak,backup,git,pdf



Enumerar directorios y archivos utilizando un proxy (Pivoting).

gobuster dir -t 50 -w <dictionary> -u <URL> -x html,php,txt --proxy socks5://127.0.0.1:1080



Enumerar directorios relacionados con API Abuse.

gobuster dir -t 50 -w /usr/share/SecLists/Discovery/Web-Content/api -u <URL> -k -r --no-error 



Enumeración de directorios a través de SQUID Proxy

gobuster dir -t 20 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://<ipAddress>/ --proxy http:/<ipProxy>:<portProxy>