Bandit Nivel 11 a 12
Juego legal y educativo de terminal/Linux: OverTheWire Bandit.
Objetivo
Encontrar la contraseña del siguiente nivel (bandit12) dentro del archivo data.txt. El contenido está cifrado con ROT13: un cifrado de sustitución clásico donde cada letra del alfabeto se rota 13 posiciones hacia adelante.
Qué aprendes
Comandos
| Comando | Para qué sirve |
|---|---|
tr | Traduce (sustituye) caracteres de la entrada estándar según una tabla que tú defines |
cat | Lee el contenido de un archivo y lo vuelca a la salida estándar |
| (pipe) | Encadena la salida de un comando como entrada del siguiente |
Conceptos
- ROT13: cifrado César con desplazamiento fijo de 13 posiciones. Como el alfabeto inglés tiene 26 letras, aplicarlo dos veces devuelve el texto original. No es seguro como cifrado real; se usa para ofuscar texto (spoilers, etc.).
- Cifrado por sustitución: cada letra se reemplaza por otra de forma sistemática. ROT13 es el caso más simple.
tr(translate): lee carácter a carácter y sustituye según los rangos que le pasas. No modifica el archivo original; trabaja sobre flujos (stdin → stdout).- Pipeline: la barra vertical
|conecta la salida decatcon la entrada detr, sin necesidad de archivos intermedios.
Paso a paso
1. Conectarse al nivel 11
Usa la contraseña que obtuviste en el nivel anterior (bandit11):
ssh [email protected] -p 2220Verás el banner de bienvenida de OverTheWire y luego el prompt:
bandit11@bandit:~$
2. Verificar que data.txt existe
ls -lhLo que verás:
-rw-r----- 1 bandit12 bandit11 49 Apr 23 19:04 data.txt
El archivo pertenece a bandit12 (dueño) pero el grupo bandit11 puede leerlo — eso es lo normal en Bandit.
3. Ver el contenido cifrado
cat data.txtLo que verás (texto ilegible, ROT13 activo):
Gur cnffjbeq vf <pnqran_ra_ebg13_eryyrann_pbzb_rzcyrb_qr_cynprubyqre>
No es basura aleatoria: es inglés válido con cada letra desplazada 13 posiciones. Se puede leer pero no entender directamente.
4. Descifrar con tr
cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'Lo que verás (texto descifrado, en inglés):
The password is <cadena_de_~32_caracteres>
Esa cadena de ~32 caracteres es la contraseña de bandit12. Copiala.
Por qué funciona
El comando tr 'A-Za-z' 'N-ZA-Mn-za-m' construye una tabla de sustitución:
Entrada: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Salida: N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
Y lo mismo para minúsculas. Lo que hace exactamente:
'A-Za-z'— rango de caracteres que pueden llegar como entrada (todas las letras, mayúsculas y minúsculas).'N-ZA-Mn-za-m'— para cada letra de entrada, la letra correspondiente en este segundo rango. La truco es queN-Zson las 13 letras finales del alfabeto mayúscula, yA-Mlas 13 primeras, concatenadas. Esto logra el desplazamiento de 13.
Como ROT13 es su propio inverso (26 / 2 = 13), el mismo comando tanto cifra como descifra.
Alternativa con read en una sola línea sin pipe
tr 'A-Za-z' 'N-ZA-Mn-za-m' < data.txtMismo resultado. La redirección < alimenta tr desde el archivo directamente, sin pasar por cat. Ambas formas son correctas.
Errores comunes
| Error | Causa | Solución |
|---|---|---|
tr: extra operand | Espacios o comillas mal escritas en el segundo argumento | Asegurarse de que los dos rangos van entre comillas simples separadas: 'A-Za-z' y 'N-ZA-Mn-za-m' |
| El output sigue siendo ilegible | Pusiste el mismo rango en los dos argumentos o los intercambiaste | Revisa que el primer argumento sea 'A-Za-z' y el segundo 'N-ZA-Mn-za-m' |
No such file or directory | Estás en el directorio incorrecto | Ejecuta cd ~ para volver al home de bandit11 |
| La contraseña no funciona en el siguiente nivel | Copiaste espacios o el salto de línea final | Copia solo la cadena de caracteres, sin espacios alrededor |
Pasar al siguiente nivel
Con la contraseña obtenida (la <cadena_de_~32_caracteres> que apareció al descifrar), conéctate a bandit12:
ssh [email protected] -p 2220Cuando pida la password, pega la cadena copiada. Verás el prompt:
bandit12@bandit:~$
Ya estás en el nivel 12.