¿Qué son las Vulnerabilidades de Inyección de Comandos?

Introducción

Las vulnerabilidades de inyección de comandos son una de las vulnerabilidades web más peligrosas. Muchos probadores de seguridad y cazarrecompensas buscan encontrar vulnerabilidades de inyección de comandos debido al impacto que pueden crear en la aplicación objetivo.

Este artículo proporcionará una descripción general de las vulnerabilidades de inyección de comandos, junto con una introducción a varias vulnerabilidades que eventualmente pueden conducir a la inyección de comandos.

¿Qué es la inyección de comandos?

La inyección de comandos es un tipo de vulnerabilidad web que permite a los atacantes ejecutar comandos arbitrarios del sistema operativo en el servidor, donde se ejecuta la aplicación. Las vulnerabilidades de inyección de comandos ocurren cuando las aplicaciones hacen uso de comandos de shell o scripts que ejecutan comandos de shell en segundo plano.

Consideremos la siguiente URL de una aplicación, que realiza la codificación base64 de la entrada del usuario.

http://target-site.com/encode.php?text=helloworld

Esta entrada de usuario se pasa como un parámetro para la codificación.archivo php.

El siguiente es el código fuente de encode.php:

<?php

input input= _ _GET;

system («echo-n». $entrada.»/base64″);

?>

Como podemos observar en el fragmento de código anterior, la entrada del usuario se pasa a la función system() de php, que se utiliza para ejecutar comandos del sistema operativo en PHP.

Si un usuario añade un comando del sistema a la entrada, se ejecutará como un comando del sistema operativo, que se parece a este:

http://target-site.com/encode.php?text=test;id

La siguiente es la respuesta devuelta al usuario:

testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK

As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:

$ echo -n «dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK» | base64 -d

uid=33(www-data) gid=33(www-data) groups=33(www-data)

As you can see, the encoded text is the output of the id command passed to the application.

Why are command injection vulnerabilities dangerous?

La clase de vulnerabilidades de inyección de comandos se considera una de las vulnerabilidades web más peligrosas porque le dan el control del sistema operativo subyacente a un atacante. Este control se puede usar de varias maneras diferentes, incluido el movimiento lateral a través de la red interna utilizando la confianza que el servidor de destino tiene con otros sistemas en la red.

Vulnerabilidades que pueden llevar a la ejecución de comandos

Mientras que las vulnerabilidades de ejecución de comandos ocurren cuando la aplicación vulnerable permite al usuario final ampliar la funcionalidad predeterminada de la aplicación y ejecutar comandos del sistema, también es posible ejecutar comandos a través del código de la aplicación. Esto se conoce comúnmente como ejecución de código. Incluso cuando hay una vulnerabilidad de ejecución de código, el objetivo final es ejecutar comandos arbitrarios del sistema a través de ella. Teniendo en cuenta esto, vamos a discutir algunas de las vulnerabilidades que pueden conducir a la ejecución de comandos a través de la inyección de comandos o la ejecución de código.

Las siguientes son algunas de las vulnerabilidades que eventualmente pueden llevar a ataques de inyección de comandos.

Inyección arbitraria de comandos

Como explicamos en nuestro ejemplo anterior, es posible que las aplicaciones tengan aplicaciones que reciban comandos arbitrarios del sistema directamente del usuario y los ejecuten en el host subyacente. Este es un ejemplo de clase de vulnerabilidad de inyección de comandos.

Cargas arbitrarias de archivos

Cuando las aplicaciones permiten a los usuarios cargar archivos con extensiones de archivo arbitrarias, puede dar lugar a la inyección de comandos cuando estos archivos cargados se colocan dentro de la raíz web. Esta es otra forma común en que las aplicaciones web pueden volverse vulnerables a la inyección de comandos.

Serialización insegura

Aparte de las vulnerabilidades de inyección de comandos estándar, la ejecución arbitraria de comandos también puede ser posible utilizando otras vulnerabilidades, como la deserialización insegura. Esto aprovecha el hecho de que el código del lado del servidor deserializa el contenido serializado pasado por el usuario, sin validarlo adecuadamente. A pesar de que esto se conoce comúnmente como clase de vulnerabilidades de serialización insegura, eventualmente conduce a la inyección de comandos si la aplicación de destino cumple con ciertos requisitos, como que los dispositivos apropiados estén disponibles en la ruta de clase.

Inyección de plantillas del lado del servidor

Cuando las aplicaciones web utilizan tecnologías de plantillas del lado del servidor como Jinja2 o Twig para generar respuestas HTML dinámicas, es posible tener inyección de plantillas del lado del servidor. Las vulnerabilidades SSTI se producen cuando la entrada del usuario se incrusta en una plantilla de manera insegura y da lugar a la ejecución remota de código en el servidor.

Inyección de entidades externas XML

La vulnerabilidad de entidades externas XML es otro tipo de vulnerabilidad, que se produce contra aplicaciones que analizan la entrada XML controlada por el usuario utilizando un analizador XML de configuración débil. Las vulnerabilidades XXE generalmente conducen a la lectura de archivos arbitrarios del servidor y causan ataques de denegación de servicio.

Sin embargo, también pueden llevar a la ejecución de comandos en el servidor cuando se cumplen ciertas condiciones. Por ejemplo, si PHP expect: / / wrapper está habilitado en el servidor vulnerable de destino, es posible ejecutar comandos arbitrarios en el servidor.

por Favor, tenga en cuenta que esta no es una lista exhaustiva de las vulnerabilidades que puede conducir a la inyección de comandos, y hay muchas otras vulnerabilidades que pueden conducir a la inyección de comandos cuando se cumplen ciertas condiciones.

Conclusión

Es evidente que hay varias vulnerabilidades diferentes que pueden llevar a la ejecución de comandos en el servidor. Los desarrolladores deben ser conscientes de estas vulnerabilidades de inyección de comandos debido al hecho de que estas vulnerabilidades son de alto impacto, ya que pueden dar control total sobre la infraestructura subyacente.

En los próximos artículos de esta serie, cubriremos algunos conceptos relacionados con la inyección de comandos, como identificar y explotar la inyección de comandos ciegos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

More: