
Un scanner rapide de contrebande par déclassement HTTP écrit en Go.
SmuggleFuzz, un scanner de smuggling par downgrade HTTP configurable et rapide. Permettant aux utilisateurs des listes de gadgets personnalisables, il offre des informations plus approfondies sur les raisons des échecs d'attaques de smuggling. Je suis convaincu que de nombreuses vulnérabilités de smuggling basées sur le downgrade HTTP restent non découvertes. Malheureusement, beaucoup arrêtent leur exploration après un scan superficiel. En utilisant SmuggleFuzz, vous pouvez découvrir des vulnérabilités de smuggling que d'autres pourraient négliger.
Pour plus d'informations, voir https://moopinger.github.io/blog/smugglefuzz/fuzzing/smuggling/2024/01/31/SmuggleFuzz.html
Téléchargez une copie depuis la page des releases : https://github.com/Moopinger/smugglefuzz/releases
go install github.com/moopinger/smugglefuzz@latest
Autre :
git clone https://github.com/moopinger/smugglefuzz.git
cd smugglefuzz
go build .
./smugglefuzz
Il existe trois commandes pour 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
//Multiple targets? just use -f instead of -u and provide a file with the targets in it:
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 Activez ce flag pour envoyer une confirmation à la cible lorsqu'un timeout est rencontré. Aide à confirmer si la cible est vulnérable.
-d, --data string Trame de données HTTP/2 à envoyer. ex : 99\r\n (par défaut "99\r\n")
--dc Désactive la couleur dans la sortie. Utile lorsque vous souhaitez sauvegarder la sortie dans un fichier.
-f, --file string Un fichier contenant plusieurs cibles au format url. Une cible par ligne.
--filter string Filtrer les réponses par chaîne ou type de trame, etc. Par exemple : 405, 200, 502, TIMEOUT, RST, GOAWAY, etc.
-H, --header string Insérer un en-tête personnalisé. Il doit être fourni au format d'en-tête habituel : "Cookie: date=...; session=...;"
-h, --help aide pour scan
-i, --interval int L'intervalle de timeout en secondes. (par défaut 5)
-x, --method string La méthode de requête HTTP à utiliser. (par défaut "POST")
-s, --save-success string Si une requête est confirmée comme réussie (via le flag --confirm), elle sera sauvegardée dans un fichier. Utile lorsque vous avez beaucoup de cibles.
-t, --threads int Le nombre de threads à exécuter. Smugglefuzz peut aller vite, donc définissez le nombre souhaité. Cependant, un nombre trop élevé peut perturber les WAF. (par défaut 4)
-u, --url string L'URL cible à scanner.
-w, --wordlist string Fournissez une liste personnalisée de gadgets à utiliser. Si non fournie, la liste par défaut sera utilisée.
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 En-tête d'attaque, séparé par (; ) comme la wordlist en mode 'scan'.
-d, --data string Contenu de la trame de données HTTP/2 à envoyer. (par défaut "99\r\n")
--dc Désactive la couleur dans la sortie.
-H, --header string Insérer un en-tête personnalisé. ex "Cookie: values"
-h, --help aide pour request
-i, --interval int Intervalle de timeout de détection en secondes. (par défaut 5)
-x, --method string La méthode à utiliser. (par défaut "POST")
-u, --url string L'URL cible à laquelle soumettre la requête.
Ceci affichera simplement les gadgets de smuggling par défaut. Actuellement, la confirmation intégrée ne fonctionne que pour H2.CL et H2.TE. Mais il est toujours possible de détecter les attaques H2.0 via des timeouts (–filter TIMEOUT) ou OAST sur un de vos domaines. (Voir la section sur les pseudo-en-têtes ci-dessous)
SmuggleFuzz permet aux utilisateurs un contrôle total sur les requêtes via des wordlists personnalisées. Ces listes ont une structure de base, qui doit être suivie pour un traitement optimal des requêtes. Par exemple, les en-têtes et leurs valeurs sont séparés par un point-virgule et un espace (; ) au lieu du deux-points habituel, facilitant l'inclusion de valeurs avec deux-points dans les requêtes de smuggling. Cela ouvre également des possibilités pour diverses mutations et approches créatives. Pour des conseils détaillés sur la création de vos propres payloads, référez-vous à : Recherche HTTP/2 de James Kettle.
L'outil inclut une liste prête à l'emploi de 125 gadgets de smuggling, bien qu'il y ait toujours de la place pour l'expansion. Ces gadgets peuvent être affichés en utilisant la commande 'output', fournissant des informations sur la structuration des requêtes. Les utilisateurs peuvent lancer des scans avec des wordlists personnalisées en utilisant le flag 'w'. La liste supporte l'encodage URL (%00) pour les valeurs d'octets non imprimables, comme le retour chariot et le saut de ligne représentés par '%0d%0a' ou '\r\n'. Bien que la liste fournie soit complète, la création de vos propres gadgets peut augmenter considérablement les taux de réussite.
Besoin du support h2c ? Consultez la branche "experimental-h2c" de SmuggleFuzz.
Les pseudo en-têtes sont entièrement supportés et peuvent être personnalisés en utilisant la syntaxe ":name" :
:authority:scheme:methodCes en-têtes sont particulièrement utiles lors des tests de vecteurs d'attaque H2.0. Par exemple, lors des tests de smuggling H2.0 utilisant des méthodes basées sur OAST, des entrées de wordlist comme les suivantes peuvent être efficaces :
À partir de v0.1.8, [HOSTNAME] peut être utilisé comme espace réservé. SmuggleFuzz le remplacera par le nom d'hôte au moment de l'exécution.
:authority; [HOSTNAME]\r\n\r\nGET / HTTP/1.1\r\nHost: uniqid.oastify.com\r\nX-HEADER:%20ou
:authority; [HOSTNAME]\r\n\r\nGET https://uniqid.oastify.com/ HTTP/1.1\r\nHost: [HOSTNAME]\r\nX-HEADER:%20La méthode de détection employée dans SmuggleFuzz est similaire à celles utilisées par Albinowax dans ses recherches sur le smuggling HTTP/1 et par le Smuggler de defparam, avec des adaptations pour HTTP/2. Heureusement, comme ces attaques impliquent des downgrades, le même corps de requête/payload DATA peut être utilisé pour la détection H2.CL et H2.TE.
Une directive cruciale pour les wordlists est que les en-têtes smuggled avec succès doivent inclure les valeurs suivantes pour une attaque de confirmation :
CL: 13
TE: chunked
Chaque requête incorpore un "Body"/DATA-Frame avec la valeur "99\r\n". Si un en-tête TE est smuggled, il est interprété comme une longueur de contenu chunked de 153 (0x99) par le serveur s'il est smuggled avec succès, entraînant un timeout. De même, smuggler un en-tête CL avec une longueur de contenu de 13 entraîne également un timeout en raison d'une longueur non satisfaite.
La requête de confirmation soumet à nouveau la même requête qui a conduit au timeout, mais avec Data: "3\r\nABC\r\n0\r\n\r\n". Cela satisfait à la fois un TE chunked et un CL de 13, provoquant une réponse réussie et indiquant potentiellement une vulnérabilité de smuggling.
(Sans ces personnes et projets, cela n'existerait pas)