
Herramienta de identificación ciega de WAF

identYwaf es una herramienta de identificación que puede reconocer el tipo de protección web (es decir, WAF) basándose en inferencia ciega. La inferencia ciega se realiza inspeccionando las respuestas provocadas por un conjunto de cargas ofensivas predefinidas (no destructivas), donde estas se usan únicamente para activar el sistema de protección web intermedio (ej. http://<host>?aeD0oowi=1 AND 2>1). Actualmente soporta más de 80 productos de protección diferentes (ej. aeSecure, Airlock, CleanTalk, CrawlProtect, Imunify360, , , , , , , , , etc.), mientras que la base de conocimiento crece constantemente.
MalCareModSecurityPalo AltoSiteGuardUrlScanWallarmWatchGuardWordfencePara más información puedes consultar las diapositivas de la charla "Identificación ciega de WAF" presentada en Sh3llCON 2019 (Santander / España).
Nota: como parte de este proyecto, se están recopilando (manualmente) capturas de pantalla de respuestas características de diferentes sistemas de protección web para referencia futura.







Puedes descargar el último zipball haciendo clic aquí.
Preferiblemente, puedes descargar identYwaf clonando el repositorio Git:
git clone --depth 1 https://github.com/stamparm/identYwaf.git
identYwaf funciona de inmediato con cualquier versión de Python desde 2.6.x hasta 3.x en cualquier plataforma.
$ 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