Escaneando con nmap encontramos que esta abierto el puerto 80, como solo indica un servicio lo visitamos en el navegador.
Viendo el código fuente encontramos la primera flag.
Por fuzzing no encontré nada alv
En la petición que se envía tenemos el campo name, el cual es el que debemos modificar con el valor beer
para que el servidor acepte nuestro archivo. Esto se intuye después de subir un archivo cualquiera y nos arrojara un mensaje de que se necesita beer
, entonces modificando los campos disponibles encontramos que el campo a modificar es name.
// Original
Content-Disposition: form-data; name="file-upload"; filename="hola.jpg"
// Archivo aceptado
Content-Disposition: form-data; name="beer"; filename="hola.jpg"
En la página de inicio también tenemos el mensaje de que no acepta archivos php y probando a subir uno efectivamente no lo acepta, entonces modificando la petición para que acepte el archivo, notamos que el filtro unicamente se encuentra en el campo filename.
Intentando bypassear encontramos dos métodos principales:
- Subiendo un archivo
.shtml
malicioso para ejecutar código. - Subiendo un archivo de configuración
.htaccess
para interpretar archivos con una extensión determinada como archivos php. - Subiendo una shell de
.htaccess
En este caso seguí la segunda opción subiendo mi archivo .htaccess con el siguiente contenido:
# El addType ni lo toma en cuenta xd
AddType application/x-httpd-php .bee
AddHandler application/x-httpd-php .bee
Con esto es posible subir una reverse shell de php con extensión .bee
, entonces al acceder a la dirección del archivo obtenemos una shell en el puerto que pusimos en escucha.
Escalada de privilegios
Después de realizar unas revisiones manuales y no encontrar algo de utilidad, procedemos a utilizar linpeas para ver que puede encontrar.
En los resultados observamos que la versión de sudo 1.8.27 es vulnerable al CVE-2019-14287. Al tratar de ejecutar un comando indicando el id del usuario podemos pasarle el id -1
o un número mayor que el maximo de int y obtener acceso a root, debido a que interpreta el id como 0, el cual corresponde a dicho usuario.
sudo -u#-1 /bin/bash
Las localizaciones de las flags son:
- Comando env con el usuario www-data, o subiendo la shell con
sudo su
. - /etc/passwd
- /etc/shadow
- Archivo
index.php
(2) - Archivo
ETSCTF.html
- /root
Contenido del SHTML malicioso:
<!--#exec cmd="ls -la" -->