
Outil automatisé de test de sécurité WAF qui détecte les faux positifs et les faux négatifs en utilisant plus de 15 catégories de charges utiles, notamment l'injection SQL, XSS, RCE et l'injection GraphQL. Prend en charge Docker, la sortie JSON et les charges utiles personnalisées.
WAF Bypass Tool est un outil open source pour analyser la sécurité de tout WAF pour les faux positifs et faux négatifs en utilisant des charges utiles prédéfinies et personnalisables. Vérifiez votre WAF avant qu'un attaquant ne le fasse. WAF Bypass Tool est développé par l'équipe Nemesida WAF avec la participation de la communauté.

Il est interdit d'utiliser à des fins illégales. Ne violez pas la loi. Nous ne sommes pas responsables des risques possibles associés à l'utilisation de ce logiciel.
La dernière version de waf-bypass est toujours disponible via le Docker Hub. Elle peut être facilement téléchargée via la commande suivante :
# docker pull nemesida/waf-bypass # docker run nemesida/waf-bypass --host='example.com'
# pipx install git+https://github.com/nemesida-waf/waf-bypass.git # <pipx bin dir>/waf-bypass
# git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/ # python3 -m pip install -r /opt/waf-bypass/requirements.txt # python3 /opt/waf-bypass/main.py --host='example.com'
'--proxy' (--proxy='http://proxy.example.com:3128') - option permettant de spécifier à quoi se connecter au lieu de l'hôte.
'--header' (--header 'Authorization: Basic YWRtaW46YWRtaW4=' --header 'X-TOKEN: ABCDEF') - option permettant de spécifier l'en-tête HTTP à envoyer avec toutes les requêtes (par exemple pour l'authentification). L'utilisation multiple est autorisée.
'--user-agent' (--user-agent 'MyUserAgent 1/1') - option permettant de spécifier l'en-tête HTTP User-Agent à envoyer avec toutes les requêtes, sauf lorsque le User-Agent est défini par la charge utile ("USER-AGENT").
'--block-code' (--block-code='403' --block-code='222') - option permettant de spécifier le code de statut HTTP attendu lorsque le WAF est bloqué. (par défaut ). L'utilisation multiple est autorisée.
Exemple de spécification de sortie JSON :
{
"TARGET": "https://example.com", // defined by --host option
"PROXY": {}, // defined by --proxy option
"HEADERS": { // defined by --header option
"User-Agent": ""
},
"BLOCK-CODE": [ // defined by --block-code option
...
],
"THREADS": 50, // defined by --threads option
"TIMEOUT": 30, // defined by --timeout option
"EXCLUDE-DIR": [ // defined by --exclude-dir option
...
],
"FAILED": { // requests with failed processing status
"MFD/7.json": {
"BODY": "WBHTTPSConnectionPool(host='example.com', port=443): Read timed out. (read timeout=1)"
},
...
},
"PASSED": { // passed requests
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
},
"FALSED": { // requests with false positive processing status
...
},
"BYPASSED": { // requests with false negative processing status
"UWA/26.json": {
"URL": "200 RESPONSE CODE"
},
...
},
"TestRequest": { // test requests with processing status, exclude passed
"FAILED": {},
"FALSED": {
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
}
},
"CURL": { // cURL command to reproduce false positive and false negative requests
"FALSED": {},
"BYPASSED": {
"UWA/26.json": {
"URL": "curl -X GET -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' 'https://example.com/do.php#.png'"
},
...
}
}
}
Selon l'objectif, les charges utiles sont situées dans les dossiers appropriés :
Lors de la compilation d'une charge utile, les zones, méthodes et options suivantes sont utilisées :
Base64, HTML-ENTITY, UTF-16) en plus de l'encodage pour la charge utile. Les valeurs multiples sont indiquées par un espace (par exemple Base64 UTF-16). Applicable uniquement aux zones ARGS, BODY, COOKIE et HEADER. Non applicable aux charges utiles dans les dossiers API et MFD. Non compatible avec l'option JSON.Sauf pour certains cas décrits ci-dessous, les zones sont indépendantes les unes des autres et sont testées séparément (si 2 zones sont spécifiées, le script enverra 2 requêtes - en vérifiant alternativement une zone puis l'autre).
Pour les zones, vous pouvez utiliser le suffixe %RND%, qui permet de générer une chaîne arbitraire de 6 lettres et chiffres. (par exemple : param%RND=my_payload ou param=%RND% OU A%RND%B)
Vous pouvez créer vos propres charges utiles, pour cela, créez votre propre dossier dans le dossier '/payload/', ou placez la charge utile dans un dossier existant (par exemple : '/payload/XSS'). Le format de données autorisé est JSON.
Les charges utiles de test API situées dans ce dossier sont automatiquement accompagnées d'un en-tête 'Content-Type: application/json'.
Pour les charges utiles MFD (multipart/form-data) situées dans ce dossier, vous devez spécifier BODY (obligatoire) et BOUNDARY (optionnel). Si BOUNDARY n'est pas défini, il sera généré automatiquement (dans ce cas, seule la charge utile doit être spécifiée pour BODY, sans données supplémentaires ('... Content-Disposition: form-data; ...').
Si un BOUNDARY est spécifié, alors le contenu de BODY doit être formaté conformément à la RFC, mais cela permet d'avoir plusieurs charges utiles dans BODY séparées par BOUNDARY.
D'autres zones sont autorisées dans ce dossier (par exemple : URL, ARGS etc.). Quel que soit la zone, l'en-tête 'Content-Type: multipart/form-data; boundary=...' sera ajouté à toutes les requêtes.
403'--threads' (--threads=15) - option permettant de spécifier le nombre de threads d'analyse parallèles (par défaut 10).
'--timeout' (--timeout=10) - option permettant de spécifier un délai d'attente de traitement des requêtes en secondes. (par défaut 30).
'--exclude-dir' - exclure le répertoire des charges utiles (--exclude-dir='SQLi,XSS').
'--json-format' - une option qui permet d'afficher le résultat du travail au format JSON (utile pour intégrer l'outil avec des plateformes de sécurité). Si l'option n'est pas spécifiée, la sortie sera au format tableau (le format par défaut).
'--details' - afficher les charges utiles de faux positifs et faux négatifs. Non compatible avec l'option --json-format.
'--no-progress' - ne pas afficher la barre de progression.
'--curl-replay' - afficher la commande cURL pour reproduire les requêtes de faux positifs, faux négatifs ou échouées. Non compatible avec l'option --json-format.