Inyeccion de comandos desde un formulario web

En Windows, la concatenación de comandos permite ejecutar múltiples comandos en una sola línea dentro de la línea de comandos o en un script de batch. Esto puede ser útil para realizar una serie de tareas en un orden específico sin tener que ejecutar comandos individualmente. Existen varios operadores que puedes usar para concatenar comandos en Windows:

  1. &: Ejecuta el segundo comando independientemente del resultado del primero.

    • Ejemplo: dir & echo Hola

  2. &&: Ejecuta el segundo comando solo si el primero se completó con éxito (sin errores).

    • Ejemplo: cd C:\Windows && dir

  3. ||: Ejecuta el segundo comando solo si el primero falló.

    • Ejemplo: cd C:\NoExiste || echo "La ruta no existe"

  4. ;: En algunos shells, como en PowerShell, el punto y coma se utiliza para separar comandos, similar al operador & en el CMD.

    • Ejemplo (en PowerShell): Get-ChildItem; Write-Host "Listado completado"

  5. (): Los paréntesis se pueden usar para agrupar comandos y controlar el orden de ejecución, especialmente en combinación con los operadores anteriores.

    • Ejemplo: (cd C:\Windows && dir) & echo "Listado completado"

La concatenación de comandos en sistemas operativos, como Windows, está estrechamente relacionada con la ejecución de comandos. En términos simples, mientras que la "ejecución" se refiere al proceso de llevar a cabo un comando o instrucción, la "concatenación" es una técnica que permite enlazar y ejecutar múltiples comandos de manera secuencial o condicional. Veamos cómo se relacionan:

  1. Secuencia: La concatenación permite la ejecución secuencial de múltiples comandos en un orden específico. Por ejemplo, usando el operador & en Windows, puedes ejecutar un comando inmediatamente después de otro, independientemente del resultado del primero.

  2. Condicionales: Algunos operadores de concatenación permiten la ejecución condicional basada en el éxito o el fracaso de un comando anterior. El operador && ejecutará el segundo comando solo si el primero tuvo éxito, mientras que || ejecutará el segundo comando solo si el primero falló. Esto es útil cuando quieres ejecutar comandos en función de si una operación anterior fue exitosa o no.

  3. Agrupación y Orden de Ejecución: Con la concatenación, puedes agrupar comandos usando paréntesis para asegurarte de que se ejecuten en un orden específico. Esto puede ser vital en scripts o situaciones donde el orden de las operaciones importa.

  4. Eficiencia: En lugar de ejecutar comandos individualmente, esperando que uno termine para iniciar el siguiente, puedes concatenarlos para que se ejecuten uno tras otro automáticamente. Esto es especialmente útil en scripts o tareas automatizadas.

  5. Comprensión: Al concatenar y ejecutar comandos en una sola línea, puedes obtener una vista rápida de una serie de operaciones que se llevarán a cabo, lo cual puede ser más comprensible en algunos casos que tener múltiples líneas de comandos individuales.

  6. Riesgos de Seguridad: Desde una perspectiva de seguridad, especialmente en la ciberseguridad, la concatenación de comandos puede ser utilizada por actores maliciosos para ejecutar series de acciones rápidamente. Un atacante podría, por ejemplo, usar la concatenación para obtener información y luego exfiltrarla, todo en una rápida secuencia.

Ejecuccion de whoami

En la siguiente evidencia, vamos a intentar inyectar el comando whomi:

El usuario IIS AppPool\DefaultAppPool se refiere a una identidad de aplicación utilizada por el Internet Information Services (IIS), que es el servidor web incorporado en Windows. IIS utiliza las identidades de la aplicación para ejecutar aplicaciones web en su propio entorno aislado, asegurando que no interfieran entre sí y proporcionando una capa adicional de seguridad.

Veamos más en detalle qué es y cómo funciona:

  1. Identidades de Aplicación: En IIS, cada aplicación web (o "App Pool") puede ejecutarse bajo su propia identidad de usuario. Esta identidad de usuario es virtual, lo que significa que no verás esta cuenta si buscas en el directorio de usuarios en tu sistema. Estas identidades son específicas de IIS.

  2. DefaultAppPool: Cuando instalas IIS y creas una aplicación web sin especificar una identidad personalizada, se utiliza el "DefaultAppPool". Es, como su nombre indica, la piscina de aplicaciones predeterminada para las aplicaciones web.

  3. Seguridad y Aislamiento: Una de las principales ventajas de usar identidades de aplicación es el aislamiento. Si tienes varias aplicaciones web ejecutándose en el mismo servidor, y una de ellas tiene un problema o es comprometida, el problema se limita a esa aplicación específica y no afecta a las demás.

  4. Permisos: Las identidades de aplicación, como IIS AppPool\DefaultAppPool, tienen permisos asociados. Por ejemplo, si una aplicación web necesita acceder a un archivo o base de datos, deberás asegurarte de que la identidad de la aplicación tenga los permisos necesarios.

  5. Configuración: A través del administrador de IIS, puedes cambiar la identidad bajo la cual se ejecuta una aplicación web. Esto es útil si, por ejemplo, una aplicación específica necesita más privilegios o necesita ejecutarse bajo una cuenta de dominio para acceder a recursos en una red.

  6. Uso común en Troubleshooting: Es común ver la referencia a estas identidades cuando estás solucionando problemas relacionados con permisos. Por ejemplo, si tu aplicación web no puede leer un archivo en el sistema de archivos, es posible que necesites otorgar permisos a la identidad de la aplicación (como IIS AppPool\DefaultAppPool) para acceder a ese archivo.

¿Porque obtuvimos una shell con este usuario?

Cuando se compromete una aplicación web en un servidor que utiliza IIS, y se logra obtener una shell o una ejecución remota de comandos, a menudo se hace bajo el contexto del usuario que ejecuta la aplicación. En el caso de IIS, es típico que la aplicación web se ejecute bajo la identidad de una piscina de aplicaciones, como IIS AppPool\DefaultAppPool.

A continuación, te explico por qué ocurre esto:

  1. Contexto de Ejecución: La mayoría de las vulnerabilidades de ejecución de comandos o inyección de código en aplicaciones web permiten al atacante ejecutar comandos con los mismos privilegios que el proceso de la aplicación web. Dado que IIS ejecuta aplicaciones web bajo identidades específicas de la piscina de aplicaciones, cualquier comando o shell que se obtenga como resultado de una vulnerabilidad se ejecutará con esos privilegios.

  2. Aislamiento y Seguridad: Una de las razones por las que IIS utiliza identidades de piscinas de aplicaciones es para proporcionar aislamiento y seguridad. Si una aplicación web se ve comprometida, la cantidad de daño que un atacante puede hacer se limita a lo que esa identidad de piscina de aplicaciones puede hacer. Aunque obtener una shell bajo la identidad de IIS AppPool\DefaultAppPool todavía puede ser perjudicial, es menos arriesgado que si la aplicación se ejecutara con privilegios de administrador o de sistema.

  3. Escalamiento de Privilegios: Aunque inicialmente un atacante podría obtener acceso con la identidad limitada de una piscina de aplicaciones, uno de los siguientes pasos que podría intentar es escalar sus privilegios. Si hay vulnerabilidades en el servidor o si la configuración es insegura, el atacante podría aprovecharse de esto para obtener privilegios más altos.

  4. Importancia de la Seguridad de Aplicaciones: Este escenario subraya la importancia de asegurar aplicaciones web. Aunque las identidades de piscinas de aplicaciones proporcionan una capa de seguridad, es esencial mitigar las vulnerabilidades en las aplicaciones web para prevenir compromisos iniciales.

Última actualización