Tabby
LFI que filtra las credenciales de Tomcat, despliegue de un WAR y escalada abusando del grupo lxd.
Tabby
| Máquina | SO | Dificultad | IP |
|---|---|---|---|
| Tabby | Linux | Easy | 10.10.10.194 |
A tener en cuenta...
Resumen
Tabby es una cadena completa y muy entretenida: un LFI en la web filtra las credenciales del Tomcat, con ellas desplegamos un WAR malicioso para entrar, crackeamos un backup protegido cuya contraseña está reutilizada para saltar a otro usuario, y rematamos abusando del grupo lxd para hacernos root. Un recorrido por varios conceptos clásicos, todos encadenados.
Vulnerabilidad
LFI (Local File Inclusion)
La web incluye ficheros según un parámetro de la URL (news.php?file=) sin sanear, así que podemos pedir rutas del sistema con ../ y leer ficheros de configuración, entre ellos el de usuarios de Tomcat.
Tomcat Manager + despliegue de WAR
Con las credenciales y el rol manager-script, la API de texto de Tomcat permite subir y desplegar una aplicación WAR. Metemos una con una reverse shell y Tomcat la ejecuta.
Grupo lxd
Un usuario del grupo lxd puede crear un contenedor privilegiado y montar dentro el sistema de ficheros del host. Desde el contenedor, es root sobre todo el disco del anfitrión: escalada total.
Reconocimiento
Escaneo completo de puertos
| Puerto | Servicio | Versión |
| 22 | ssh | OpenSSH 8.2p1 |
| 80 | http | Apache httpd 2.4.41 |
| 8080 | http | Apache Tomcat |
Un Apache normal en el 80 y un Tomcat en el 8080. La web del 80 apunta al dominio megahosting.htb (lo añadimos al /etc/hosts).
Enumeración
En la web hay un enlace del tipo news.php?file=statement. Ese parámetro huele a LFI, así que lo probamos
Hay LFI confirmado. Lo usamos para leer el fichero de usuarios de Tomcat (en Ubuntu, Tomcat 9 lo tiene en /usr/share/tomcat9/etc/tomcat-users.xml)
Credenciales de Tomcat: tomcat / $3cureP4s5w0rd123!, y con el rol manager-script, que es justo el que permite desplegar por la API de texto.
Explotación
Paso 1 — generar el WAR. Creo una reverse shell JSP empaquetada como WAR con msfvenom
Paso 2 — desplegar. Lo subo con el manager de texto de Tomcat usando las credenciales sacadas por el LFI
Paso 3 — disparar. Me pongo en escucha y llamo a la aplicación para que ejecute la shell
Escalada de privilegios
Paso 1 — del tomcat al usuario ash
Fisgando el sistema, en /var/www/html/files hay un backup comprimido
Está protegido con contraseña. Nos lo llevamos a nuestra máquina y lo crackeamos con zip2john + john
La contraseña del zip es admin@it, y está reutilizada para el usuario del sistema ash
Paso 2 — de ash a root por el grupo lxd
ash pertenece al grupo lxd. Eso permite crear un contenedor privilegiado y montar el disco del host dentro. Importamos una imagen ligera de Alpine y la arrancamos privilegiada
Dentro del contenedor somos root, y en /mnt/root tenemos TODO el sistema de ficheros del anfitrión con permisos de root
Flags
Cómo se arregla
La cadena acumula varios fallos, así que el arreglo también. Por capas:
- Sanear la inclusión de ficheros: validar el parámetro file con lista blanca y bloquear ../; nunca incluir rutas controladas por el usuario.
- Proteger Tomcat: credenciales fuertes, no dejar el fichero de usuarios al alcance de un LFI y limitar el rol manager-script.
- No dejar backups accesibles: ese zip no debería estar en el webroot, y menos con una contraseña débil.
- No reutilizar contraseñas: la del backup abría la cuenta de ash.
- Vigilar el grupo lxd: pertenecer a lxd equivale a ser root; solo administradores de confianza deberían estar en él.
Conclusiones
Tabby es un recorrido precioso por fallos encadenados: LFI → credenciales → RCE en Tomcat → crackeo de backup → reutilización de contraseña → grupo lxd. Ninguno es muy complejo, pero juntos llevan de un parámetro de URL a root.
Dos ideas para llevarse: cualquier parámetro que incluya ficheros merece una prueba de LFI, y en Linux hay que mirar siempre los grupos del usuario con id — lxd, docker o disk son escaladas directas.