En este writeup vamos a resolver la máquina Basic dificultad easy de VulNyx.
Resumen de conceptos trabajados:
Escaneo de Puertos Descubrimiento de directorios SSH Ataque de Fuerza Bruta con Hydra SUID escalada de privilegios |
Si es tu primera máquina de VulNyx y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento paso a paso cómo introducirte en esta plataforma.
Estructura del contenido
Conexión Previa
Cómo Verificar que estamos conectados a la máquina víctima
Lo primero que tendrás que hacer cuando vayas a trabajar sobre alguna de las máquinas de VulNyx, es descargarla en tu equipo. Una vez descargada y descomprimida, irás a tu VMWare o VirtualBox y la importarás para virtualizarla.
Si lo haces con VMWare, yo por ejemplo, después de importarla, configuro la conexión de red a NAT, para que tanto máquina atacante como máquina víctima se encuentren.
Después, abro la máquina de VulNyx y la dejo abierto para que esté activa.
Comenzando con el reconocimiento de la máquina víctima
Inicio mi sesión siendo usuario root de mi máquina atacante con el comando “sudo su” y creamos previamente una nueva carpeta dentro de nuestro Kali para esta máquina y poder crear allí todo lo que analicemos (mkdir Basic) como el output del escaneo.
Para asegurarnos de que la máquina víctima está conectada en la red, incluimos el comando:
arp-scan -I eth0 --localnet
y de esta forma vemos todas las IPs conectadas para empezar a analizarla (podemos comprobar que se encuentra la IP de la máquina VulNyx cuando la ejecutamos anteriormente).
Para asegurarte de que la máquina está activa, puedes enviarle un ping de esta forma:
ping -c 1 IP -R
*puedes añadir el comando -R para hacer un traceroute y ver el envío de paquetes y comprobar.
O también mediante el comando:
nmap -sn IP
- ¿ANTE QUÉ MÁQUINA NOS ENFRENTAMOS? WINDOWS TTL 128 O LINUX 64
En este caso es LINUX, ttl64.
Fase de Enumeración / Escaneo de Puertos
Comenzamos el análisis con la fase de enumeración y escaneo de puertos mediante el comando:
nmap -p- -sCV --open --min-rate 5000 -vvv -n -Pn 192.168.64.141 -oN escaneo
Exportamos la evidencia del escaneo en el fichero «escaneo».
De tal forma que una vez se termina el escaneo, vamos a la carpeta de la máquina y abrimos con cat el resultado del escaneo:
- Vemos los puertos 22 y 80 abiertos:
Puerto 22 versión OpenSSH 8.4p1 (aunque esta versión es vulnerable y se pueden ver exploits en internet, en principio no haremos el ataque por aquí).
- Vemos abierto también un puerto web que es el 631 IPP (Internet Printing Protocol) donde se realizan acciones como enviar un trabajo de impresión via web, etc.
Siempre que tenemos el puerto 80 web abierto, me gusta empezar por analizar la web a ver qué nos encontramos:
Abrimos el navegador y ponemos la IP http://192.168.64.141:80
El servidor nos responde con un 200 y nos muestra el contenido de la web.
Con la extensión Wappalyzer podemos analizar las tecnologías que usa la web, en este caso un servidor Apache y SO Debian:
Y también mediante el comando whatweb IP podemos sacar ese mismo resumen:
Descubrimiento de directorios
Después de analizar el código y de hacer fuzzing con DIRBUSTER para descubrir directorios internos o recursos que pudiéramos explotar, no encontré nada analizando el puerto 80.
El único que devolvía 200 era el /index.html que es la home en sí.
También probé con WFUZZ a hacer el descubrimiento usando el directory listing 2-3 medium pero tampoco se encontró nada a las 10K request, por lo que no está por aquí la intrusión:
Agotada la vía de análisis del puerto 80, vamos a analizar el puerto 631 como se detectó en el escaneo inicial:
*CUPS es el servicio de impresión de Linux dentro de IPP.
Digamos que estamos ante el panel de impresoras en Linux, y si analizamos el menú de navegación o bien aplicamos un descubrimiento de directorios como anteriormente con WFUZZ o DIRBUSTER, nos sacara diferentes carpetas, para ello usamos el comando:
wfuzz -c –hc 404 -t 200 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Entre las que está Printers dondepodemos ver al usuario “dimitri”:
http://192.168.64.141:631/printers/dimitri_printer
SSH Ataque de Fuerza Bruta con Hydra
Sabiendo que está este usuario que puede ser un vector de ataque claro, y además, si recordamos en el escaneo inicial que el puerto 22 ssh estaba abierto, por lo que vamos a intentar hacer un ataque de fuerza bruta con Hydra para conocer la contraseña de ”dimitri” y acceder para ver sus permisos.
El comando sería:
hydra -l dimitri -P /usr/share/wordlists/rockyou.txt ssh://192.168.64.141
“-l” : Este comando se utiliza para especificar un nombre de usuario único que será utilizado en el ataque de fuerza bruta, en nuestro caso, usaremos el nombre de “dimitri”.
“-P”: Este comando se utiliza para especificar la ruta del archivo en nuestro sistema al que Hydra tiene que acceder y que contiene una lista de posibles contraseñas para crackear la contraseña final del usuario anterior.
El resultado fue obtener las credenciales: User: dimitri Password: mememe |
Por tanto, ahora nos logamos por ssh con ese usuario y contraseña, y podemos ver los permisos asociados con el comando “id” una vez estemos dentro.
SUID escalada de privilegios
Vemos que tiene permisos “uid” no admin.
A continuación vamos a buscar archivos y directorios (binarios suid) en el sistema de archivos partiendo del directorio raíz “/” (es decir, en todo el sistema), con -perm -4000 buscamos del listado de archivos disponibles aquellos que son binarios y con “2>/dev/null” redirigimos los errores (stream 2) a /dev/null, es decir, cualquier mensaje de error será descartado y no se mostrará en la terminal.
find / -perm -4000 2>/dev/null
Para conocer cómo podemos escalar privilegios mediante binarios, accedemos a la web https://gtfobins.github.io/ .
En nuestro caso vemos el binario /usr/bin/env , que significa que, con el bit setuid activado (lo que es inusual), cualquier usuario podría ejecutar comandos con los permisos del propietario del archivo /usr/bin/env, que muy probablemente es el usuario root.
Por tanto buscamos en la web la parte de /env para ver cómo continuar con la escalada de privilegios: https://gtfobins.github.io/gtfobins/env/ aquí nos dicen cómo podemos hacerlo mediante SUID.
Nos valemos de la segunda parte del código, pero lo modificamos eliminando el ./ inicial porque no estamos ubicados en la ruta /usr/bin/env , de lo contrario nos daría error.
env /bin/sh -p
Y ya una vez ejecutado, ya estaríamos como usuario root y podríamos ver la flag.