Entrada

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

Publicado por Jaime Hereza Niño

Publicado 23/10/2026
8 min de lectura
Mi puntuación
25533 votos
MáquinaSODificultadIP
BlockyLinuxEasy10.129.89.74

A tener en cuenta...

┌──(jaime㉿kali)-[~]└─$ sudo nano /etc/hosts
10.129.89.74 blocky

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

┌──(jaime㉿kali)-[~]└─$ sudo nmap -p- -n -Pn -sS --max-retries 1 -O -osscan-guess blocky
PuertoServicio
21ftp
22ssh
80http
25565minecraft

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.

Escaneo completo de puertos
Figura 1: Escaneo completo de puertos

Enumeración

Enumeración de versiones sobre los puertos abiertos

┌──(jaime㉿kali)-[~]└─$ sudo nmap -p 21,22,80,25565 -sCV --version-intensity 9 -n blocky
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) 25565/tcp open minecraft Minecraft 1.11.2 (Protocol: 127, Message: A Minecraft Server, Users: 0/20)
Enumeración de versiones de los servicios
Figura 2: Enumeración de versiones de los servicios

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

┌──(jaime㉿kali)-[~]└─$ nc blocky 21
220 ProFTPD 1.3.5a Server (Debian) [::ffff:10.129.89.74]
Banner del servidor FTP
Figura 3: Banner del servidor FTP

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

Tecnologías de la web según Wappalyzer
Figura 4: Tecnologías de la web según Wappalyzer

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

┌──(jaime㉿kali)-[~]└─$ whatweb http://blocky.htb
http://blocky.htb [200 OK] Apache[2.4.18], HTTPServer[Ubuntu Linux][Apache/2.4.18], WordPress[4.8], MetaGenerator[WordPress 4.8], JQuery[1.12.4], Title[BlockyCraft – Under Construction!]
Tecnologías detectadas en el servidor
Figura 5: Tecnologías detectadas en el servidor

Con un WordPress delante, toca descubrir qué hay publicado

┌──(jaime㉿kali)-[~]└─$ dirsearch -u "http://blocky.htb"
200 - /phpmyadmin/ 200 - /plugins/ 200 - /wiki/ 302 - /wp-admin/ 200 - /wp-login.php 405 - /xmlrpc.php
Rutas descubiertas en el servidor
Figura 6: Rutas descubiertas en el servidor

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

┌──(jaime㉿kali)-[~]└─$ wpscan --url http://blocky.htb --api-token REDACTED -e vp,vt,tt,cb,dbe,u,m --plugins-detection aggressive
WPScan: XML-RPC y listado de subidas habilitados
Figura 7: WPScan: XML-RPC y listado de subidas habilitados
WordPress 4.8, con 109 vulnerabilidades conocidas
Figura 8: WordPress 4.8, con 109 vulnerabilidades conocidas
Tema desactualizado y sin plugins detectados
Figura 9: Tema desactualizado y sin plugins detectados

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

WPScan descubre al usuario notch
Figura 10: WPScan descubre al usuario notch

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

Usuario inexistente: «Invalid username»
Figura 11: Usuario inexistente: «Invalid username»
Con notch el mensaje cambia: el usuario existe
Figura 12: Con notch el mensaje cambia: el usuario existe

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

La carpetaplugins/ con BlockyCore.jar a la vista
Figura 13: La carpeta /plugins/ con BlockyCore.jar a la vista

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

┌──(jaime㉿kali)-[~]└─$ unzip BlockyCore.jar
┌──(jaime㉿kali)-[~]└─$ cd com/myfirstplugin
Archive: BlockyCore.jar inflating: META-INF/MANIFEST.MF inflating: com/myfirstplugin/BlockyCore.class
Contenido del plugin descomprimido
Figura 14: Contenido del plugin descomprimido

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

┌──(jaime㉿kali)-[~]└─$ strings BlockyCore.class
sqlHost sqlUser sqlPass localhost root 8YsqfCTnvxAUeduzjNSXe22 TODO get username !Welcome to the BlockyCraft!!!!!!!
La contraseña de la base de datos, en claro
Figura 15: La contraseña de la base de datos, en claro

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

phpMyAdmin rechaza al usuario notch
Figura 16: phpMyAdmin rechaza al usuario notch
El panel de WordPress también la rechaza
Figura 17: El panel de WordPress también la rechaza

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

┌──(jaime㉿kali)-[~]└─$ ssh notch@blocky
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64) notch@Blocky:~$
Sesión SSH (y FTP) con notch y la contraseña del plugin
Figura 18: Sesión SSH (y FTP) con notch y la contraseña del plugin

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

notch@Blocky:~$ cat user.txt
b26b9b37f6b3e398229c259fa1342b83
Flag de usuario
Figura 19: Flag de usuario

Escalada de privilegios

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

notch@Blocky:~$ sudo -l
User notch may run the following commands on Blocky: (ALL : ALL) ALL
notch puede ejecutar cualquier comando como root
Figura 20: notch puede ejecutar cualquier comando como root

(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

notch@Blocky:~$ sudo -i root@Blocky:~# whoami
root

Y con eso, control total de la máquina.

Flags

La de usuario estaba en el home de notch

notch@Blocky:~$ cat /home/notch/user.txt
b26b9b37f6b3e398229c259fa1342b83

Y la de root, ya como root, en su directorio

root@Blocky:~# cat /root/root.txt
0fd83fdddca1e58adf579827b81f7186
Flag de root
Figura 21: Flag de root

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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.