Funnel — HTB Start Point

Dificultad: Very Easy · SO: Linux · Tema: FTP anónimo → OSINT interno → SSH tunnel a PostgreSQL en Docker

Ciclo de enumeración

El orden es la clave de esta profesión. Mi ciclo:

1. Nmap básico     -> Identificar puertas abiertas
2. Nmap scripts    -> Extraer información de cada servicio
3. UDP scan        -> Descartar vectores ocultos
4. Nmap completo   -> Confirmar que no hay nada escondido
5. Conexión manual -> Verificar hallazgos in-situ

Reconocimiento

nmap -sV <IP>

Dos vectores: vsFTPd como primer candidato y SSH abierto, como cualquier servidor Linux.

nmap

Antes de ir por la flag, investigo el puerto 22 a fondo — no se trata de hacer solo los deberes que dan la flag, sino de investigación que dé dividendos:

nmap -p 22 --script ssh2-enum-algos,ssh-hostkey <IP>
Dato ¿Qué significa? ¿Por qué importa?
4ubuntu0.5 Parche aplicado Sin exploits CVE directos
3072 bit RSA Key fuerte No atacamos la criptografía
ED25519 Algoritmo moderno El admin configura SSH bien

Verificación de puertos ocultos (TCP completo + UDP top 100):

nmap -p- -sV -sC <IP>
nmap -sU --top-ports 100 <IP>

udp

Nada nuevo, pero hay que ser curiosos: el reconocimiento pasivo evita desperdiciar vectores y ser detectado.

Enumeración FTP

Login anónimo directo y listado del directorio compartido:

ftp <IP>   # anonymous / anonymous
ls         # -> mail_backup

ftp

Me traigo los archivos sin problemas, como un sysadmin pecho plateado:

descarga

Análisis de los archivos

Dentro hay una política de contraseñas que completa parte del recorrido, y una comunicación corporativa con información sensible: la lista de usuarios. La pregunta clave: quién no cambió su password por defecto.

Atención especial para quienes administran contraseñas en texto plano: usen un gestor de contraseñas. Y cambien las credenciales apenas entren — mejor aún, MFA: algo que poseo, algo que sé, algo intransferible.

credenciales

Acceso SSH

Con el usuario identificado y su contraseña débil, entramos:

┌──────────────┐   ┌─────────────┐   ┌──────────────┐   ┌────────────┐
│ FTP abierto  │ → │ mail_backup │ → │ Credenciales │ → │ Acceso SSH │
│   (anon)     │   │ (archivos)  │   │  (.uinfo)    │   │            │
└──────────────┘   └─────────────┘   └──────────────┘   └────────────┘
 Enumeración        Exfiltración        Análisis          Explotación

Post-explotación

Radiografía completa del usuario antes de escalar:

id; whoami; groups          # alcance del usuario
pwd; hostname; uname -a     # contexto del sistema
cat /etc/passwd             # inventario de usuarios
find / -perm -4000 -type f 2>/dev/null    # binarios SUID
getcap -r / 2>/dev/null                   # capabilities
searchsploit gstreamer cap_net_admin      # exploits candidatos

Los exploits encontrados requerían condiciones muy específicas — camino descartado. Pero la exploración dejó un hallazgo forense interesante: el historial de bash es un symlink directo a /dev/null. Eso no es práctica de usuario estándar: alguien está borrando sus huellas mientras trabaja con ese usuario.

historial

Escalada vía túnel SSH

¿Qué escucha solo en localhost?

ss -tulpn | grep 127.0.0.1

Puerto 5432: PostgreSQL corriendo dentro de un contenedor Docker — por eso el servicio no aparece listado como unidad del sistema, y con este usuario no llego al contenedor.

Creo el túnel desde mi máquina host:

ssh -L 5432:127.0.0.1:5432 christine@<IP>
psql -h 127.0.0.1 -U christine -p 5432

túnel

Observen la progresión de accesos: de FTP pasamos a SSH, y de SSH creamos un túnel para alcanzar el motor de base de datos.

Flag

Listo los usuarios de la base — el rol secrets llama la atención. Cambio de sesión con ese usuario y listo las tablas del esquema público:

tablas

Hay una tabla guardada por Christine que es nuestra bandera:

flag

Lecciones