En este caso quería probar a hacer la máquina Friendly3 de nivel fácil como mi primera máquina de la plataforma HackMyVM para hacer ejercicios básicos de hacking ético.

La forma de practicar con las máquinas de esta plataforma es igual a Vulnyx por ejemplo o The Hacker Labs, es decir, te descargas la máquina, la virtualizas y despliegas.

Enumeración de servicios
Information Leakage
Fuerza bruta con Hydra
Monitorización de procesos con pspy
Race condition
Abuso de SUID

Una vez hecho esto, comprobamos las IPs atacante host y víctima para tener claros los targets.

Para ello ejecutamos por un lado un arp-scan (para ver la máquina víctima) y por otro lado un ifconfig (para nuestra IP).

NUMERACIÓN -> ESCANEO DE PUERTOS

Comenzamos con la enumeración de puertos y conocimiento de versiones y servicios que corren sobre los mismos.

Siempre uso esta sintaxis en laboratorios (en este post te cuento lo que hace cada comando):

nmap -p- --open -sS -sCV --min-rate 2000 -vvv -n -Pn 192.168.1.226 -oN escaneo

Puertos típicos de laboratorios de hacking de nivel fácil: 22 (ssh), 80 (http) y 21 (ftp).

Sin conocer de primeras más información que esa, tenemos que buscar potenciales contraseñas y usuarios que nos permitan poder acceder por ssh o ftp al servidor y escalar privilegios.

INFORMATION LEAKAGE

Para ello empezaremos por acceder vía IP víctima desde el navegador a ver qué devuelve el puerto 80:

Nos aparece un potencial usuario (juan) gracias a un «Information leakage» desde el puerto http.

FUERZA BRUTA CON HYDRA

También nos dice que ha subido nuevos ficheros al servidor FTP, por lo que vamos a probar a realizar fuerza bruta con Hydra para conseguir la contraseña y acceder por el puerto 21.

Usaremos para ello el siguiente comando con el diccionario para contraseñas llamado «rockyou.txt».

hydra -l juan -P /usr/share/wordlists/rockyou.txt ftp://192.168.1.226

Y nos devuelve la contraseña «alexis«.

Probamos ambas credenciales para acceder por ftp y estamos dentro.

Probamos las mismas credenciales para entrar por el puerto 22, e igualmente accedemos.

De hecho llegamos a listar ficheros y vemos la primera flag de user.txt.

Ahora nos toca escalar privilegios a root para conseguir la última flag.

Para ello lo que hacemos es ver con «sudo -l» si el usuario Juan puede ejecutar algún comando como root sin contraseña y de esta forma entraríamos directo. Sin embargo el usuario Juan no tiene sudo instalado ni permitido por lo que vemos otra vía.

Si probamos ejecutando el comando:

find / -perm -4000 -type f

vemos si los binarios SUID permiten ejecutar acciones con permisos del dueño pero
no encontramos nada útil por lo que descartamos SUID como vector.

MONITORIZACIÓN DE PROCESOS CON PSPY

La otra opción es usar pspy64 que muestra procesos del sistema incluso sin permisos de root, así podemos ver qué está haciendo root en segundo plano.

Para ello nos levantamos primero un servidor con python3 en nuestra máquina atacante Kali por el puerto 8000:

y desde la máquina víctima en su puerto ssh nos descargamos pspy (curl), le damos permisos (chmod) y lo ejecutamos (./).

Y vemos como pspy64 está funcionando correctamente y se ven los procesos en ejecución.

Entre los procesos, vemos estos que son los más relevantes:

Es decir, root ejecuta automáticamente el siguiente flujo:

/bin/bash /opt/check_for_install.sh
chmod +r /tmp/a.bash
chmod +w /tmp/a.bash
chmod +x /tmp/a.bash
/bin/bash /tmp/a.bash

Esto nos viene a decir que el cron ejecuta /opt/check_for_install.sh como root y que le da permisos de escritura a todos con el chmod +w /tmp/a.bash por lo que el usuario «juan» puede modificar ese archivo ANTES de que root lo ejecute. Y después root ejecuta /tmp/a.bash .

RACE CONDITION

Este es un caso de Race Condition, donde la ventana entre «chmod +w /tmp/a.bash» y «/bin/bash /tmp/a.bash» nos permite inyectar código malicioso.

Por tanto, sabiendo todo esto, crearemos un script en sh que reescribirá el /tmp/a.bash

cd /tmp
nano exploit.sh
#!/bin/bash

while true
do
    echo "chmod +s /bin/bash" > /tmp/a.bash
done

Luego le otorgamos permisos con chmod y lo ejecutamos:

chmod +x exploit.sh
./exploit.sh

ABUSO DE SUID

Si ahora lo dejamos ejecutando unos segundos, lo que pasará es que mientras root ejecuta el cron, leerá nuestra versión de /tmp/a.bash y ejecutará:

chmod +s /bin/bash

con «ls -la /bin/bash» vemos que tiene permisos SUID «-rwxr-xr-x» , ejecutamos «bash -p» para ganar shell de root y comprobamos que somos root y accedemos a la flag root.

RESUMEN DE LA MÁQUINA FRIENDLY3 DE HACKMYVM

En la máquina Friendly3 comenzamos identificando los servicios expuestos y aprovechamos una fuga de información en el puerto web para obtener el usuario juan, cuyas credenciales logramos mediante fuerza bruta en FTP.

Con ese acceso pudimos iniciar sesión por SSH y conseguir la user flag, pero al no disponer de permisos sudo ni binarios SUID vulnerables, tocaba profundizar en la enumeración para buscar un vector real de escalada. Ahí es donde utilizamos pspy64, una herramienta esencial para principiantes porque permite ver qué procesos ejecuta root sin necesidad de privilegios elevados.

Gracias a pspy descubrimos que root ejecutaba cada minuto un script llamado /opt/check_for_install.sh, y lo más importante: ese script creaba el archivo /tmp/a.bash, le daba permisos de escritura a cualquier usuario, y luego lo ejecutaba como root.

Aprovechamos ese fallo creando un pequeño script que reescribía continuamente el archivo /tmp/a.bash con un comando malicioso para establecer SUID en /bin/bash. Cuando el cron de root ejecutó nuestro archivo manipulado, obtuvimos una shell privilegiada con bash -p.

Con este acceso ya solo quedaba navegar hasta /root y leer la flag final.

Otros posts relacionados