
Ferramenta de identificação cega de WAF

identYwaf é uma ferramenta de identificação que pode reconhecer o tipo de proteção web (i.e. WAF) com base em inferência cega. A inferência cega é feita inspecionando respostas provocadas por um conjunto de payloads ofensivos predefinidos (não destrutivos), que são usados apenas para acionar o sistema de proteção web intermediário (ex.: http://<host>?aeD0oowi=1 AND 2>1). Atualmente suporta mais de 80 produtos de proteção diferentes (ex.: aeSecure, Airlock, CleanTalk, CrawlProtect, Imunify360, MalCare, ModSecurity, Palo Alto, SiteGuard, UrlScan, Wallarm, WatchGuard, Wordfence, etc.), enquanto a base de conhecimento está constantemente crescendo.
Para mais informações, você pode conferir os slides da palestra "Blind WAF identification" realizada no Sh3llCON 2019 (Santander / Espanha).
Nota: como parte deste projeto, estão sendo coletados (manualmente) capturas de tela de respostas características para diferentes sistemas de proteção web para referência futura.







Você pode baixar o zipball mais recente clicando aqui.
Preferencialmente, você pode baixar o identYwaf clonando o repositório Git:
git clone --depth 1 https://github.com/stamparm/identYwaf.git
identYwaf funciona de imediato com qualquer versão do Python de 2.6.x até 3.x em qualquer 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