Introducción y Desafío
Este nivel prueba tu capacidad para detectar cambios sutiles en archivos mediante herramientas de comparación. Con la llave SSH privada obtenida en Bandit Level 16, accede como bandit17 y usa el comando diff para identificar la única diferencia entre dos listas de contraseñas, passwords.new y passwords.old.
El enfoque clave es la precisión: Un solo cambio revela la solución sin necesidad de revisar manualmente miles de líneas.
Conceptos Clave
El comando diff compara archivos línea por línea y resalta diferencias específicas, ideal para detectar cambios en listas grandes como contraseñas o configuraciones.
La mentalidad de hacker aquí radica en el pensamiento lateral: Ante dos archivos similares, no vas a revisar manualmente miles de líneas, sino que usas la herramienta precisa (diff) para revelar la única modificación en segundos.
Disclaimer Ético
Este material ha sido creado exclusivamente con fines educativos y de investigación. El uso indebido de esta información para atacar objetivos sin autorización explícita es ilegal y contraviene los principios del hacking ético.
Antes de continuar: Lee mi nota “Ética en la Ciberseguridad” para más información.
Sintaxis General del Comando diff
La sintaxis básica es la siguiente:
diff [OPCIONES] ARCHIVO1 ARCHIVO2O, si quieres comparar directorios:
diff [OPCIONES] DIRECTORIO1 DIRECTORIO2Argumentos Principales:
ARCHIVO1: El primer archivo que se va a comparar (a menudo considerado el “original”).ARCHIVO2: El segundo archivo que se va a comparar (la versión “modificada”).DIRECTORIO1: El primer directorio a comparar.DIRECTORIO2: El segundo directorio a comparar.
Casos de uso comunes: Validar actualizaciones de software (comparar configs antes/después), debugging de scripts, auditorías de seguridad en logs, o desafíos CTF donde un solo byte cambiado es la clave.
Comandos Clave para este nivel.
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:
touch: Crea un archivo vacío.nano: Editor de texto en terminal.chmod: Cambia los permisos de un archivo (usado para asegurar la clave SSH).cat: Muestra el contenido de un archivo.diff: Muestra diferencias entre dos archivos.
Solución Paso a Paso
1. Creación y configuración llave SSH bandit17
Nos conectamos al servidor como el usuario bandit17 usando la llave encontrada en Bandit Level 16. Primero creamos el archivo que almacenará la llave privada y se ajustan sus permisos:
touch bandit17.key
nano bandit17.key
chmod 600 bandit17.key
Aquí estoy usando nano, pero puedes emplear cualquier editor de texto que prefieras. Lo crucial es pegar la llave sin alterar ningún carácter y luego ajustar los permisos correctamente.
chmod 600 ARCHIVOsignifica que solo el propietario puede leer y escribir ese archivo, mientras que el grupo y el resto de usuarios no tienen ningún permiso sobre él.
2. Conexión a bandit17.
ssh -p 2220 bandit17@bandit.labs.overthewire.org

Asegúrate de que la llave quede idéntica en un fichero, por ejemplo bandit17.key o llaveotw (el nombre es libre), porque cualquier cambio en el texto o en el formato hará que el servidor la rechace.
3. Confirmamos la contraseña de nivel actual
cat /etc/bandit_pass/bandit17

Una vez dentro, es posible comprobar la contraseña actual del nivel.
4. Verificamos el contenido de los archivos
ls -l
cat passwords.new passwords.old

Usamos ls para verificar el contenido en el directorio home de bandit17. Encontramos dos listas: passwords.old y passwords.new. Vamos a relevar el contenido con cat para verificar la magnitud de lo que nos estamos enfrentando.
5. Comparativa de Archivos
diff passwords.old passwords.new
La salida de diff indica el número de línea donde hay una diferencia y muestra qué había en passwords.old y qué hay ahora en passwords.new. Por intuición, la nueva línea que aparece solo en passwords.new corresponde a la contraseña de bandit18.
6. Prueba de conexión con bandit18
Con la nueva contraseña identificada, se realiza una conexión SSH como bandit18.
ssh -p 2220 bandit18@bandit.labs.overthewire.org
Tras autenticarse, el servidor cierra la sesión mostrando un mensaje de despedida (“bye bye”) para bandit18.
Aquí entra de nuevo el pensamiento lateral: A primera vista podría parecer un error o que algo falló, pero al revisar la página se entiende que este comportamiento es intencional y forma parte del diseño del nivel. El equipo de OverTheWire quiere que confirmes la solución tanto desde la terminal como desde la interfaz web, reforzando la idea de que la salida inesperada de un sistema también puede ser una pista, no solo un fallo.

Lecturas recomendadas
- Documentación oficial de
diff(GNU diffutils) - Página de manual de
diffen Linux