La máquina Anonymous es una máquina de dificultad media de TryHackMe. Esta máquina ya con el nombre da pistas de por dónde será el vector de ataque o intrusión.

Resumen de conceptos trabajados:
| Escaneo y enumeración de puertos y servicios Anonymous access Revershell RCE Enumeración de privilegios con SUIDEscalada de privilegios mediante abuso de binarios (GTFOBins) |
Estructura del contenido
TL;DR – RESUMEN DE LA MÁQUINA ANONYMOUS
Te resumo a continuación la resolución de la máquina a modo de spoiler, si quieres ver el detalle de cada acción, te invito a leer el desarrollo completo:
En esta máquina comenzamos identificando los puertos abiertos mediante escaneo con Nmap, lo que nos permitió detectar acceso FTP con login anónimo habilitado. Tras conectarnos, encontramos un script clean.sh que aparentemente se ejecutaba automáticamente en el sistema, por lo que lo sustituimos por una reverse shell maliciosa y conseguimos ejecución remota de comandos como el usuario namelessone. Una vez dentro, estabilizamos la TTY y realizamos enumeración local en busca de vectores de escalada. Finalmente, detectamos un binario con permisos SUID vulnerable que nos permitió abusar de sus privilegios para convertirnos en root. |
Si es tu primera máquina en TryHackMe 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.
Cuando inicies siempre una máquina de TryHackMe, recuerda securizarte en la red, para ello te cuento cómo lo hago yo siguiendo estos sencillos pasos.

ESCANEO Y ENUMERACIÓN 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 los servicios y versiones que corren para esos puertos.

Por el valor del ttl podemos ver que estamos ante una máquina cuyo sistema operativo es un Kali Linux. (Linux=64; Windows=128).
nmap -p- --open -sS --min-rate 5000 -vvv -n 10.130.134.255
-P : eliminamos esto para que nmap en el escaneo no haga HOST discovery y de por hecho que el host está up sin tirar de pings

En este primer escaneo de puertos abiertos nos encontramos que hay cuatro, en concreto los puertos 21 ftp, 22 ssh, 139 y 445 (netbios para compartir archivos, etc).
Ahora realizamos un escaneo más a detalle con nmap para ver cuáles son los servicios y versiones que corren para esos puertos abiertos.
nmap -sCV -n -p21,22,139,445 10.130.134.255
-n : para que no aplique resolución DNS

Nos confirma que tenemos un puerto 22 ssh en su versión OpenSSH 7.6p1 (que reviso y no veo explot públicos a priori), puerto 21 ftp con login anonymous permitido, y los puertos de compartir ficheros 139 y 443 tcp.
ANONYMOUS ACCESS
Sabiendo esto, ya nos da pista que la intrusión o fase de investigación parte del puerto ftp 21 ya que nos va a permitir acceder usando sólo el usuario anonymous (sin contraseña).
Probamos y estamos dentro, donde además podemos ver tres

Visto esto, y con el comando «get» (ubicados en la carpeta que hemos creado en nuestra máquina con el mismo nombre de la máquina) nos descargamos los ficheros para analizarlos…

Hecho esto, vemos en nuestra carpeta todos los ficheros descargados para abrirlos.

Lo primero que hago es ver el contenido del txt por si hubiera algún usuario o contraseña expuesta, y no…

El otro archivo de lo que parece ser un registro de logs (remove_files.log) muestra un listado de mensajes de ejecución de un script «clean» donde no ha eliminado nada…

por tanto el otro fichero «clean.sh» nos diré que es un script que se ejecuta de forma automática eliminando registros…vamos a analizarlo:

Parece ser un script pensado para borrar archivos temporales de /tmp y registrar la acción en un log:
- borra en
/tmp/ - escribe en
/var/ftp/scripts/removed_files.log
Probablemente se ejecuta automáticamente, casi seguro mediante cron o alguna tarea periódica.
Por lo que una idea de potencial intrusión podría ser el sustituir el contenido de ese script por un comando malicioso sabiendo que el sistema lo va a ejecutar de forma automática.
Dicho esto, y teniendo el fichero «clean.sh» descargado en nuestra Kali, lo que vamos a hacer es crearnos una reverse shell maliciosa la cual «pisaremos» en ese ficehro clean.sh con nano y luego subirla por ftp a la máquina víctima.
Buscamos por «ifconfig» cuál es nuestra IP asignada por TryHackMe en la tun0.

REVERSHELL RCE
Y ahora podemos ir a la web RevShells.com y crearnos el payload colocando el puerto 443 como el de escucha que usaremos en nuestra Kali con netcat para recibir la shell:


Una vez hemos sobreescrito el script con el payload de la reverse shell, lo que hacemos es volver a entrar por ftp como anonymous, colocarnos en el directorio «/scripts» y con el comando «put» subir nuestro clean.sh malicioso…
Como vemos, en el registro se muestra la fecha nueva de la subida por lo que nos indica que el contenido se ha reemplazado correctamente con nuestro payload.

Hecho esto, la idea es que, si nos abrimos con netcat un listener en escucha por el puerto 443, y esperamos a que el sistema de la máquina víctima lance el cron, deberíamos recibir una shell.

Correcto, hemos aplicado una ejecución remota de comandos RCE recibiendo una shell como el usuario «namelessone». Para poder interactuar de forma segura y ágil en la shell, vamos a hacer un tratamiento de la terminal usando el comando:

si investigamos dentro de este usuario vemos la user.txt flag:

Por lo que ahora nos queda elevar privilegios a root como admin de la máquina para tener control total.
PRIVILEGIOS SUID
Lo que solemos hacer es ver con «sudo -l» o SUID los permisos de binarios habilitados por los que podemos explotar para elevarnos como root.
Si aplicamos un «sudo -l» vemos que necesitamos contraseña que no tenemos, por lo que antes probar con fuerza bruta para conseguir la contraseña, vamos a ver permisos con SUID:

find / -perm -4000 2>/dev/null
y nos devuelve un listado de binarios, entre los que vemos el /env que como ya vimos en la máquina de TryHackMe que hice de Mr.Robot CTF , es un binario vulnerable:

ESCALADA DE PRIVLEGIOS CON ABUSO DE BINARIO
Por lo que vamos a GTFObins para recordar qué comando ejecutar como SUID para escalar privilegios a root y vemos que con el comando.

/usr/bin/env /bin/sh -p
El bit setuid en este archivo /usr/bin/env, permite que se ejecute con los privilegios del propietario (root).
De esa forma llegamos a acceder a root y si nos movemos internamente hasta cd /root podemos ver la root.txt flag:


