Relación entre la inyección de comandos y la concatenación de comandos
La relación entre la inyección de comandos y la concatenación de comandos se encuentra en cómo los datos no validados o mal gestionados pueden permitir que un atacante añada comandos adicionales a una secuencia legítima, aprovechándose de la falta de sanitización o de la forma en que los comandos se ensamblan antes de ser ejecutados en el sistema operativo.
Concatenación de Comandos
La concatenación de comandos se refiere a la capacidad de ejecutar varios comandos de forma secuencial o simultánea dentro de un solo contexto. En sistemas Unix/Linux, por ejemplo, se pueden concatenar comandos utilizando operadores como ;
, &&
, o ||
. Estos operadores permiten encadenar múltiples comandos para que se ejecuten uno tras otro, dependiendo del éxito o fracaso de los anteriores.
;: Ejecuta varios comandos uno tras otro, sin importar si el primero falla o tiene éxito.
comando1; comando2; comando3
&&: Ejecuta el siguiente comando solo si el anterior tuvo éxito (es decir, si regresó un código de salida
0
).
comando1 && comando2
||: Ejecuta el siguiente comando solo si el anterior falló (es decir, si regresó un código de salida distinto a
0
).
comando1 || comando2
En los sistemas Windows, se pueden utilizar de manera similar los operadores &
, &&
, ||
para concatenar comandos en un contexto de shell.
Relación con la Inyección de Comandos
La inyección de comandos ocurre cuando un atacante logra aprovechar la falta de validación adecuada de los inputs de una aplicación web y consigue ejecutar comandos arbitrarios en el sistema operativo del servidor. La concatenación de comandos es una técnica clave que los atacantes suelen utilizar en estos escenarios para ejecutar múltiples comandos maliciosos además del comando original esperado por la aplicación.
Ejemplo de un Ataque con Concatenación de Comandos
Consideremos el siguiente ejemplo en una aplicación web que ejecuta un comando ping
en el sistema a partir de un input proporcionado por el usuario:
text:$host = $_GET['host']; system("ping -c 4 " . $host);
En este caso, si el input host
no se valida adecuadamente, un atacante podría inyectar un comando adicional concatenándolo con ;
. Por ejemplo, si el atacante ingresa el siguiente valor como host
:
html:8.8.8.8; ls /etc/
El comando completo que se ejecutaría en el servidor sería:
text:ping -c 4 8.8.8.8; ls /etc/
Last updated