IDOR (Insecure Direct Object Reference)
Practica de explotación IDOR
IDOR<?php
$usersFile = 'users.txt';
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$username = $_POST['username'];
$newPassword = $_POST['password'];
if (file_exists($usersFile)) {
$users = file($usersFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$updated = false;
foreach ($users as $index => $line) {
list($user, $pass) = explode(":", trim($line));
if ($user === $username) {
$users[$index] = "$user:$newPassword";
$updated = true;
}
}
// Si se actualizó la contraseña en el archivo, se guarda y, si el usuario es 'carlos', se cambia la contraseña a nivel de sistema
if ($updated) {
file_put_contents($usersFile, implode("\n", $users));
// Si el usuario es 'carlos', cambiar la contraseña a nivel de sistema
if ($username === 'carlos') {
// Ejecutamos el comando 'passwd' en el sistema para cambiar la contraseña del usuario 'carlos'
$command = "echo 'carlos:$newPassword' | sudo chpasswd";
exec($command, $output, $return_var);
if ($return_var === 0) {
echo "<p class='success'>La contraseña para el usuario <strong>$username</strong> se ha cambiado correctamente.</p>";
} else {
echo "<p class='error'>Hubo un error al intentar cambiar la contraseña a nivel del sistema.</p>";
}
} else {
echo "<p class='success'>La contraseña para el usuario <strong>$username</strong> se ha cambiado correctamente.</p>";
}
} else {
echo "<p class='error'>El usuario <strong>$username</strong> no existe.</p>";
}
} else {
echo "<p class='error'>No se encontró la base de datos de usuarios.</p>";
}
} else {
$token = isset($_GET["temp-forgot-password-token"]) ? $_GET["temp-forgot-password-token"] : "";
$username = isset($_GET["username"]) ? $_GET["username"] : "";
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Restablecer Contraseña</title>
<style>
// <!-- STYLE_PAGE -->
</style>
</head>
<body>
<div class="container">
<h2>Restablecer tu contraseña</h2>
<form action="reset_password.php?temp-forgot-password-token=<?php echo htmlspecialchars($token); ?>" method="post">
<input type="hidden" name="username" value="<?php echo htmlspecialchars($username); ?>">
<label for="password">Nueva Contraseña:</label>
<input type="password" name="password" id="password" required>
<input type="submit" value="Restablecer">
</form>
</div>
</body>
</html>
<?php
}
?>Explicación detallada IDOR
IDORVulnerabilidad IDOR (Insecure Direct Object Reference)
¿Qué es IDOR?
Ejemplo de IDOR
Escenario Vulnerable
Impactos de la vulnerabilidad IDOR
Payloads y Bypasses para IDOR
Cómo prevenir la vulnerabilidad IDOR
1. Validación de permisos en el servidor
2. Uso de identificadores aleatorios y UUIDs
3. Autenticación y autorización adecuadas
4. Registros y monitoreo
5. Protección en API REST y GraphQL
Conclusión
PreviousPrototype Pollution (Contaminación de prototipos) JavaScriptNextCORS (Cross-Origin Resource Sharing)
Last updated