# 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. <mark style="color:red;">**Secuencia**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Condicionales**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Agrupación y Orden de Ejecución**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Eficiencia**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Comprensión**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Riesgos de Seguridad**</mark><mark style="color:red;">:</mark> 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.

## <mark style="color:red;">Ejecuccion de whoami</mark>

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

<figure><img src="https://1580805812-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzDuZE3U19tNNqSAmcpyE%2Fuploads%2FnYQxLclCzmkbsSuB5otI%2Fimage.png?alt=media&#x26;token=5182d373-44dc-424c-b712-bbfdb254104f" alt=""><figcaption></figcaption></figure>

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.

### <mark style="color:red;">Veamos más en detalle qué es y cómo funciona:</mark>

1. <mark style="color:red;">**Identidades de Aplicación**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**DefaultAppPool**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Seguridad y Aislamiento**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Permisos**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Configuración**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Uso común en Troubleshooting**</mark><mark style="color:red;">:</mark> 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.

## <mark style="color:red;">¿Porque obtuvimos una shell con este usuario?</mark>

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. <mark style="color:red;">**Contexto de Ejecución**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Aislamiento y Seguridad**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Escalamiento de Privilegios**</mark><mark style="color:red;">:</mark> 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. <mark style="color:red;">**Importancia de la Seguridad de Aplicaciones**</mark><mark style="color:red;">:</mark> 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.
