Este laboratorio llamado «OS command injection, simple case» se encuentra dentro del listado de laboratorios de la plataforma de Portswigger Web Security Academy dentro de la vulnerabilidad OS command injection.
Se encuentra dentro de la categoría «Apprentice» (fácil) de los 3 niveles que ofrece la plataforma.
Este laboratorio contiene una vulnerabilidad de inyección de comandos del sistema operativo en el comprobador de existencias de productos. La aplicación ejecuta un comando shell que contiene IDs de producto y tienda proporcionados por el usuario, y devuelve la salida sin procesar del comando en su respuesta. Para resolver el laboratorio, ejecute el comando whoami para determinar el nombre del usuario actual. |
Cuando encuentras el laboratorio en el listado de «All Labs», simplemente tendrás que acceder al laboratorio y directamente te abre y ejecuta una nueva ventana en el navegador, por lo que no tienes que conectarte mediante VPN a sus máquinas.
Una vez dentro, vemos que estamos ante una página web tipo comercio electrónico, donde hay un listado de productos, y dentro de cada uno se habilita un selector de ciudades que devuelve un dato, supuestamente la cantidad de unidades por cada ciudad.
En este punto podríamos pensar que esta funcionalidad en la web puede ser un punto de vulnerabilidad, por lo que vamos a ejecutar la herramienta Burp Suite (creada por Portswigger).
En mi caso, tengo mi entorno de trabajo en Kali, por tanto, vamos a lanzarlo desde la suite de herramientas que vienen integradas por defecto en Kali, y una vez dentro de Burp Suite, activamos la opción de interceptar peticiones desde la pestaña Proxy:
NOTA: para que Burp recoja peticiones, tienes que hacerlo desde el navgeador Chromium ya que cuando abres en navegador, este crea una nueva ventana en Chromium, lo digo por si estás usando Firefox para ello… Igualmente, con Burp desactivado, pegas la url de la página de producto en una pestaña de Chromium y reproduces la petición.
En nuestro caso queremos ejecutar la petición que se realiza cuando seleccionas una ciudad y le das al botón “Check stock”, entonces, desde la pestaña de Chromium y con la página de producto ya elegida, activamos la opción de «Intercept is on» y reproducirlo:
En este caso Burp recoge esa petición http por el método POST porque se lo estamos solicitando al navegador.
En la información que recoge Burp vemos que se está haciendo una búsqueda de esa página a la información alojada en su servidor para la información recogida en la última línea (Producto y Tienda):
productId=1&storeId=2
Es decir, en concreto en nuestro caso, lo que hace es, buscar la cantidad de stock que hay en Paris para el producto 1.
Esto lo que nos permite es poder inyectar comandos a través de esa línea y con esto tener la posibilidad de poder acceder al servidor sobre el que se está haciendo esa petición para servir esa información…
Para hacer esto, lo que haremos será ir a la opción “Repeater” de Burp Suite.
También podemos hacerlo directamente con Ctrl+R y así enviará esa petición al Repeater directamente.
Con el Repeater lo que se nos va a permitir es Enviar “Send” esa petición y en tiempo real (sin tener que reproducirlo en el navegador) ver la respuesta que daría…
Por ejemplo, si ahora le doy a “Send” sobre la petición interceptada inicialmente, esta sería la respuesta que me daría el navegador:
Entonces, sabiendo esto, podemos probar a colocar un comando a esa consulta interna para ver si realmente el servidor me da información vulnerable o no.
Por tanto, si a esa cadena de consulta del stock del producto, le concatenamos mediante (“;”) un comando de Linux como “whoami”, le estaríamos diciendo al servidor que, además de esa cantidad de stock disponible, ejecute el comando whoami siendo por tanto vulnerable a ejecución de comandos para saber el usuario.
productId=1&storeId=2; whoami
Como vemos, la información que se envía cuando se ejecuta este comando, es que, además del stock (22) nos está dando el nombre del usuario en la máquina (peter) y una posible contraseña (ddvdAO).
Entonces ahora para resolver esta máquina, lo que hacemos es volver a la opción de Proxy de Burp Suite, colocamos ese comando, le damos a “Forward” dos veces, dejamos de interceptar la petición, y en la página ya nos dice que la hemos resuelto.