
Outil d'identification de Blind WAF

identYwaf est un outil d'identification capable de reconnaître le type de protection web (WAF) par inférence aveugle. L'inférence aveugle est réalisée en inspectant les réponses provoquées par un ensemble de charges offensives prédéfinies (non destructives), celles-ci étant utilisées uniquement pour déclencher le système de protection web intermédiaire (ex. http://<hôte>?aeD0oowi=1 AND 2>1). Actuellement, il prend en charge plus de 80 produits de protection différents (ex. aeSecure, Airlock, CleanTalk, CrawlProtect, Imunify360, MalCare, ModSecurity, Palo Alto, SiteGuard, UrlScan, Wallarm, WatchGuard, Wordfence, etc.), et la base de connaissances ne cesse de s'enrichir.
Pour plus d'informations, vous pouvez consulter les diapositives d'une conférence intitulée « Blind WAF identification » donnée à Sh3llCON 2019 (Santander / Espagne).
Remarque : dans le cadre de ce projet, des captures d'écran de réponses caractéristiques pour différents systèmes de protection web sont collectées (manuellement) pour référence future.







Vous pouvez télécharger la dernière archive zip en cliquant ici.
De préférence, vous pouvez télécharger identYwaf en clonant le dépôt Git :
git clone --depth 1 https://github.com/stamparm/identYwaf.git
identYwaf fonctionne immédiatement avec n'importe quelle version de Python de 2.6.x à 3.x sur n'importe quelle plateforme.
$ python identYwaf.py
__ __
____ ___ ___ ____ ______ | T T __ __ ____ _____
l j| \ / _]| \ | T| | || T__T T / T| __|
| T | \ / [_ | _ Yl_j l_j| ~ || | | |Y o || l_
| | | D YY _]| | | | | |___ || | | || || _|
j l | || [_ | | | | | | ! \ / | | || ]
|____jl_____jl_____jl__j__j l__j l____/ \_/\_/ l__j__jl__j (1.0.XX)
Usage: python identYwaf.py [options] <host|url>
Options:
--version Show program's version number and exit
-h, --help Show this help message and exit
--delay=DELAY Delay (sec) between tests (default: 0)
--timeout=TIMEOUT Response timeout (sec) (default: 10)
--proxy=PROXY HTTP proxy address (e.g. "http://127.0.0.1:8080")
--proxy-file=PRO.. Load (rotating) HTTP(s) proxy list from a file
--random-agent Use random HTTP User-Agent header value
--code=CODE Expected HTTP code in rejected responses
--string=STRING Expected string in rejected responses
--post Use POST body for sending payloads