En este writeup vamos a resolver una de las máquinas de la plataforma Dockerlabs llamada AnonymousPingu, con el nivel de dificultad «Fácil».
Al final del write up te cuento un resumen de toda la máquina. 🙂 Algunos conceptos trabajados:
| Reconocimiento y escaneo de puertos y servicios Acceso anónimo por FTP (Anonymous FTP Access) Ejecución remota de código (RCE) mediante archivo PHP Enumeración de privilegios con sudo -lAbuso de binarios permitidos por sudo (Binary Abuse) Pivoting entre usuarios Escalada final de privilegios a root |
Si quieres conocer más sobre la plataforma Dockerlabs y ver cómo se configura, etc, en este post te cuento cómo hacerlo.
Básicamente los pasos son: 1 – Creas una carpeta con el nombre de la máquina (es opcional, yo las creo por organización), 2 – Descargas la máquina de Dockerlabs y la mueves al directorio que has creado anterior, y 3 – Descomprimes y despliegas.
Para todas las máquinas, la IP de Dockerlabs es siempre la misma: 172.17.0.2

Una vez hemos descargado la máquina víctima de Dockerlabs y desplegada en nuestro entorno, empezamos con el escaneo.
Estructura del contenido
RECONOCIMIENTO Y ESCANEO DE PUERTOS Y SERVICIOS
Comenzamos primero viendo si la máquina está activa y podemos conectarnos a ella, y después continuamos con el descubrimiento de puertos para luego hacer un escaneo de sus servicios y versiones.

El TTL es de 64 por lo que estamos ante una máquina Linux y vemos que la máquina está activa por la respuesta «Host is up«.
Ahora que sabemos que la máquina víctima está activa, procedemos escanear la red lanzando un nmap para detectar qué puertos están abiertos con el siguiente comando:
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oN Escaneo

Sabemos por tanto que están abiertos los puertos 80 HTTP y 21 FTP.
Ahora lo que vamos a hacer es analizar qué servicios y versiones corren para esos puertos abiertos con el objetivo de poder analizar a detalle posibles vulnerabilidades.
Para ello lanzamos el siguiente comando:
nmap -sCV -p80,21 172.17.0.2

Para el puerto 21 se detecta como vulnerable la entrada por ftp bajo login como anonymous (tal y como reza el nombre de la máquina), además de una serie de archivos o recursos.
La web devuelve este contenido que a priori no se detecta nada vulnerable …

ACCESO ANÓNIMO POR FTP
Sabiendo que la parte de login vía FTP como anonymous está habilitada, continuamos por esta opción y estamos dentro:

Si listamos los directorios internos, vemos los mismos detectados en el escaneo anterior.
Interesante el directorio http://172.17.0.2/upload/ donde a priori se podrían almacenar los recursos que se suban en él. Tenemos antes que averiguar cómo podemos subir un potencial archivo malicioso que ejecutar y ganar acceso… (también http://172.17.0.2/heustonn-html/ y /images/) en los cuales podemos ver lo recursos almacenados.
Esto nos habilita a poder probar a subir con put archivos malicioso con los que podamos probar a ejecutar comandos de forma remota.
Para ello, lo que haré será descargarme una reverse shell como php e intentar subirla.
EJECUCIÓN REMOTA DE COMANDOS RCE
En este caso lo haré usando Pentest Monkey PHP, modificando la IP dada por la nuestra atacante, y el puerto por el 4444 por el que nos pondremos en escucha.

Una vez modificados estos valores, nos aseguramos de que ese archivo php modificado está en la misma ruta que nos conectamos por ftp como usuario anonymous.
NOTA: es posible que te saque de la sesión ftp si estás mucho tiempo inactivo…pero te vuelves a logar como anonymous, y ya estaría…
Ahora que tenemos el php creado, y estamos dentro de la sesión ftp bajo la misma ruta del archivo, lo que hacemos dentro de la sesión es ir a la carpeta de upload por ejemplo y subir el archivo:

Vemos que está alojado en el directorio upload, también dese el navegador:

Ahora nos quedaría levantarnos un listener con netcat por el puerto 4444 y clicar sobre ese php de arriba y nos debería de dar acceso:

Efectivamente estamos dentro, pero como usuario www-data. Estabilizamos la tty:

Vamos a navegar entre carpetas para ver usuarios:

Vemos los dos usuarios interesantes «gladys» y «pingu» pero no podemos acceder ni leer ni ejecutar porque como Otros no tenemos permisos de listar ni entrar a esos directorios.
ENUMERACIÓN DE PRIVILEGIOS
Después de revisar diferentes directorios, etc, no veo nada más relevante, por lo que pasamos a ver con «sudo -l» cuáles son los privilegios que tiene nuestro usuario actual www-data.

Nos muestra que podemos ejecutar el binario /usr/bin/man como el usuario pingu sin contraseña, solo usando el comando sudo.
ABUSO DE BINARIOS
Para ello nos vamos a GTFObins a ver entre los repositorios como acceder explotando ese binario y aplicamos el siguiente comando (antes te recomiendo estabilizar la TTY).
Estabilización de TTY:
python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
CTRL + Z
stty raw -echo; fg
reset

Ahora como usuario pingu busco directorios o archivos relevantes pero no encuentro nada, por lo que reviso de nuevo sus permisos con «sudo -l»:

Nos valemos del binario dpkg para pivotar al usuario gladys ejecutando el siguiente comando (seguido de !/bin/bash)

Y ahora somos el usuario gladys, que por último, y siguiendo los mismos anteriores, vemos sus privilegios y nos permite ejecutar como usuario root el binario chown para escalar privilegios.
Intento de primeras copiarme el archivo etc/passwd y editarlo para modificarle la contraseña de root quitándole la «x» para que pueda acceder a root sin contraseña, pero al no poder usar ningún editor para modificarlo, reviso el writeup de Mario al final donde lo que hace es ejecutar estos comandos.

Lo que significa es que se le da al usuario gladys permisos de ejecución de todo el directorio etc (donde se almacena la passwd) de modo que puedo modificar sin tener una consola interactiva, el fichero passwd y le eliminamos la x para poder pivotar a root sin contraseña.
RESUMEN DE LA MÁQUINA ANONYMOUS
Comenzamos la resolución identificando que la máquina permitía acceso FTP anónimo, lo que ya suponía una mala configuración de base. Al conectarnos por FTP comprobamos que el contenido coincidía con el servido por la web y que existía un directorio upload, lo que nos permitió subir archivos sin restricciones. Aprovechamos esto para subir un archivo PHP malicioso y ejecutarlo desde el navegador, obteniendo así una reverse shell como el usuario www-data. Tras estabilizar la TTY, ya teníamos una shell dentro del sistema.A continuación, iniciamos la enumeración de privilegios con sudo -l y descubrimos que www-data podía ejecutar el binario man como el usuario pingu sin contraseña. Abusando del pager less que utiliza man, ejecutamos una shell desde su interior y conseguimos pivotar al usuario pingu. Una vez dentro, repetimos la enumeración de privilegios y detectamos que pingu podía ejecutar nmap como el usuario gladys, lo que nos permitió, usando el modo interactivo de nmap, lanzar otra shell y escalar al usuario gladys.Finalmente, ya como gladys, revisamos de nuevo los privilegios y encontramos que podía ejecutar chown como root sin contraseña. Este permiso nos permitió cambiar la propiedad del directorio /etc y modificar directamente el archivo /etc/passwd usando sed, eliminando la contraseña del usuario root. Gracias a esto, pudimos ejecutar su root sin credenciales y obtener acceso completo como root. |
