Command injection
Last updated
Last updated
La inyección de comandos (command injection) es una técnica empleada a través de interfaces web que permite la ejecución de comandos del sistema operativo en un servidor web. Esto puede brindar a un atacante la capacidad de ejecutar comandos arbitrarios en el servidor, pudiendo comprometer su seguridad.
Veamos cómo evoluciona esta técnica de inyección en diferentes niveles de seguridad:
En este nivel, no hay ninguna validación o filtrado de entrada del usuario. Si entramos en la sección de command injection, nos encontramos con un input para realizar pings, al que le introducimos una IP y realiza dicho ping.
Pero si el programador no tuvo en cuenta que el usuario puede introducir lo que quiera en este caso, se pueden concatenar comandos como en cualquier terminal.
Gracias a esto, podemos empezar a jugar con nuestro input y, si probamos cualquiera de las anteriores combinaciones, funcionará el ataque, debido a que el código ejecuta directamente lo que introduce el usuario.
Como resultado, se listan los ficheros, dejando a nuestra imaginación qué hacer en la máquina objetivo.
Cambiamos de nivel y probamos el mismo comando con el que hemos tenido éxito en el nivel anterior, pero en este caso no nos funciona.
En este nivel, se filtran las opciones &&
y ;
en el código de la aplicación:
Dado que estas opciones están bloqueadas, debemos explorar otras alternativas en las tablas de comandos disponibles. Al probar la ejecución de comandos en paralelo, logramos nuevamente la inyección.
Terminamos con el nivel alto y probamos todos los casos de la tabla de arriba sin resultado valido.
Si nos fijamos en el código, todas las opciones de los niveles anteriores están en la lista negra (blacklist):
Sin embargo, al observar más de cerca, notamos que el operador |
tiene un espacio después de él. Esto significa que podemos intentar ejecutar el comando sin espacio después del operador, lo que permite evadir la lista negra y lograr la inyección.
En resumen, la inyección de comandos del sistema operativo es una técnica peligrosa que permite a los atacantes ejecutar comandos arbitrarios en un servidor web. Para prevenir este tipo de ataques, es importante seguir las prácticas de programación segura, como la validación adecuada de las entradas del usuario y el uso de listas blancas en lugar de listas negras para filtrar comandos y caracteres no deseados.
Comandos
Acción
ejemplo
|
La salida del primero, es la entrada del segundo
cat xxx | grep yyy
||
El segundo comando se ejecutará si el primera termina sin éxito
ping 18.2.2 || cat xxxx
&
Ejecutar dos o mas comandos de manera simultanea
ls xxx & cat yyyy
&&
El segundo comando se ejecutará solo si el primero acaba con éxito
ping 8.8.8.8 && cat ggggg
;
El segundo comando se ejecutara sin importar el resultado del primero
ls tttt; cat yyyy