XUT_ / COURSES / PENETRATION TESTER

Exploiting Command Injection

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:

  1. Inyección de comandos a ciegas (Blind).
  2. Inyección de comandos con respuesta (Verbose).

Aquí debajo una tabla donde se explica más detalladamente:

MétodoDescripción
BlindEste 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.
VerboseEste 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
PayloadDescripción
whoamiTe muestra qué usuario está corriendo la aplicación.
lsLista el contenido del directorio actual o del que se indique.
pingHace que la aplicación se pare mientras realiza el test de conectividad a la IP dada.
sleepHace que la aplicación se pare durante los segundos indicados.
ncPuede usarse para abrir una reverse shell de la aplicación vulnerable en un servidor de control propio.
Windows
PayloadDescripción
whoamiVe bajo qué usuario está corriendo la aplicación.
dirLista los contenidos del directorio actual.
pingHace que la aplicación se pare mientras realiza el test de conectividad a la IP dada.
timeoutHace que la aplicación se pare durante los segundos indicados.