Introducción y Desafío
El desafío en este nivel consiste en encontrar un servicio cifrado (SSL/TLS) que escucha en un puerto dentro del amplio rango 31000 a 32000 en localhost. El objetivo es conectarnos al puerto correcto y enviarle la contraseña de Bandit16 para que nos devuelva la contraseña del siguiente nivel.
nmap | Escaneo de Puertos
Nmap es una herramienta versátil y poderosa para escanear redes, descubrir hosts activos, puertos abiertos y servicios en ejecución. Se usa ampliamente en seguridad informática y pentesting para reconocimiento y auditoría de redes. Nmap envía paquetes a diferentes puertos de un objetivo para detectar cuáles están abiertos, filtrados o cerrados, incluso puede identificar el tipo de servicio y versión que escucha en esos puertos.
La flag -p permite especificar un rango o lista de puertos a escanear, por ejemplo, -p 31000-32000 para analizar solo puertos dentro de ese rango en el host local (localhost). Esto es útil para enfocar el escaneo en puertos altos o poco comunes, típicos de servicios efímeros o personalizados, evitando un análisis completo para ganar velocidad y controles finos.
OpenSSL y parámetro -quiet
Las opciones -quiet e -ign_eof son cruciales para superar los desafíos específicos de este nivel:
-
openssl s_client -connect localhost:31790:- Inicia una conexión de cliente SSL/TLS al puerto
31790del host local. Este puerto es el que se identifica como el servicio SSL/TLS correcto que contiene la clave (otros puertos como31518podrían ser SSL/TLS pero simplemente rebotan la entrada). - Si un servicio no utiliza SSL/TLS, la conexión fallará inmediatamente.
- Inicia una conexión de cliente SSL/TLS al puerto
-
-quiet: Suprime la salida de diagnóstico detallada, incluyendo la información del certificado del servidor y la cadena de certificados. Esto es útil porque reduce el ruido y, en algunas versiones, ayuda a evitar que la salida de comandos internos comoKEYUPDATEbloquee la entrada del usuario. -
-ign_eof(Ignore End Of File): Por defecto,openssl s_clienten modo interactivo sale de la conexión cuando encuentra el fin de archivo (EOF) en su entrada (lo que sucede inmediatamente al usarechoocata través de un pipe). Esta opción inhibe el cierre de la conexión cuando se alcanza el EOF en la entrada. Esto permite que el cliente permanezca conectado y que la contraseña, enviada a través deecho <PASSWORD> |, sea procesada por el servidor, el cual luego envía la clave del Nivel 17.
Nota: Al usar
-quiet, el clienteopenssl s_clientya no interpreta las letrasQ,R,K,k(comandos conectados) como comandos especiales, lo que también resuelve el problema de que el servicio envíe mensajes como “KEYUPDATE” o “RENEGOTIATING” que podrían bloquear la entrada normal.
Comandos Clave
-
ssh: Comando para conectarse de forma segura a un servidor remoto mediante el protocolo Secure Shell (SSH).- Parámetros usados:
-p [puerto]: Especifica el puerto remoto (ej:-p 2220).usuario@host: Define el usuario y el servidor al que te conectas.
- Parámetros usados:
-
nmap: Fundamental en las fases de reconocimiento y auditoría básica.- Parámetros usados:
-p [puertos]: Selecciona puertos específicos (ej:-p 80,443o-p 30001-32000).localhost: Se usa para escanear el propio sistema local.
- Parámetros usados:
-
openssl: Toolkit de línea de comandos para trabajar con TLS/SSL y criptografía.- Subcomando clave para la tarea:
s_client -connect host:puerto: Actúa como un cliente TLS/SSL para establecer una conexión segura. Es esencial para probar el handshake, ver el certificado y enviar datos cifrados.-quiet: Suprime la salida de diagnóstico detallada
- Subcomando clave para la tarea:
Solución Paso a Paso
1. Conexión Inicial por SSH
Nos conectamos al servidor como el usuario bandit16.
ssh -p 2220 bandit16@bandit.labs.overthewire.org 
2. Escaneo del Rango de Puertos
Dado que los puerto con los que nos vamos a conectar son desconocido, usamos nmap para escanear rápidamente y listar los servicios activos en los puertos en rangos del 31000 al 32000.
nmap -p 31000-32000 localhost
Puertos Abiertos Encontrados: Cinco puertos fueron identificados como open. ¡Ya redujimos el problema de 1000 opciones a solo 5!
PORT STATE SERVICE
31046/tcp open unknown
31518/tcp open unknown
31691/tcp open unknown
31790/tcp open unknown
31960/tcp open unknown3. Identificación del Puerto SSL/TLS
Ahora toca diferenciar: ¿cuál de estos cinco usa SSL/TLS? Un puerto open no significa nada hasta que sabes qué servicio hay detrás. Usamos openssl s_client para intentar la conexión SSL con cada uno.
openssl s_client localhost:31046
# Repetir con todos los puertos para encontrar la conexión cifrada.- Puertos NO SSL/TLS (31046, 31691, 31960): La conexión fallará, se cerrará inmediatamente o no mostrará la secuencia de handshake y certificado.
- Puertos SÍ SSL/TLS (31518 y 31790): Estos puertos establecen una sesión SSL y muestran el certificado en pantalla. ¡Ya tenemos dos candidatos!

Nota: Si tienes un script de Bash para automatizar esta verificación, ¡métele! Es mucho más eficiente que ir probando uno por uno.
4. Corrección del Error “KEYUPDATE”
Al intentar ingresar la contraseña en los puertos SSL, el servicio nos trolea respondiendo con mensajes como KEYUPDATE o RENEGOTIATING, impidiendo la interacción normal.
Este es un bug o comportamiento intencional que OverTheWire nos pide resolver leyendo el manual. ¡Clásico!
Helpful note: Getting “DONE”, “RENEGOTIATING” or “KEYUPDATE”? Read the “CONNECTED COMMANDS” section in the manpage.

Al revisar el manual de openssl s_client nos indican que el flag “-quiet” es la clave:
man openssl s_client
El manual dice: -quiet: inhibit printing of sessions and certificate information. This implicitly turns on -ign_eof as well.
En español y sin rodeos: Usar -quiet no solo limpia la pantalla de la información del certificado, sino que también activa -ign_eof, permitiéndote escribir y enviar datos inmediatamente después de que se establece la conexión SSL. ¡Justo lo que necesitamos!
Incluso una simple busqueda en google nos puede dar esta información si el manual nos está dando problemas. Gracias a este usuario de Reddit por compartir la solución.
5. Envío de la Contraseña
Teniendo el parámetro -quiet en mano, probamos los dos puertos candidatos (31518 y 31790).
Intento en el puerto 31518:
openssl s_client -connect localhost:31518 -quiet
# Ingresar la contraseña de Bandit16 aquíSolo nos devuelve la respuesta. ¡Fallo de servicio!

Intento en el puerto 31790 (Éxito):
openssl s_client -quiet localhost:31790
# Ingresar la contraseña de Bandit16 aquí¡Boom! Al enviar la contraseña de Bandit16, el servicio responde con la llave privada SSH, que es la contraseña de Bandit17.
Solo vamos a copiar las información para luego hacer las configuraciones de permisos necesarios.
Nivel pasado, crack.
Lecturas Recomendadas
Expande la sección con recursos clave para profundizar en nmap, openssl y conceptos SSL/TLS.
- ¿Qué es OpenSSL? ¿Cómo funciona OpenSSL?: Explicación completa del toolkit OpenSSL, su rol en TLS/SSL y casos de uso en pentesting.
- Nmap Network Scanning Guide: Manual oficial con flags avanzados como
-sV,-sCy escaneo de rangos para reconnaissance. - OpenSSL sclient manpage: Detalles técnicos de
-quiet,-igneofy comandos CONNECTED para debugging TLS.