hacktricks/pentesting-web/web-tool-wfuzz.md

245 lines
15 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
# Herramienta Web - WFuzz
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
Una herramienta para FUZZear aplicaciones web en cualquier lugar.
> Wfuzz ha sido creada para facilitar la tarea en las evaluaciones de aplicaciones web y se basa en un concepto simple: reemplaza cualquier referencia a la palabra clave FUZZ por el valor de una carga útil dada.
## Instalación
Instalado en Kali
Github: [https://github.com/xmendez/wfuzz](https://github.com/xmendez/wfuzz)
```
pip install wfuzz
```
## Opciones de filtrado
```bash
--hs/ss "regex" #Hide/Show
#Simple example, match a string: "Invalid username"
#Regex example: "Invalid *"
--hc/sc CODE #Hide/Show by code in response
--hl/sl NUM #Hide/Show by number of lines in response
--hw/sw NUM #Hide/Show by number of words in response
--hh/sh NUM #Hide/Show by number of chars in response
--hc/sc NUM #Hide/Show by response code
```
## Opciones de salida
```bash
wfuzz -e printers #Prints the available output formats
-f /tmp/output,csv #Saves the output in that location in csv format
```
### Opciones de codificadores
#### URL Encoding
#### Codificación de URL
This is the most common encoding used in web applications. It replaces unsafe ASCII characters with a "%" followed by two hexadecimal digits. For example, the space character is replaced with "%20".
Esta es la codificación más común utilizada en aplicaciones web. Reemplaza los caracteres ASCII inseguros con un "%" seguido de dos dígitos hexadecimales. Por ejemplo, el espacio se reemplaza con "%20".
#### HTML Encoding
#### Codificación HTML
This encoding replaces unsafe characters with their corresponding HTML entities. For example, the less-than sign "<" is replaced with "&lt;".
Esta codificación reemplaza los caracteres inseguros con sus entidades HTML correspondientes. Por ejemplo, el signo menor que "<" se reemplaza con "&lt;".
#### Base64 Encoding
#### Codificación Base64
This encoding converts binary data into a string of ASCII characters. It is commonly used to transmit data over protocols that can only handle ASCII characters. It is not a form of encryption and can be easily decoded.
Esta codificación convierte datos binarios en una cadena de caracteres ASCII. Se utiliza comúnmente para transmitir datos sobre protocolos que solo pueden manejar caracteres ASCII. No es una forma de cifrado y puede ser fácilmente decodificada.
#### Hex Encoding
#### Codificación hexadecimal
This encoding converts binary data into a string of hexadecimal digits. It is commonly used in computing and networking to represent binary data in a human-readable format.
Esta codificación convierte datos binarios en una cadena de dígitos hexadecimales. Se utiliza comúnmente en informática y redes para representar datos binarios en un formato legible por humanos.
```bash
wfuzz -e encoders #Prints the available encoders
#Examples: urlencode, md5, base64, hexlify, uri_hex, doble urlencode
```
Para utilizar un codificador, debes indicarlo en la opción **"-w"** o **"-z"**.
Ejemplos:
```bash
-z file,/path/to/file,md5 #Will use a list inside the file, and will transform each value into its md5 hash before sending it
-w /path/to/file,base64 #Will use a list, and transform to base64
-z list,each-element-here,hexlify #Inline list and to hex before sending values
```
## Hoja de trucos
### Fuerza bruta en formularios de inicio de sesión
#### **POST, lista única, filtro de cadena (ocultar)**
```bash
wfuzz -c -w users.txt --hs "Login name" -d "name=FUZZ&password=FUZZ&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by line
```
#### **POST, 2 listas, código de filtro (mostrar)**
```bash
wfuzz.py -c -z file,users.txt -z file,pass.txt --sc 200 -d "name=FUZZ&password=FUZ2Z&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by code
```
#### **GET, 2 listas, filtro de cadena (show), proxy, cookies**
En esta sección, se utilizará la herramienta `wfuzz` para realizar una solicitud GET a una URL y filtrar la respuesta utilizando una cadena específica. También se utilizarán dos listas para realizar la solicitud y se configurará un proxy y cookies para la solicitud.
El siguiente comando muestra cómo se puede utilizar `wfuzz` para realizar una solicitud GET a una URL y filtrar la respuesta utilizando la cadena "show":
```
wfuzz -c -z file,/path/to/wordlist.txt -z file,/path/to/second_wordlist.txt --hs="show" -p 127.0.0.1:8080 --cookies "cookie1=value1; cookie2=value2" http://example.com/FUZZ
```
En este comando, `-c` indica que se deben mostrar los resultados de la solicitud, `-z file` indica que se utilizarán dos listas para realizar la solicitud, `--hs="show"` indica que se filtrará la respuesta utilizando la cadena "show", `-p 127.0.0.1:8080` indica que se utilizará un proxy en la dirección IP y puerto especificados, y `--cookies "cookie1=value1; cookie2=value2"` indica que se utilizarán cookies en la solicitud.
La URL se especifica como `http://example.com/FUZZ`, donde `FUZZ` es el marcador de posición que se reemplazará con los valores de las listas especificadas.
Este comando es útil para encontrar información específica en la respuesta de una solicitud GET y para configurar un proxy y cookies para la solicitud.
```bash
wfuzz -c -w users.txt -w pass.txt --ss "Welcome " -p 127.0.0.1:8080:HTTP -b "PHPSESSIONID=1234567890abcdef;customcookie=hey" "http://example.com/index.php?username=FUZZ&password=FUZ2Z&action=sign+in"
```
### Fuerza bruta de directorios/ Fuerza bruta RESTful
[Lista de palabras clave de parámetros de Arjun](https://raw.githubusercontent.com/s0md3v/Arjun/master/arjun/db/params.txt)
```
wfuzz -c -w /tmp/tmp/params.txt --hc 404 https://domain.com/api/FUZZ
```
### Fuerza Bruta en Parámetros de Ruta
```bash
wfuzz -c -w ~/git/Arjun/db/params.txt --hw 11 'http://example.com/path%3BFUZZ=FUZZ'
```
### Autenticación de cabecera
#### **Básica, 2 listas, cadena de filtro (show), proxy**
```bash
wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --basic FUZZ:FUZ2Z "http://example.com/index.php"
```
#### **NTLM, 2 listas, cadena de filtro (show), proxy**
En algunos casos, es posible que necesitemos usar NTLM para autenticarnos en el objetivo. En este caso, podemos usar dos listas de palabras diferentes para intentar autenticarnos con diferentes usuarios y contraseñas. Podemos hacer esto usando la opción `-w` seguida del nombre del archivo que contiene la lista de palabras para usuarios y la opción `-W` seguida del nombre del archivo que contiene la lista de palabras para contraseñas.
Además, podemos usar la opción `--filter` o `-f` seguida de una cadena de filtro para mostrar solo las respuestas que contienen la cadena de filtro. Esto puede ser útil para reducir el ruido en la salida y centrarse en las respuestas relevantes.
Finalmente, si estamos detrás de un proxy, podemos usar la opción `--proxy` seguida de la dirección del proxy para enrutar todas las solicitudes a través del proxy.
```bash
wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --ntlm 'domain\FUZZ:FUZ2Z' "http://example.com/index.php"
```
### Fuerza bruta de Cookie/Header (vhost brute)
#### **Cookie, código de filtro (show), proxy**
```bash
wfuzz -c -w users.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "Cookie:id=1312321&user=FUZZ" "http://example.com/index.php"
```
#### **User-Agent, código de filtro (ocultar), proxy**
El User-Agent es una cadena de texto que identifica al navegador o aplicación que se está utilizando para realizar una petición HTTP. En algunos casos, el servidor puede filtrar las peticiones en función del User-Agent, por lo que es importante configurarlo correctamente para evitar ser bloqueado.
El código de filtro se utiliza para ocultar ciertos resultados de la respuesta del servidor. Por ejemplo, si se está buscando una vulnerabilidad en un formulario de login, se puede utilizar un código de filtro para ocultar los resultados que indican que el login ha sido exitoso.
El uso de un proxy puede ayudar a ocultar la dirección IP del atacante y evitar ser detectado. Además, algunos proxies pueden modificar el User-Agent de las peticiones para evitar ser bloqueados por el servidor.
```bash
wfuzz -c -w user-agents.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "User-Agent: FUZZ" "http://example.com/index.php"
```
#### **Anfitrión**
```bash
wfuzz -c -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-
top1million-20000.txt --hc 400,404,403 -H "Host: FUZZ.example.com" -u
http://example.com -t 100
```
### Verbos HTTP (métodos) por fuerza bruta
#### **Usando archivo**
```bash
wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"
```
#### **Usando lista en línea**
Puede usar una lista en línea para especificar valores para un parámetro. Por ejemplo, si desea probar diferentes valores para el parámetro `id`, puede usar una lista en línea como esta:
```
wfuzz -c -z list,1-10 --hs "Invalid id" http://example.com?id=FUZZ
```
En este ejemplo, `list,1-10` especifica una lista en línea que contiene los valores `1` a `10`. El parámetro `--hs` se utiliza para especificar una cadena de texto que indica que el valor del parámetro `id` es inválido. `FUZZ` es una palabra clave especial que se utiliza para indicar dónde se insertará cada valor de la lista en línea.
```bash
$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
```
### Fuerza bruta de directorios y archivos
---
#### WFuzz
WFuzz es una herramienta de fuerza bruta que se utiliza para encontrar vulnerabilidades en aplicaciones web. Es capaz de buscar directorios y archivos ocultos, así como también puede realizar ataques de inyección de parámetros y de fuerza bruta de contraseñas.
Para buscar directorios y archivos ocultos, se puede utilizar la opción `-w` para especificar una lista de palabras que se utilizarán para realizar la búsqueda. Por ejemplo:
```
wfuzz -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://example.com/FUZZ
```
En este ejemplo, WFuzz utilizará la lista de palabras `directory-list-2.3-medium.txt` para buscar directorios y archivos ocultos en `http://example.com/`. La opción `-c` indica que WFuzz debe mostrar sólo los códigos de respuesta HTTP, mientras que `FUZZ` es la cadena que se sustituirá por cada palabra de la lista.
También se pueden utilizar otras opciones para personalizar la búsqueda, como `-t` para especificar el número de hilos que se utilizarán, `-p` para especificar una lista de parámetros que se inyectarán en la URL, y `-H` para especificar encabezados HTTP personalizados.
#### Dirb
Dirb es otra herramienta de fuerza bruta que se utiliza para buscar directorios y archivos ocultos en aplicaciones web. Es capaz de buscar en una lista de palabras predefinida o en una lista personalizada, y puede mostrar los códigos de respuesta HTTP y los tamaños de los archivos encontrados.
Para buscar directorios y archivos ocultos con Dirb, se puede utilizar el siguiente comando:
```
dirb http://example.com /usr/share/wordlists/dirb/common.txt
```
En este ejemplo, Dirb utilizará la lista de palabras `common.txt` para buscar directorios y archivos ocultos en `http://example.com/`. Dirb mostrará los códigos de respuesta HTTP y los tamaños de los archivos encontrados.
También se pueden utilizar otras opciones para personalizar la búsqueda, como `-r` para seguir las redirecciones, `-o` para guardar los resultados en un archivo y `-x` para especificar una extensión de archivo específica que se buscará.
```bash
#Filter by whitelisting codes
wfuzz -c -z file,/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --sc 200,202,204,301,302,307,403 http://example.com/uploads/FUZZ
```
## Herramienta para evadir Webs
[https://github.com/carlospolop/fuzzhttpbypass](https://github.com/carlospolop/fuzzhttpbypass)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>