Command Injections
Target(s): 94.237.53.203:55294
Se le ha contratado para realizar una pentest para una empresa y, durante su realización, se encuentra con una interesante aplicación web de gestión de archivos. Dado que los gestores de archivos suelen ejecutar comandos del sistema, le interesa comprobar si existen vulnerabilidades de inyección de comandos.
Utilice las diversas técnicas presentadas en este módulo para detectar una vulnerabilidad de inyección de comandos y, a continuación, explótela, eludiendo cualquier filtro existente.
Pregunta 1: ¿Cuál es el contenido del archivo «/flag.txt»?
Accedemos a través del navegador al objetivo utilizando las credenciales guest:guest y vemos que es un File Manager.

Identificamos distintas funcionalidades (buscar, búsqueda avanzada, descargar, copiar, etc) que pueden servirnos de vector de ataque:

Por ejemplo, haciendo click en Copiar, nos redirige a otra página, en la que vemos en la URL parámetros que podemos intentar explotar, pero haciendo click en la función Move vemos que aparecen más:


Activamos FoxyProxy para Burp, iniciamos Burp, recargamos la página para capturar la solicitud y la enviamos al Repeater:

En el Repeater se prueba a ver que operadores están blacklisteados:

Después de diferentes pruebas, encontramos que el operador %26%26 no está blacklisteado por la respuesta del server:

Se intenta inyectar el comando pero lo bloquea:

Probaremos encriptandolo en base 64:

Luego haciendo uso de el inyectar en shell de bash, el comando en base64 y sustituyendo el espacio por una tabulación (%09):

Al darnos el error de “missing destination” nos indica que el parametro to= espera una parámetro, así que le añadiremos el payload en él y el from lo dejaremos como estaba:

Conseguimos el output del comando correctamente. Ahora vamos a buscar la flag que se pide en el ejercicio.
Primero encodeamos en base64 el comando ls -la:

Lo metemos en el parámetro de to= indicando que es para bash, está en base64, sustituimos espacios por tabulaciones:

Nos da un error en el nombre del archivo del from, no lo encuentra, lo cambiamos y volvemos a ejecutar:

Conseguimos el output del comando ls -la.
Lo siguiente será encriptar en base64 el comando para leer el archivo flag.txt que se encuentra en el directorio raíz /:

Se lo pasamos como parámetro de to= indicando que es para bash, está en base64, sustituimos espacios por tabulaciones, cambiamos también el nombre del archivo para que no nos dé el error de antes:

Última actualización