Time-based Token Vulnerability Exploitation
Introducción
CTF para practicar
Código Vulnerable
1. Generación de Tokens Basada en Tiempo (config.php)
// VULNERABILIDAD: Token generado basándose en segmentos de tiempo
function generateResetToken($username) {
global $pdo;
// Limpiar tokens expirados (más de 10 minutos)
$pdo->prepare("DELETE FROM reset_tokens WHERE created_at < datetime('now', '-10 minutes')")->execute();
// VULNERABILIDAD CRÍTICA: Usar segmentos de tiempo predecibles
// El token cambia solo cada 10 segundos, permitiendo ventana de ataque
$time_segment = floor(time() / 10); // ¡VULNERABLE! Cambia cada 10 segundos
// VULNERABILIDAD: Token no incluye información única del usuario
// Mismo token generado para todos los usuarios en el mismo time_segment
$token = hash('sha256', $time_segment . 'weak_secret_salt');
// Debug: registrar el timestamp para verificar
error_log("Token generado para $username - Time segment: $time_segment - Token: " . substr($token, 0, 16) . "...");
// Guardar token en la base de datos
$stmt = $pdo->prepare("INSERT INTO reset_tokens (username, token) VALUES (?, ?)");
$stmt->execute([$username, $token]);
return $token;
}2. Verificación de Tokens (config.php)
3. Endpoint de Recuperación (forgot-password.php)
Mecanismo de Explotación
Flujo del Ataque
Obtener CSRF y PHPSESSIONID de Victim
Peticiones de Explotación
Resultado Esperado
Proof of Concept
URL de Reset Compartida
Verificación de la Vulnerabilidad
Mitigaciones
Solución 1: Tokens Únicos por Usuario
Solución 2: Vinculación Usuario-Token
Solución 3: Rate Limiting
Conclusión
Last updated