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

7 min read
Table of Contents

Máquina creada por: Oscar
Plataforma: The Hackers Labs
Sistema operativo: Linux
Dificultad: avanzada


Sobre este CTF

HexThink Silent Shadow es una máquina que diseñé para The Hackers Labs con una idea muy concreta: enseñar cómo varios fallos que, por separado, podrían parecer asumibles, terminan abriendo el sistema por completo cuando se conectan entre sí.

No planteé este laboratorio como una colección de trucos ni como una máquina pensada para impresionar por complejidad artificial. La construí para que cada fase tuviera una lógica clara y una lección detrás: una base de datos expuesta, una autenticación débil, información útil escondida donde no debería estar y privilegios delegados de forma peligrosa.

Más que un writeup de explotación, esta entrada quiere dejar claro qué quise enseñar al diseñar la máquina y por qué esa cadena tiene sentido fuera del laboratorio.


Información técnica

CampoValor
NombreHexThink Silent Shadow
IP objetivo10.0.2.16
ServiciosSSH (22), HTTP (80), MySQL (3306), servicio custom (9090)
Cadena principalacceso inseguro a MySQL → extracción de datos → esteganografía → autenticación en servicio 9090 → acceso SSH → abuso de sudo python3
Dificultadavanzada

Punto de partida: una superficie expuesta con varias puertas posibles

La máquina arranca mostrando varios servicios interesantes desde el primer escaneo:

Terminal window
sudo nmap -p- --open -sCV -Pn --min-rate 5000 10.0.2.16

Resultado relevante:

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.11
80/tcp open http Apache httpd 2.4.58 (Ubuntu)
3306/tcp open mysql MariaDB 5.5.5-10.11.11
9090/tcp open zeus-admin? (Protocolo no HTTP identificado)

Cuando diseñé este arranque, no quería que la máquina empujara a un único camino obvio. Quería que el atacante viera varias piezas expuestas y tuviera que decidir cuál merecía más atención.

La más importante no era el puerto raro. Era MySQL en red.


Lo primero que quería enseñar: una base de datos expuesta ya es un problema serio

En la parte web aparece un posible usuario:

ctf_user

Esa pista sirve para probar acceso a MySQL:

Terminal window
mysql -h 10.0.2.16 -u ctf_user --skip-ssl

La conexión se acepta sin contraseña.

Qué quería enseñar aquí

La primera lección de esta máquina es simple: una base de datos accesible desde red con autenticación débil o inexistente ya es una brecha de seguridad, aunque todavía no haya shell, RCE o privilegios elevados.

En muchos entornos se minusvalora este tipo de exposición porque “solo es la base de datos”. Precisamente por eso quise usarla como punto de entrada. Desde ahí ya puedes:

  • enumerar estructura interna
  • recuperar usuarios y hashes
  • leer contenido que no debía ser accesible
  • encontrar pistas operativas que acaban conectando con otros servicios

No hace falta explotar el motor si la propia configuración ya te deja entrar.


Lo segundo: no toda la información valiosa está en la tabla que parece más obvia

Una vez dentro, se enumeran bases de datos y tablas:

SHOW DATABASES;
USE ctf_db;
SHOW TABLES;
SELECT * FROM usuarios;

En usuarios aparecen hashes MD5. Se pueden crackear, pero en esta máquina no eran la clave real del compromiso.

La pieza importante estaba en otro sitio: la tabla noticias, donde había un mensaje y una imagen que invitaban a mirar “un poco más allá”.

Qué quería enseñar aquí

Quise romper una expectativa muy común: entrar en una base de datos, ver hashes y asumir que el camino bueno pasa por crackearlos y reutilizarlos.

A veces sí. Aquí no.

Aquí quería enseñar que la información verdaderamente útil no siempre está en la tabla de usuarios, sino en contenido auxiliar, comentarios, ficheros embebidos o piezas que el equipo considera “inofensivas”.

En la práctica real, eso pasa mucho. Los secretos no siempre viven donde deberían. A veces están en una nota, una imagen, un adjunto, una tabla de noticias o una ruta aparentemente secundaria.


Lo tercero: ocultar secretos no es protegerlos

Para inspeccionar la imagen a fondo, se descargó y se analizó con esteganografía:

Terminal window
stegseek imagen.jpg

Resultado:

  • passphrase: hello
  • archivo revelado: instrucciones.txt

Qué quería enseñar aquí

La idea aquí no era hacer un “reto de estego” por meter variedad. La intención era otra: mostrar que esconder información sensible no equivale a protegerla.

Muchas veces los equipos hacen esto con otro formato:

  • credenciales en imágenes de documentación
  • secretos en adjuntos internos
  • instrucciones operativas embebidas en recursos estáticos
  • datos “disimulados” pero no realmente protegidos

En esta máquina, la imagen sirve para enseñar justo eso: cuando alguien ya ha comprometido una capa, todo lo que parecía “oculto” deja de estarlo.


Lo cuarto: un servicio no estándar no deja de ser una superficie crítica

Con la información recuperada desde la imagen, se interactúa con el servicio del puerto 9090:

Terminal window
echo -e "LOGIN whisper\nKEY whisper9090" | nc 10.0.2.16 9090

Esa autenticación permite avanzar y obtener acceso útil para continuar la cadena.

Qué quería enseñar aquí

Aquí la lección es muy importante: los servicios custom o no estándar suelen recibir menos revisión que SSH, Apache o MySQL, y precisamente por eso son peligrosos.

No quería que el puerto 9090 fuera un simple adorno raro. Quería que representara un patrón real:

  • servicio interno con lógica propia
  • autenticación apoyada en secretos débiles
  • confianza excesiva en que “nadie sabrá cómo hablarle”

Ese tipo de backend auxiliar, protocolo casero o servicio administrativo aparece mucho más de lo que parece. Y cuando se conecta con otros sistemas, el riesgo escala muy rápido.


Lo quinto: cuando conectas piezas débiles, ya no necesitas una gran vulnerabilidad

Con las credenciales obtenidas, se accede por SSH como whisper:

Terminal window
ssh whisper@10.0.2.16

A partir de ahí, el sistema ya está comprometido a nivel de usuario.

Qué quería enseñar aquí

Hasta este punto de la máquina no hay una CVE espectacular, ni un exploit llamativo, ni una escalada rara. Y, sin embargo, el atacante ya está dentro.

Eso es deliberado.

La enseñanza aquí es que muchos compromisos reales no nacen de un gran fallo aislado, sino de varias debilidades medianas bien conectadas:

  • un dato útil expuesto en web
  • una base de datos accesible sin control suficiente
  • una imagen con información sensible
  • un servicio custom que acepta secretos débiles
  • una reutilización operativa que termina en acceso SSH

Eso es mucho más representativo de la realidad que una máquina basada solo en un exploit famoso.


La fase final: privilegios mal delegados siguen rompiendo sistemas

Una vez dentro como whisper, se revisan permisos sudo:

Terminal window
sudo -l

La vía de escalada permitía abusar de python3 con privilegios elevados:

Terminal window
sudo python3 -c 'import pty, os; os.execv("/bin/bash", ["bash"])'

Con eso se obtiene shell como root.

Qué quería enseñar aquí

La última lección de la máquina es una de las más importantes para entornos reales: no hace falta que un binario sea “peligroso” por sí mismo para convertirse en una vía de root. Basta con ejecutarlo con más privilegios de los que debería tener.

Aquí usé python3 precisamente porque es una herramienta común, legítima y presente en muchos sistemas. Eso refuerza el aprendizaje:

  • delegar sudo sobre herramientas interpretadas o muy versátiles es peligroso
  • conceder privilegios “por comodidad” suele abrir más de lo que se pretendía
  • la confianza excesiva en binarios comunes es un error recurrente

No quería una escalada exótica. Quería una escalada creíble.


Qué quería enseñar al diseñar HexThink Silent Shadow

Si tuviera que resumir el aprendizaje central de esta máquina, sería este:

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

Ese era el objetivo del diseño.

Resumen de la cadena

FaseQué enseñaError representado
Web inicialfiltrar contexto útilexposición innecesaria de información operativa
MySQL sin contraseñaacceso indebido a datos internosbase de datos expuesta y mal protegida
Tabla noticiasvalor de contenido auxiliarsecretos o pistas fuera de los lugares obvios
Esteganografíafalsa sensación de protecciónocultación sin seguridad real
Servicio 9090riesgo en servicios customprotocolos internos con autenticación débil
SSH como whisperimpacto de encadenar piezascompromiso por correlación de fallos
sudo python3abuso de privilegios legítimosdelegación peligrosa de permisos

Lo que me interesa al crear estos CTF

Al diseñar máquinas como HexThink Silent Shadow, no busco que el reto sea solo “llegar a root”. Busco que quien lo resuelva entienda por qué ha llegado ahí.

Me interesa construir laboratorios donde la cadena tenga lógica, donde cada paso responda a una mala decisión concreta y donde el aprendizaje sea reutilizable fuera del CTF.

Porque al final, ese es el valor real de crear estos escenarios: no demostrar que algo puede romperse, sino mostrar cómo se rompe cuando se normalizan prácticas inseguras.


Recursos y referencias

My avatar

¿Te ha resultado útil o interesante este post? Soy Oscar, Senior Platform Engineer y SRE, y en este blog comparto mis reflexiones, experimentos y retos técnicos sobre automatización, seguridad (especialmente el diseño de CTFs), optimización de rendimiento y el impacto de la tecnología en el desarrollo profesional.

Conecta y conversemos: LinkedIn Mi código y proyectos en: GitHub


More Posts