XSStrike: detectando e confirmando cross-site scripting
XSStrike · MIT
O XSStrike testa cross-site scripting. O que o separa de um fuzzer genérico é que ele analisa como um parâmetro é refletido — corpo HTML, atributo, contexto de script — e gera payloads que se encaixam nesse contexto, em vez de disparar uma lista fixa e torcer.
Instalação
git clone https://github.com/s0md3v/XSStrike.git
cd XSStrike && pip install -r requirements.txt
python xsstrike.py --help Comandos principais
# uma única URL parametrizada
python xsstrike.py -u "https://example.com/search?q=test"
# dados POST
python xsstrike.py -u "https://example.com/search" --data "q=test"
# crawl e então testa
python xsstrike.py -u "https://example.com" --crawl
# autenticado
python xsstrike.py -u "https://example.com/search?q=test"
--headers "Cookie: session=abc123"
# throttle
python xsstrike.py -u "https://example.com/search?q=test" --delay 2 --timeout 10 Saída
Legível por humano no console: o parâmetro, o contexto de reflexão, o payload que disparou, e sua confiança. O XSStrike é uma ferramenta de análise interativa, não um produtor de JSON — seus resultados são confirmados à mão.
Onde ele entra no Tandera
O XSStrike roda na fase de analyze do recon_web_full — apenas o fluxo ativo; ele envia payloads reais, então é excluído do recon lite NonIntrusive. Trabalha sobre os parâmetros que o arjun descobriu e os endpoints que o katana crawleou, concentrando esforço em inputs que são de fato refletidos.
Usando em um pentest
Um payload refletido ainda não é um finding. Confirme a execução — um alert real, uma mudança real no DOM — e capture um screenshot como evidência. “Refletido sem encoding” e “executa script” são severidades diferentes.
O contexto é todo o jogo. O mesmo input pode ser seguro num contexto e explorável em outro. A detecção de contexto do XSStrike é por que ele acha casos que uma lista de payloads genérica perde; leia qual contexto ele reporta, porque é isso que determina o impacto no mundo real.
Faça throttle e coordene. O teste de XSS grava payloads na aplicação. Em qualquer coisa com inputs armazenados você pode persistir strings de teste em lugares que usuários reais veem — acorde a janela de teste com o cliente e use --delay.
XSS armazenado precisa de acompanhamento manual. O XSStrike é mais forte em XSS refletido. Para armazenado, use-o para achar o ponto de injeção, depois confirme o sink de execução à mão.