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.
| Fase | Qué enseña | Error que representa |
|---|---|---|
| Web inicial | Filtra contexto útil | Información operativa expuesta |
| MySQL sin contraseña | Acceso indebido a datos internos | Base de datos expuesta y mal protegida |
| Tabla noticias | El contenido auxiliar tiene valor | Secretos fuera de los sitios obvios |
| Esteganografía | Esconder no es proteger | Ocultación sin seguridad detrás |
| Servicio 9090 | Un servicio custom también es superficie | Protocolos internos con autenticación débil |
| SSH como whisper | Encadenar piezas medianas basta | Compromiso por correlación de fallos |
| sudo python3 | Un binario legítimo escala si se delega mal | Delegació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.