Bandit Nivel 13 a 14

Nivel oficial: https://overthewire.org/wargames/bandit/bandit14.html

Este nivel introduce uno de los conceptos más importantes de la seguridad en sistemas Linux: la autenticación SSH por clave privada. En lugar de una contraseña, usarás un archivo especial (una clave) para entrar como otro usuario (bandit14) y leer su contraseña.

Cambio reciente de OverTheWire: el método clásico (ssh ... bandit14@localhost) ya no funciona porque ahora bloquean conectarse a localhost:2220 desde dentro del servidor. Hay que hacerlo desde tu propia máquina (ver Paso 3).


Objetivo

No hay una contraseña directa para bandit14 que puedas leer como bandit13. La contraseña está en /etc/bandit_pass/bandit14, pero ese archivo solo lo puede leer el usuario bandit14. Lo que sí tienes en tu directorio home es una clave SSH privada llamada sshkey.private. Esa clave te permite autenticarte como bandit14 sin saber su contraseña.


Qué aprendes

Concepto / ComandoPara qué sirve
ssh -i <archivo>Conectar por SSH usando una clave privada en lugar de contraseña
localhostDirección que apunta al mismo servidor donde estás
/etc/bandit_pass/Directorio del juego donde viven las contraseñas de cada nivel
catLeer el contenido de un archivo de texto
Clave SSH privadaCredencial criptográfica que sustituye a una contraseña

Concepto clave: autenticación por clave SSH

SSH puede autenticarte de dos maneras:

  1. Por contraseña: escribes la pass manualmente.
  2. Por par de claves: hay una clave privada (secreta, tuya) y una clave pública (en el servidor al que quieres entrar). Si la privada encaja con la pública, entras sin contraseña.

El flag -i de ssh significa identity file: le dices a SSH qué archivo usar como clave privada.


Paso a paso

1. Conectarte al nivel 13

Desde tu máquina local:

ssh [email protected] -p 2220

Usa la contraseña que obtuviste al completar el nivel 12. Verás algo como:

bandit13@bandit:~$

2. Ver qué hay en el directorio home

ls -la

Salida esperada:

total 24
drwxr-xr-x  2 root     root     4096 Apr 23 18:04 .
drwxr-xr-x 70 root     root     4096 Apr 23 18:04 ..
-rw-r--r--  1 root     root      220 Mar 31  2024 .bash_logout
-rw-r--r--  1 root     root     3526 Mar 31  2024 .bashrc
-rw-r--r--  1 root     root      807 Mar 31  2024 .profile
-rw-r-----  1 bandit14 bandit13 1679 Apr 23 18:04 sshkey.private

El archivo sshkey.private pertenece a bandit14 (propietario) y al grupo bandit13 (tú puedes leerlo, pero no modificarlo). Es una clave SSH privada RSA.

3. Conectarte como bandit14 usando la clave

El método clásico ssh -i sshkey.private bandit14@localhost -p 2220 desde dentro del servidor ahora está BLOQUEADO: verás Connecting from localhost is blocked to conserve resources. Hay que hacerlo desde tu propia máquina.

Método que funciona (desde tu portátil):

a) Estando dentro como bandit13, muestra la clave y cópiala ENTERA (desde -----BEGIN ... PRIVATE KEY----- hasta -----END ... PRIVATE KEY-----):

cat sshkey.private

b) En otra terminal de tu portátil (no la del juego), guárdala en un archivo y protégela (SSH rechaza claves con permisos abiertos):

nano sshkey.private      # pega la clave, guarda (Ctrl+O, Enter, Ctrl+X)
chmod 600 sshkey.private

c) Conéctate como bandit14 al hostname real (no localhost) — al venir de fuera no está bloqueado:

ssh -i sshkey.private [email protected] -p 2220

Si la clave es válida, entras sin contraseña:

bandit14@bandit:~$

Ya eres bandit14.

Atajo: a veces basta con usar el hostname real en vez de localhost desde dentro del propio servidor (ssh -i sshkey.private [email protected] -p 2220), si el firewall interno permite la salida. Si no, usa el método a-b-c desde tu portátil, que siempre va.

4. Leer la contraseña del nivel 14

cat /etc/bandit_pass/bandit14

Salida:

<cadena_de_~32_caracteres>

Esa cadena es la contraseña de bandit14. Cópiala: la necesitarás para el nivel 14→15.


Por qué funciona

El archivo sshkey.private es la mitad privada de un par de claves RSA. La mitad pública ya está registrada en el servidor dentro del archivo ~/.ssh/authorized_keys del usuario bandit14. Cuando ejecutas ssh -i sshkey.private bandit14@<servidor>, el proceso es:

  1. Tu cliente SSH presenta la clave privada (sin enviarla, solo demuestra que la tiene mediante criptografía).
  2. El servidor comprueba si la clave pública correspondiente está en authorized_keys de bandit14.
  3. Si coincide, te autentica sin necesitar contraseña.

El directorio /etc/bandit_pass/ contiene un archivo por cada nivel, con permisos estrictos: solo el usuario propietario puede leerlo. Por eso bandit13 no puede leer el archivo de bandit14 directamente, pero una vez que eres bandit14, sí puedes.


Errores comunes

WARNING: UNPROTECTED PRIVATE KEY FILE! SSH rechaza claves privadas con permisos demasiado abiertos. Si ves este error, es porque el archivo tiene permisos que permiten que otros lo lean. Solución:

chmod 600 sshkey.private

En este nivel concreto el juego ya tiene los permisos correctos (lectura solo para el grupo), pero en tu vida real siempre protege tus claves con chmod 600.

Permission denied (publickey) Significa que la clave no coincide con ninguna entrada en authorized_keys del usuario destino, o que especificaste el archivo equivocado. Comprueba que el nombre del archivo y el usuario sean correctos.

Olvidar el flag -p 2220 El servidor de Bandit no usa el puerto SSH estándar (22), sino el 2220. Sin -p 2220 la conexión fallará o se conectará a otro servicio.

Intentar leer /etc/bandit_pass/bandit14 como bandit13 Dará Permission denied. El archivo tiene permisos r-------- para el usuario bandit14. Debes autenticarte primero como ese usuario.

Connecting from localhost is blocked to conserve resources / no authentication methods enabled Cambio reciente de OverTheWire: ya NO puedes hacer ssh ... @localhost desde dentro del servidor. Solución: ejecuta el ssh -i desde tu propia máquina apuntando al hostname real (bandit.labs.overthewire.org), copiando antes la clave con cat sshkey.private (ver Paso 3). El aviso Could not create directory '/home/bandit13/.ssh' es inofensivo (no puedes escribir en el home).


Pasar al siguiente nivel

Una vez que tienes la contraseña de bandit14 (obtenida con cat /etc/bandit_pass/bandit14), sal de ambas sesiones SSH y conéctate al nivel 14:

ssh [email protected] -p 2220

Cuando te pida contraseña, pega la cadena que copiaste de /etc/bandit_pass/bandit14.


Conexiones