🕹️Laboratorio: Inyección de comandos del sistema operativo, caso simple

Inyección de comandos del sistema operativoLas vulnerabilidades de inyección de comandos permiten a un atacante ejecutar comandos arbitrarios del sistema operativo (SO) en el servidor. Esto les da control total sobre el servidor, comprometiendo la aplicación y todos sus datos.

¿Qué es la inyección de comandos del sistema operativo?

La inyección de comandos del sistema operativo 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, compromete completamente la aplicación y sus datos. A menudo, un atacante puede aprovechar una vulnerabilidad de inyección de comandos del sistema operativo para comprometer otras partes de la infraestructura de alojamiento y explotar las relaciones de confianza para dirigir el ataque a otros sistemas dentro de la organización.

Comandos útiles

Después de identificar una vulnerabilidad de inyección de comandos del sistema operativo, es útil ejecutar algunos comandos iniciales para obtener información sobre el sistema. A continuación se muestra un resumen de algunos comandos que son útiles en las plataformas Linux y Windows:

Propósito del mando

linux

ventanas

Nombre del usuario actual

whoami

whoami

Sistema operativo

uname -a

ver

Configuración de la red

ifconfig

ipconfig /all

Conexiones de red

netstat -an

netstat -an

Procesos corriendo

ps -ef

tasklist

Inyectar 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 en particular. Se accede a esta información a través de una URL:

https://insecure-website.com/stockStatus?productID=381&storeID=29

Para proporcionar información bursátil, la aplicación debe consultar varios sistemas heredados. Por razones históricas, la funcionalidad se implementa llamando a un comando de shell con los ID del producto y de la tienda como argumentos:

stockreport.pl 381 29

Este comando genera el estado del stock del artículo especificado, que se devuelve al usuario.

Inyectar comandos del sistema operativo - Continuación

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 productIDparámetro, el comando ejecutado por la aplicación es:

stockreport.pl & echo aiwefwlguh & 29

El echocomando hace que la cadena proporcionada se repita en la salida. Esta es una forma útil de probar algunos tipos de inyección de comandos del sistema operativo. El &carácter es un separador de comandos de shell. En este ejemplo, hace que se ejecuten tres comandos separados, uno tras otro. La salida devuelta al usuario es:

Error - productID was not provided aiwefwlguh 29: command not found

Las tres líneas de resultados demuestran que:

  • El comando original stockreport.plse ejecutó sin los argumentos esperados y, por lo tanto, devolvió un mensaje de error.

  • El comando inyectado echose ejecutó y la cadena proporcionada se repitió en la salida.

  • El argumento original 29se ejecutó como un comando, lo que provocó un error.

Colocar el separador de comando 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 siguiente impida que se ejecute el comando inyectado.

Laboratorio: inyección de comandos del sistema operativo, caso simple

APRENDIZ

LABORATORIONo resuelto

Esta práctica de laboratorio contiene una vulnerabilidad de inyección de comandos del sistema operativo en el verificador de existencias de productos.

La aplicación ejecuta un comando de shell que contiene los ID de tienda y producto proporcionados por el usuario, y devuelve el resultado sin procesar del comando en su respuesta.

Para resolver la práctica de laboratorio, ejecute el whoamicomando para determinar el nombre del usuario actual.

Last updated