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