Remote Code Execution (RCE) es el termino utilizado para referirse a cuando un atacante ejecuta codigo remotamente.
Hay muchas formas de realizar esto, sin embargo hoy vamos a ver una de las más comunes que es la ejecución de código mediante la subida de un archivo a un servidor.
Tenemos una página que nos permite subir un archivo.
Es importante que cuando se desarrolan este tipo de aplicaciones web, el código y el procesamiento de los archivos que se suben estén correctamente implementados.
Vamos a utilizar la herramienta "gobuster" que nos permite buscar todas las posibles carpetas públicas de la página en cuestión.
Esto lo hacemos con el objetivo de encontrar el sitio donde la página aloja nuestra imagen al ser subida.
Está aplicación se vale de un diccionario de nombres comunes de directorios para probarlos frente a una url. Es importante destacar que demora mucho tiempo, podemos ralentizarlo utilizando diferentes parametros.
La enumeración es exitosa y nos entrega 2 posibles directorios donde podría encontrarse las imagenes que se suben a la página.
Vemos que en el directorio /assets encontramos una carpeta llamada images.
Por lo pronto podemos entrar, pero sería bueno tener en cuenta el directorio llamado /resources .
Vemos que aquí se guardan las imagenes. Podriamos suponer, entonces, que las imágenes se suben en /resources .
Ya veremos.
Esta sencilla shell reversa creada en PHP nos permitirá interactuar con el servidor, de ser posible.
Este código toma el valor de un parámetro GET llamado cmd de la URL.
Luego ejecuta el valor de ese parámetro como si fuera un comando en el sistema operativo.
Finalmente, muestra la salida de ese comando en la página web.
Una vez subida la shell a la página, veremos que está disponible en este directorio.
Es importante destacar que el servidor no tiene ningún sistema de filtro para detectar archivos maliciosos, lo cual es un problema grave de seguridad.
Para interactuar con la shell basta con colocar su dirección seguida de ?cmd= y el codigo que deseemos ejecutar. En este caso,ya que es un servidor apache que corre en un sistema ubuntu, usaremos el comando "pwd" para saber donde estamos parados.
En la misma página nos va a entregar el resultado.
Podemos buscar la bandera.
en este caso listamos con ls, todo lo que está en la carpeta /var/www/
Con el comando cat y la dirección podemos imprimir la bandera.
Es importante filtrar correctamente los archivos que se suben a un sitio web.
Entendamos, tambien, que este ejercicio expone un sistema muy poco seguro, normalmente, los sitios que permiten subir archivos tienen varios filtro, que, aun así, son vulnerables.
NOTA: Todas estas pruebas fueron realizado en la página TryHackMe, un sitio que ofrece entornos controlados para practicar pentesting..
Estos procedimientos no deben realizarse a equipos ajenos sin una previa autorización.