VULNERABILIDADES DE APLICACIONES WEB: INYECCIÓN DE COMANDOS (II)

14.02.2018 13:56
 
Haremos un pequeño alto en la línea taxonómica de vulnerabilidades que estábamos enumerando para profundizar en una que ya hemos descripto.
 
A veces evitamos dar ciertos ejemplos porque serían de más utilidad para el pirata informático que para el programador, el administrador de un servidor o el experto en seguridad informática. Como las inyecciones de comandos son más fáciles de descubrir leyendo el código que automatizando los ataques, en este caso en particular decidimos publicar otro caso de código vulnerable a la Inyección de comandos ya que el más beneficiado será quien esté defendiéndose de una eventual intusión.
 
Veamos el siguiente archivo .php:
 
<?php
$filename = $_GET['filename'];
 
if ((strpos($filename, '&') !== false) || (strpos($filename, ';') !== false) || (strpos($filename, '|') !== false)) {
print "<script>RubicusFrontendIns.location.replace('https://geoestrategia.webnode.es');</script>\n\n";
}
 
echo shell_exec('TYPE '. $filename);
?>
 
Para facilitar la comprensión del código hemos utilizado un filtro extremedamente precario. Si el comando que ingresamos es válido se ejecutará sin ningún problema. Si intentamos inyectar otro comando con ";"; "&" ó "|" (en parte dependerá del sistema operativo que estemos usando), seremos redirigidos a otra página PERO EL COMANDO SE EJECUTARÁ DE TODOS MODOS. En este caso particular lo podemos comprobar desactivando la ejecución de JavaScript en nuestro navegador.
 
Para prevenir este ataque hay que asegurarse de que el código no continuará ejecutándose después de un redireccionamiento. En PHP en muchos casos esto se puede lograr con la función die(). Más que con una Inyección de comandos estamos lidiando con una Ejecución después de una redirección.
 
Artículos relacionados: