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

15.02.2018 11:50
 
A veces es difícil prescindir de la ejecución de comandos. Si para ejecutarlos se usan entradas del usuario se apela a las funciones escapeshellcmd() (escapa meta-caracteres delintérprete de comandos) y escapeshellarg() (escapa una cadena a ser usada como argumento del intérprete de comandos) para hacerlo de forma segura. Alguna de estas funciones tenía alguna vulnerabilidad para determinado sistema operativo y no es raro encontrar programadores que desarrollan filtros propios. Si alguien decide hacer algo así debe asegurarse de filtrar todos los meta-caracteres del intérprete de comandos.
 
Clarifiquemos con un ejemplo. Llamemos al siguiente archivo test.php:
 
<?php
$usuario = $_GET["usuario"];
 
$eliminar = array("&", "|", "$", ";", "(", ")", "`");
$usuario = str_replace($eliminar, "", $usuario);
 
$esto = 'dir "subdirectorio\"' . $usuario;
system($esto);
?>
 
El filtro impedirá inyectar los meta-caracteres "&"; "|"; "$"; ";"; "("; ")" y "`", lo que no impedirá al pirata informático hacer daño. Nos disgusta un poco dar ejemplos concretos de ataques, pero en el caso de la inyección de comandos haremos una pequeña excepción.  
 
Supongamos que dentro de "directorio" existe el subdirectorio "subdirectorio" y dentro del mismo la carpeta "Juan" y que el pirata informático escribe lo siguiente en la barra de direcciones de su navegador:
 
https://127.0.0.1/directorio/test.php?usuario=Juan>test.php
 
El archivo test.php será sobrescrito con el listado de subdirectorios y archivos del subdirectorio "Juan", quedando inutilizado.
 
La inyección de comandos es una vulnerabilidad muy crítica y convendrá prescindir de la ejecución de comandos, especialmente con inputs del usuario.
 
Artículos relacionados: