Normalmente puedes determinar si ocurrirá o no la inyección de comandos por el comportamiento de la aplicación.
Las aplicaciones que usan el input del usuario para poblar comandos de sistema con información, puede, por lo general, ser combinada con comportamientos no deseados. Por ejemplo, los operadores de consola ;, & y &&, combinarán dos (o más) comandos de sistema y los ejecutará los dos.
La inyección de comandos puede ser detectada de dos maneras, principalmente:
- Inyección de comandos a ciegas (Blind).
- Inyección de comandos con respuesta (Verbose).
Aquí debajo una tabla donde se explica más detalladamente:
| Método | Descripción |
|---|---|
| Blind | Este tipo de inyección ocurre cuando no hay un output directo de la aplicación al comprobar payloads. Deberás investigar los comportamientos de la aplicación para saber si fue o no exitoso. |
| Verbose | Este tipo de inyección ocurre cuando hay un feedback directo de la aplicación una vez mandado el payload. |
Detectar Blind Command Injection
Para este tipo de inyección de comandos, necesitaremos usar payloads que causen algún tipo de retardo. Por ejemplo ping o sleep. Al usar ping, la aplicación esperará unos segundos, en relación a la cantidad de pings especificados.
Otro método es forzar algún output. Esto se puede hacer usando redirectores como >. Por ejemplo, podemos decirle a la aplicación web que ejecute comandos como whoami y los redirija a un archivo. Luego podemos usar un comando como cat para leer el nuevo archivo.
Es difícil y requiere experimentación comprobar este tipo de inyección de comandos. El comando curl nos puede ayudar bastante ya que podemos enviar y recibir información de la web con él. Por ejemplo: curl http://vulnerable.app/process.php%3Fsearch%3Fsearch%3DThe%20Beatles%3B%20whoami
Detectar Verbose Command Injection
Es el método más fácil de los dos ya que la aplicación muestra la respuesta del servidor en alguna parte, por lo que enseguida sabremos si es vulnerable.
Por ejemplo, el output de ping o whoami se mostrará directamente en la web.
Payloads Útiles
Aquí se muestran algunos comandos útiles para Linux y para Windows.
Linux
| Payload | Descripción |
|---|---|
| whoami | Te muestra qué usuario está corriendo la aplicación. |
| ls | Lista el contenido del directorio actual o del que se indique. |
| ping | Hace que la aplicación se pare mientras realiza el test de conectividad a la IP dada. |
| sleep | Hace que la aplicación se pare durante los segundos indicados. |
| nc | Puede usarse para abrir una reverse shell de la aplicación vulnerable en un servidor de control propio. |
Windows
| Payload | Descripción |
|---|---|
| whoami | Ve bajo qué usuario está corriendo la aplicación. |
| dir | Lista los contenidos del directorio actual. |
| ping | Hace que la aplicación se pare mientras realiza el test de conectividad a la IP dada. |
| timeout | Hace que la aplicación se pare durante los segundos indicados. |
