Após realizar um pentest em uma aplicação web e descobrir um vetor vulnerável a XSS, percebi que a aplicação possuía um Web Application Firewall (WAF) configurado que bloqueava a maioria dos termos relacionados a XSS, logo, pensei em desenvolver uma ferramenta que permitiria passar como entrada todos os termos que você sabe que o WAF da aplicação bloqueia, assim, a aplicação retornaria todos os payloads que não possuem esses termos.
Baseado nessa ideia, desenvolvi a ferramenta whichxss que permite você passar os argumentos através da seguinte sintaxe: -f "href" -f "<script" -fR "on.*="
. O -f é para passar os termos que você sabe que o WAF barra e o -fR a mesma coisa, porém com suporte à Regex.
Logo após desenvolver essa funcionalidade, pensei na cereja do bolo: Uma outra funcionalidade que realiza um teste heurístico (utilizando o termo FUZZ em uma URL) para te auxiliar a obter quais termos são bloqueados pelo WAF.
Ao final do procedimento, a ferramenta retorna uma linha de comando pronta para ser executada e retornar os resultados baseados no teste automático.
Também é possível visualizar o resultado de payloads de algumas possíveis combinações baseadas em termos permitidos detectados durante o teste automatizado. Na imagem abaixo é possível ver que não existem resultados contendo eventos ondrag, onclick, a função alert() e outros, porque não foram permitidas pelo WAF da aplicação web testada.
Conclusão
Os resultados de algumas funcionalidades podem não ser precisas, pois a ferramenta e o conceito ainda são novos. Mas você pode desfrutar desta ferramenta clicando na imagem abaixo. Sinta-se a vontade para realizar pull requests com melhorias no repositório caso desejar.