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 / Concepto | Para qué sirve aquí |
|---|---|
openssl | Suite de herramientas criptográficas en Linux |
openssl s_client | Cliente de línea de comandos para conectarse a servicios TLS/SSL |
-connect host:puerto | Especifica el destino de la conexión TLS |
-quiet | Suprime los mensajes de handshake y certificado (más limpio) |
-ign_eof | Mantiene la conexión abierta aunque el stdin se cierre |
| TLS/SSL | Protocolo 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 2220Ingresa 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/bandit15Lo 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 -quietLo 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_eofO pasar la contraseña directamente desde el archivo con un pipeline:
cat /etc/bandit_pass/bandit15 | openssl s_client -connect localhost:30001 -quietLo 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:
- El cliente dice “quiero hablar TLS, estos son los cifrados que soporto”.
- El servidor responde con su certificado (que contiene su clave publica) y elige un cifrado.
- Ambos derivan una clave de sesion simetrica sin transmitirla por la red (protocolo Diffie-Hellman o similar).
- 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
| Sintoma | Causa probable | Solucion |
|---|---|---|
Connection refused | Puerto o host incorrecto | Confirma localhost:30001 |
nc: invalid option -- 'l' o conexion sin respuesta con nc | Intentaste usar nc en un puerto TLS | Usa openssl s_client |
| El cursor se queda colgado sin mostrar “Correct!” | Pegaste la contraseña con un espacio o salto de linea extra | Asegurate de no copiar espacios al final |
verify error:num=18:self-signed certificate | El 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 tiempo | Añ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 2220Pega 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_clientes 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