
Un escáner rápido de contrabando de degradación HTTP escrito en Go.
SmuggleFuzz, un escáner de contrabando de degradación HTTP configurable y rápido. Permite a los usuarios personalizar listas de gadgets, ofreciendo una comprensión más profunda de las razones detrás de los fallos en ataques de contrabando. Estoy convencido de que numerosas vulnerabilidades de contrabando basadas en degradación HTTP permanecen sin descubrir. Desafortunadamente, muchas personas detienen su exploración después de un escaneo superficial. Al usar SmuggleFuzz, puedes descubrir vulnerabilidades de contrabando que otros podrían pasar por alto.
Para más información, visita https://moopinger.github.io/blog/smugglefuzz/fuzzing/smuggling/2024/01/31/SmuggleFuzz.html
Descarga una copia desde la página de lanzamientos: https://github.com/Moopinger/smugglefuzz/releases
go install github.com/moopinger/smugglefuzz@latest
Otro método:
git clone https://github.com/moopinger/smugglefuzz.git
cd smugglefuzz
go build .
./smugglefuzz
Hay tres comandos para SmuggleFuzz:
Usage:
smugglefuzz scan [flags]
Examples:
smugglefuzz scan -u https://example.com/ --confirm
smugglefuzz scan -u https://example.com/ --filter TIMEOUT --confirm
smugglefuzz scan -u https://example.com/ -w wordlist.txt -t 10 --confirm --filter TIMEOUT
smugglefuzz scan --dc -u https://example.com/ -w wordlist.txt -x PUT --confirm
//¿Múltiples objetivos? Solo usa -f en lugar de -u y proporciona un archivo con los objetivos:
smugglefuzz scan -f multiple_targets.txt --confirm -t 10
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt --confirm -s ./save-success.txt --filter TIMEOUT
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt -H "Cookie: date=...; session=...;" -s ./save-success.txt -x PUT --filter TIMEOUT
Flags:
-c, --confirm Activa esta bandera para enviar una confirmación al objetivo cuando se encuentre un tiempo de espera. Ayuda a confirmar si el objetivo es vulnerable.
-d, --data string Trama de datos HTTP/2 a enviar. Ej: 99\r\n (predeterminado "99\r\n")
--dc Desactiva el color en la salida. Esto es útil cuando deseas guardar la salida en un archivo.
-f, --file string Un archivo que contiene múltiples objetivos en formato URL. Un objetivo por línea.
--filter string Filtra respuestas por cadena o tipo de trama, etc. Por ejemplo: 405, 200, 502, TIMEOUT, RST, GOAWAY, etc.
-H, --header string Inserta una cabecera personalizada. Debe proporcionarse en el formato de cabecera habitual: "Cookie: date=...; session=...;"
-h, --help ayuda para scan
-i, --interval int Intervalo de tiempo de espera en segundos. (predeterminado 5)
-x, --method string Método de solicitud HTTP a utilizar. (predeterminado "POST")
-s, --save-success string Si una solicitud se confirma como exitosa (mediante la bandera --confirm), se guardará en un archivo. Esto es útil cuando se manejan muchos objetivos.
-t, --threads int Número de hilos a ejecutar. Smugglefuzz puede ir rápido, así que establece el número deseado. Sin embargo, demasiados pueden molestar a cualquier WAF. (predeterminado 4)
-u, --url string URL del objetivo a escanear.
-w, --wordlist string Proporciona una lista personalizada de gadgets a usar. Si no se proporciona, se usará la lista predeterminada.
Usage:
smugglefuzz request [flags]
Examples:
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13"
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -x PUT
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -H "Cookie: date=...; session=...;" --data "223\r\n"
Flags:
-a, --attack string Cabecera de ataque, separada por (; ) como la lista de palabras en modo 'scan'.
-d, --data string Contenido de la trama de datos HTTP/2 a enviar. (predeterminado "99\r\n")
--dc Desactiva el color en la salida.
-H, --header string Inserta cabecera personalizada. Ej: "Cookie: valores"
-h, --help ayuda para request
-i, --interval int Intervalo de tiempo de espera de detección en segundos. (predeterminado 5)
-x, --method string Método a usar. (predeterminado "POST")
-u, --url string URL del objetivo al que enviar la solicitud.
Esto simplemente mostrará los gadgets de contrabando predeterminados. Actualmente, la confirmación incorporada solo funciona para H2.CL y H2.TE. Pero aún es posible detectar ataques H2.0 mediante tiempos de espera (–filter TIMEOUT) o OAST en un dominio propio. (Consulta la sección de pseudo-cabeceras a continuación)
SmuggleFuzz permite a los usuarios un control total sobre las solicitudes mediante listas de palabras personalizadas. Estas listas tienen una estructura básica que debe seguirse para un manejo óptimo de las solicitudes. Por ejemplo, las cabeceras y sus valores se dividen usando un punto y coma y un espacio (; ) en lugar del colon habitual, lo que facilita la inclusión de valores con colon en las solicitudes de contrabando. Esto también abre posibilidades para diversas mutaciones y enfoques creativos. Para obtener una guía detallada sobre cómo crear tus propios payloads, consulta: Investigación HTTP/2 de James Kettle.
La herramienta incluye una lista lista para usar de 125 gadgets de contrabando, aunque siempre hay margen para expandirla. Estos gadgets se pueden mostrar usando el comando 'output', lo que proporciona información sobre cómo estructurar las consultas. Los usuarios pueden ejecutar escaneos con listas de palabras personalizadas usando la bandera 'w'. La lista admite codificación URL (%00) para valores de byte no imprimibles, como retorno de carro y salto de línea representados como '%0d%0a' o '\r\n'. Si bien la lista proporcionada es completa, crear tus propios gadgets puede aumentar significativamente la tasa de éxito.
¿Necesitas soporte h2c? Consulta la rama "experimental-h2c" de SmuggleFuzz.
Las pseudo-cabeceras son totalmente compatibles y se pueden personalizar usando la sintaxis ":nombre":
:authority:scheme:methodEstas cabeceras son particularmente útiles al probar vectores de ataque H2.0. Por ejemplo, al probar contrabando H2.0 usando métodos basados en OAST, entradas de lista de palabras como las siguientes pueden ser efectivas:
A partir de v0.1.8, se puede usar [HOSTNAME] como marcador de posición. SmuggleFuzz lo reemplazará con el nombre de host en tiempo de ejecución.
:authority; [HOSTNAME]\r\n\r\nGET / HTTP/1.1\r\nHost: uniqid.oastify.com\r\nX-HEADER:%20o
:authority; [HOSTNAME]\r\n\r\nGET https://uniqid.oastify.com/ HTTP/1.1\r\nHost: [HOSTNAME]\r\nX-HEADER:%20El método de detección empleado en SmuggleFuzz es similar al utilizado por Albinowax en su investigación de contrabando HTTP/1 y por defparam en Smuggler, aunque adaptado para HTTP/2. Afortunadamente, como estos ataques implican degradaciones, se puede utilizar el mismo cuerpo de solicitud/payload DATA tanto para la detección de H2.CL como de H2.TE.
Una pauta crucial para las listas de palabras es que las cabeceras contrabandeadas exitosamente deben incluir los siguientes valores para un ataque de confirmación:
CL: 13
TE: chunked
Cada solicitud incluye un "Cuerpo"/DATA-Frame con el valor "99\r\n". Si se introduce de contrabando una cabecera TE, el servidor la interpreta como una longitud de contenido fragmentada de 153 (0x99) si el contrabando tiene éxito, lo que provoca un tiempo de espera. De manera similar, introducir de contrabando una cabecera CL con una longitud de contenido de 13 también resulta en un tiempo de espera debido a una longitud insatisfecha.
La solicitud de confirmación reenvía la misma consulta que provocó el tiempo de espera, pero con Datos: "3\r\nABC\r\n0\r\n\r\n". Esto satisface tanto un TE fragmentado como un CL de 13, generando una respuesta exitosa y potencialmente indicando una vulnerabilidad de contrabando.