Bandit Nivel 15 a 16

Nivel del wargame Bandit de OverTheWire, un entorno de práctica legal y educativo para aprender a usar la terminal de Linux y conceptos de ciberseguridad.


Objetivo

Enviar la contraseña del nivel actual (bandit15) a localhost en el puerto 30001, que esta vez usa cifrado SSL/TLS. El servidor te responderá con la contraseña del siguiente nivel (bandit16).


Qué aprendes

Herramienta / ConceptoPara qué sirve aquí
opensslSuite de herramientas criptográficas en Linux
openssl s_clientCliente de línea de comandos para conectarse a servicios TLS/SSL
-connect host:puertoEspecifica el destino de la conexión TLS
-quietSuprime los mensajes de handshake y certificado (más limpio)
-ign_eofMantiene la conexión abierta aunque el stdin se cierre
TLS/SSLProtocolo de cifrado que protege la comunicación (el mismo que usa HTTPS)

Diferencia respecto al nivel anterior

El nivel 14 usaba nc (netcat) para conectarse a un puerto sin cifrar. Este nivel usa el mismo esquema (enviar la pass, recibir otra), pero el puerto 30001 exige que la conexión viaje cifrada con TLS. nc no entiende TLS, por eso aqui se usa openssl s_client.


Paso a paso

1. Conectarte a bandit15

Desde tu maquina local:

ssh bandit15@bandit.labs.overthewire.org -p 2220

Ingresa la contraseña de bandit15 cuando se la pida.


2. Averiguar la contraseña actual (bandit15)

Ya la tienes desde el nivel anterior, pero si la necesitas consultar:

cat /etc/bandit_pass/bandit15

Lo que veras:

<cadena_de_~32_caracteres>

Copia esa cadena. Es la contraseña de bandit15 y tambien la que debes enviar al servidor.


3. Conectarte al servicio TLS en el puerto 30001

openssl s_client -connect localhost:30001 -quiet

Lo que veras al ejecutarlo (el handshake TLS ocurre en fracciones de segundo; con -quiet se suprime gran parte del ruido):

depth=0 CN = SnakeOil
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN = SnakeOil
verify return:1

Puede aparecer algun mensaje de advertencia sobre el certificado (es autofirmado, no es de una CA publica — normal en un laboratorio). Eso no impide continuar.

El cursor queda esperando input. Escribe o pega la contraseña de bandit15 y presiona Enter:

<cadena_de_~32_caracteres>

Lo que veras a continuacion:

Correct!
<cadena_de_~32_caracteres>

closed

La segunda cadena (la que aparece tras “Correct!”) es la contraseña de bandit16. Copiala.


Variante: si el cursor no responde bien

Algunos terminales tienen problemas con el modo interactivo de s_client. Puedes usar -ign_eof ademas de -quiet:

openssl s_client -connect localhost:30001 -quiet -ign_eof

O pasar la contraseña directamente desde el archivo con un pipeline:

cat /etc/bandit_pass/bandit15 | openssl s_client -connect localhost:30001 -quiet

Lo que veras (equivalente a escribirla a mano, pero automatico):

depth=0 CN = SnakeOil
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN = SnakeOil
verify return:1
Correct!
<cadena_de_~32_caracteres>

closed

Por que funciona

Cuando un servicio escucha en un puerto TLS, el cliente y el servidor realizan un handshake (apretón de manos) antes de intercambiar datos:

  1. El cliente dice “quiero hablar TLS, estos son los cifrados que soporto”.
  2. El servidor responde con su certificado (que contiene su clave publica) y elige un cifrado.
  3. Ambos derivan una clave de sesion simetrica sin transmitirla por la red (protocolo Diffie-Hellman o similar).
  4. A partir de ahi, todo lo que se envia viaja cifrado.

openssl s_client gestiona todo ese handshake automaticamente. Una vez establecido el tunel, funciona igual que nc: lees del stdin del usuario y escribes al socket, o lees del socket y escribes al stdout. Por eso puedes pegarle la contraseña como texto plano — el cifrado ocurre por debajo, transparente.

La opcion -quiet elimina el volcado del certificado y los mensajes de estado del handshake, dejando solo los datos del aplicacion.


Errores comunes

SintomaCausa probableSolucion
Connection refusedPuerto o host incorrectoConfirma localhost:30001
nc: invalid option -- 'l' o conexion sin respuesta con ncIntentaste usar nc en un puerto TLSUsa openssl s_client
El cursor se queda colgado sin mostrar “Correct!”Pegaste la contraseña con un espacio o salto de linea extraAsegurate de no copiar espacios al final
verify error:num=18:self-signed certificateEl certificado del servidor es autofirmado (no firmado por CA oficial)Es normal en el laboratorio; la conexion funciona igualmente
DONE o closed aparece antes de que puedas escribir-ign_eof faltante y el stdin se cerro antes de tiempoAñade -ign_eof o usa el pipeline con cat

Pasar al siguiente nivel

Con la contraseña obtenida (la cadena que aparecio tras “Correct!”), conectate como bandit16 desde tu maquina local:

ssh bandit16@bandit.labs.overthewire.org -p 2220

Pega la contraseña cuando se la pida.

Pagina oficial del nivel: https://overthewire.org/wargames/bandit/bandit16.html


Conexiones

  • 00_README — indice de todos los niveles Bandit
  • MOC_Ciberseguridad — mapa de contenido de ciberseguridad
  • openssl s_client es la herramienta base para depurar cualquier servicio HTTPS/IMAPS/SMTPS desde la terminal — util fuera del laboratorio
  • El concepto de handshake TLS conecta con como funciona HTTPS en el navegador