Blocky
Linux Easy con temática de Minecraft que acaba siendo pura enumeración: un plugin .jar descargable de la web lleva la contraseña de la base de datos en claro, esa misma credencial reutilizada abre el SSH del usuario notch, y notch puede ejecutar cualquier cosa con sudo, así que se es root al instante.
Blocky
| Máquina | SO | Dificultad | IP |
|---|---|---|---|
| Blocky | Linux | Easy | 10.129.89.74 |
A tener en cuenta...
Resumen
Blocky prometía mucho por la temática — un servidor de Minecraft publicado, el nombre, la estética — y acaba siendo una de las máquinas más directas de todo el camino. No hay explotación de un servicio ni un CVE que lanzar: todo gira en torno a una credencial que estaba donde no debía.
En la web hay un WordPress en construcción y, colgando de una carpeta abierta, el plugin a medio hacer que el autor del servidor estaba programando. Ese plugin es un .jar de Java, y dentro lleva la contraseña de la base de datos escrita en claro.
Esa misma contraseña, reutilizada, abre la sesión SSH del usuario notch. Y una vez dentro, sudo lo hace todo sin la menor resistencia: notch puede ejecutar cualquier cosa como root. No hay escalada que valga.
Todo el reto está en la enumeración: encontrar la carpeta, bajarse el .jar, abrirlo y leer lo que no debería estar ahí.
Vulnerabilidad
No hay ningún exploit. Hay una cadena de descuidos que empieza en un fichero mal colocado y termina en un sudo demasiado generoso.
01 · Un plugin con credenciales en claro, y descargable
El autor dejó en /plugins/ el código del plugin que estaba escribiendo para su servidor, BlockyCore.jar. Un .jar no es más que un ZIP, y dentro, en el .class compilado, está la contraseña de la base de datos escrita a pelo en el código. Guardar un secreto en el fuente ya es un error; publicar ese fuente en una carpeta abierta de la web lo convierte en un regalo.
02 · La misma contraseña sirve para todo
La contraseña era la de root en MySQL, pero el usuario notch la reutilizaba tal cual para su cuenta del sistema. Así, un secreto pensado para la base de datos abre directamente la sesión SSH. La reutilización de credenciales es lo que convierte una fuga pequeña en acceso completo.
03 · notch puede ejecutar cualquier cosa como root
El golpe final, y el más tonto. notch está en el sudoers con permiso para ejecutar cualquier comando como root. No hay que buscar un binario vulnerable ni un kernel sin parchear: con tener su sesión, ser root es pedirlo.
A esto se suman dos fugas menores que facilitan la enumeración: el listado de directorios activado (que es lo que deja ver el .jar) y la enumeración de usuarios de WordPress, que confirma el nombre notch antes incluso de tener la contraseña.
Reconocimiento
Barrido completo de puertos contra la víctima, con detección de sistema operativo
| Puerto | Servicio |
| 21 | ftp |
| 22 | ssh |
| 80 | http |
| 25565 | minecraft |
Cuatro puertos abiertos y un quinto, el 8192, cerrado. El reparto ya cuenta la historia de la máquina: 21 (FTP), 22 (SSH) y 80 (HTTP) son lo de siempre, pero el 25565 es el puerto por defecto de un servidor de Minecraft. Esa es la temática, y la que hace pensar que va a haber que pelearse con el juego — spoiler: no.
El fingerprinting apunta a un Linux moderno de la familia 3.x–4.x, sin más precisión porque los 65.530 puertos restantes salen filtrados.

Enumeración
Enumeración de versiones sobre los puertos abiertos

El OpenSSH 7.2p2 sitúa el sistema en Ubuntu 16.04 (xenial), y el Minecraft del 25565 confirma la temática. El FTP no soltó versión en este escaneo, así que lo saco a mano con un banner grabbing sencillo

ProFTPD 1.3.5a — una versión con un RCE conocido por mod_copy, que apunto por si acaso pero que al final no hace ninguna falta. El peso de la máquina está en el puerto 80, así que miro qué sirve

Un WordPress 4.8 sobre PHP y MySQL, con el sitio en construcción — «BlockyCraft, Under Construction». Lo confirmo con whatweb

Con un WordPress delante, toca descubrir qué hay publicado

Aparecen un /phpmyadmin/, el panel de WordPress en /wp-login.php y, sobre todo, una carpeta /plugins/ que no es de WordPress — las de WordPress cuelgan de /wp-content/plugins/. Esa llama la atención. Antes de abrirla, paso el escáner específico de WordPress



Un WordPress 4.8 con 109 vulnerabilidades conocidas y el tema anticuado — mucho ruido, pero nada que vaya a usar. Lo valioso viene al final, en la enumeración de usuarios

notch — que, para quien conozca Minecraft, es el alias del creador del juego. Lo confirmo a mano en el propio panel de login, que sufre enumeración de usuarios: con un usuario que no existe responde «Invalid username», pero con notch cambia el mensaje a «The password you entered for the username notch is incorrect». Es decir, el panel confirma qué usuarios son válidos


Tengo un usuario, pero no su contraseña. La contraseña está en la carpeta que me salté antes. En /plugins/ hay dos .jar, y uno canta por el nombre

BlockyCore.jar, 883 bytes. Un plugin propio, hecho a mano, diminuto. Justo lo que hay que abrir.
Explotación
Un .jar es un ZIP con código Java compilado dentro, así que lo descomprimo para ver qué lleva

Dentro hay un único .class, el código ya compilado. No hace falta decompilarlo para lo que busco: con strings saco todas las cadenas de texto imprimibles que lleva dentro, y entre ellas suele estar lo interesante

Ahí está, sin el menor disimulo: los campos sqlHost, sqlUser y sqlPass, y debajo sus valores — localhost, el usuario root y la contraseña 8YsqfCTnvxAUeduzjNSXe22. El TODO get username remata la escena: el plugin estaba a medio hacer, con las credenciales puestas a mano «de momento».
En teoría es la contraseña de la base de datos, así que lo lógico es probarla donde toca. Pero no cuela — ni en phpMyAdmin ni en el panel de WordPress con el usuario notch


Donde sí vale es donde menos «corresponde»: reutilizada como contraseña del sistema. La pruebo por SSH y por FTP con el usuario notch, y entra por los dos

Dentro como notch, la primera flag está en su propio home

Escalada de privilegios
Lo primero al aterrizar en un Linux es mirar qué permisos tiene el usuario con sudo

(ALL : ALL) ALL. Cualquier comando, como cualquier usuario. No es una escalada, es un cambio de sesión: basta con pedir una shell de root
Y con eso, control total de la máquina.
Flags
La de usuario estaba en el home de notch
Y la de root, ya como root, en su directorio

Cómo se arregla
Nada que parchear: todo es configuración y malas prácticas. Por capas:
- No meter secretos en el código: una contraseña escrita en el fuente acaba, tarde o temprano, donde no debe. Las credenciales van en configuración fuera del artefacto, en variables de entorno o en un gestor de secretos, nunca compiladas dentro de un .jar.
- No publicar el código en la web: esa carpeta /plugins/ con los .jar no pinta nada en el servidor. Y el listado de directorios debería estar desactivado, para que al menos no se vea lo que hay.
- No reutilizar contraseñas: la de la base de datos no debería valer para la cuenta del sistema. Una credencial por servicio corta la cadena en seco.
- Quitarle el sudo total a notch: (ALL : ALL) ALL convierte cualquier acceso en acceso root. El sudo se da por comando concreto y a quien lo necesita, no en bloque.
- Endurecer WordPress: corregir la enumeración de usuarios, cerrar xmlrpc.php si no se usa y actualizar el núcleo, el tema y los plugins. Y, ya puestos, no dejar /phpmyadmin/ accesible desde fuera.
- Actualizar ProFTPD: la 1.3.5a arrastra el RCE de mod_copy; aquí no hizo falta, pero es una puerta de más que conviene cerrar.
Conclusiones
Una máquina que defrauda muchísimo, desde el inicio pensaba que volvería a mi infancia comprometiendo Minecraft y al final era una máquina hiper sencilla, una pena