← Todas las entradas

HexThink Silent Shadow: lo que aprendí diseñando una cadena de compromiso entre base de datos, secretos ocultos y privilegios mal delegados

Varias debilidades medianas bien conectadas, de una base de datos abierta y un secreto en una imagen a un sudo sobre python3 que entrega root.

Avanzado · Linux
URL del reto: labs.thehackerslabs.com/machines/110


Por qué la diseñé

HexThink Silent Shadow enseña cómo varios fallos que, por separado, parecerían asumibles, terminan abriendo el sistema entero cuando se conectan. No lo planteé como una colección de trucos ni como una máquina para impresionar por complejidad. Cada fase tiene una lógica clara y una lección detrás, una base de datos expuesta, una autenticación débil, información escondida donde no debería y unos privilegios delegados de forma peligrosa.

La monté para dejar claro que la mayoría de compromisos nace de la suma de varias debilidades medianas bien conectadas, y no de un único gran fallo. Esa cadena tiene sentido fuera del laboratorio.


La máquina de un vistazo

Expone SSH, un Apache, un MySQL en red y un servicio propio en el puerto 9090. La cadena arranca en una base de datos accesible sin contraseña, sigue por un secreto escondido en una tabla que no es la obvia, pasa por una imagen con esteganografía y un servicio custom con autenticación floja, y remata con un sudo sobre python3 que entrega root.


Cómo la monté, paso a paso

Una base de datos abierta a la red

En la web dejé un usuario, ctf_user, que sirve para probar el MySQL, y ese MySQL acepta la conexión sin contraseña. Quería que la entrada fuera la base de datos, porque una base accesible desde red con autenticación débil ya es una brecha, aunque todavía no haya shell ni privilegios. Este tipo de exposición se minusvalora mucho porque es solo la base de datos, pero desde ahí ya se enumera estructura, se recuperan usuarios y hashes y se lee lo que no debía ser accesible.

El secreto fuera de la tabla obvia

Dentro hay una tabla usuarios con hashes MD5, que se pueden crackear pero no son el camino. La pieza buena la escondí en otra tabla, noticias, con un mensaje y una imagen que invitan a mirar más allá. Quería romper la expectativa de entrar en una base de datos, ver hashes y asumir que el camino pasa por crackearlos. La información útil muchas veces vive en contenido auxiliar, comentarios o ficheros embebidos que el equipo considera inofensivos.

La imagen que esconde, pero no protege

La imagen de la tabla lleva datos ocultos con esteganografía, protegidos con una passphrase floja, y dentro hay un fichero de instrucciones. Lo puse para enseñar que esconder información sensible no equivale a protegerla, no por meter variedad de estego. Los equipos hacen esto a menudo con credenciales en imágenes de documentación o secretos en adjuntos internos. En cuanto alguien compromete una capa, todo lo que parecía oculto deja de estarlo.

El servicio custom del puerto 9090

Con lo que sale de la imagen se habla con el servicio del 9090, que pide un login y una clave propios. Le puse ese protocolo casero a propósito, porque los servicios no estándar suelen recibir menos revisión que SSH, Apache o MySQL, y por eso son peligrosos. Representa un patrón muy común, un backend interno con lógica propia, autenticación apoyada en secretos débiles y la confianza excesiva en que nadie sabrá cómo hablarle.

El remate, un sudo sobre python3

Las credenciales del 9090 abren SSH como whisper, y hasta aquí no ha hecho falta ninguna CVE espectacular. La escalada la dejé en un sudo que permite ejecutar python3 con privilegios, y desde un intérprete lanzar una shell (sudo python3 -c 'import pty,os; os.execv("/bin/bash",["bash"])') entrega root. Elegí python3 porque es una herramienta común y legítima, y ese es el punto, delegar sudo sobre intérpretes muy versátiles abre mucho más de lo que se pretende. Buscaba una escalada creíble más que exótica.


Qué quería enseñar

El sistema cae por la suma de varias decisiones malas que se refuerzan entre sí, no por un único fallo crítico.

FaseQué enseñaError que representa
Web inicialFiltra contexto útilInformación operativa expuesta
MySQL sin contraseñaAcceso indebido a datos internosBase de datos expuesta y mal protegida
Tabla noticiasEl contenido auxiliar tiene valorSecretos fuera de los sitios obvios
EsteganografíaEsconder no es protegerOcultación sin seguridad detrás
Servicio 9090Un servicio custom también es superficieProtocolos internos con autenticación débil
SSH como whisperEncadenar piezas medianas bastaCompromiso por correlación de fallos
sudo python3Un binario legítimo escala si se delega malDelegación peligrosa de privilegios

Al diseñar máquinas así busco que quien lo resuelve entienda por qué ha llegado a root, no solo que llegue. Cada paso responde a una mala decisión concreta, y el aprendizaje sirve fuera del laboratorio, ver cómo se rompe un sistema cuando se normalizan prácticas inseguras.

ciberseguridadlaboratorioCTFescalada de privilegiosLinux