VULNERABILIDADES DE APLICACIONES WEB: ¿CUÁL ES EL ERROR EN ESTA APLICACIÓN? (III)

02.01.2018 07:41
Presentamos el código de esta "aplicación". Para su más fácil comprensión lo hemos simplificado. Eso resultó en dos vulnerabilidades que no son las que pretendemos que el lector encuentre: el nombre de ususario y su contraseña están incrustados (hardcoded) en texto plano en un archivo .php. Hay otra vulnerabilidad, mucho más fácil de explotar y de consecuencias potencialmente muy graves. ¿Cuál es?
 
Éste es el archivo frente.php (también podría ser frente.html):
 
<html>
<h1>Ingrese para cambiar su clave de acceso</h1>
<form action="atras.php" method="post">
    Usuario: <input type="text" name="usuario" value="">
    Contrasena: <input type="password" name="clave" value="">
    <input type="submit">
</form>
</html>
 
siendo atras.php:
 
<?php
$usuario = $_POST['usuario'];
$clave = $_POST['clave'];
if (($usuario == 'Juan') && ($clave == 'CaTW7ro%53AX&117uS?tmPv')){
header('Location: cambio.php');
} else {
header('Location: frente.php');
}
?>
 
y cambio.php (podría ser cambio.html) es:
 
<html>
<h1>Ingrese la nueva clave</h1>
<form action="guardar.php" method="post">
    Usuario: <input type="text" name="nombre" value="">
    Contrasena: <input type="password" name="nueva" value="">
    Confirmar ctsna.: <input type="password" name="reiterar" value=""> 
<input type="submit">
</form>
</html>
 
y guardar.php es:
 
<?php
$nombre = $_POST['nombre'];
$nueva = $_POST['nueva'];
$reiterar = $_POST['reiterar'];
if ($nueva == $reiterar) {
echo "La contrasena de $nombre ha sido cambiada a $nueva exitosamente";
}
?>
 
La clave debería ser guardada en una base de datos y no ser mostrada en patalla pero quisimos que el lector pueda hace su propia prueba y ver el resultado. ¿Cuál es la vulnerabilidad de la "aplicación"? Publicaremos la respuesta a la brevedad.