Bandit Nivel 17 a 18

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

Marco: OverTheWire Bandit es un wargame legal y educativo diseñado para aprender comandos de terminal y conceptos de seguridad Linux desde cero.


Objetivo

Dentro del home de bandit17 hay dos archivos: passwords.old y passwords.new. Cada uno contiene 100 lineas (posibles contrasenas). La contrasena de bandit18 es la unica linea que cambio entre los dos archivos. Hay que encontrar esa linea.


Que aprendes

Comando principal

ComandoPara que sirve
diff archivo1 archivo2Compara dos archivos linea a linea y muestra solo las diferencias

Conceptos clave

  • diff (difference): herramienta clasica de Unix para encontrar diferencias entre dos ficheros de texto. Imprescindible en desarrollo de software, administracion de sistemas y, como ves aqui, en CTFs y wargames.
  • Formato de salida de diff: cuando diff encuentra una diferencia, la presenta con un marcador:
    • < significa “esta linea solo esta en el primer archivo” (el de la izquierda, passwords.old)
    • > significa “esta linea solo esta en el segundo archivo” (el de la derecha, passwords.new)
    • Los numeros antes de las letras indican en que linea ocurre el cambio (ej. 42c42 = la linea 42 cambio)

Paso a paso

1. Conéctate como bandit17

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

Introduce la contrasena de bandit17 cuando te la pida. Veras algo como:

bandit17@bandit:~$

2. Comprueba que los archivos existen

ls -l

Lo que veras:

-rw-r----- 1 bandit18 bandit17 3300 Apr 23 18:20 passwords.new
-rw-r----- 1 bandit18 bandit17 3300 Apr 23 18:20 passwords.old

Dos archivos del mismo tamano (3300 bytes = 100 lineas de 32 caracteres + salto de linea cada una). Solo una linea difiere entre ellos.

3. Compara los dos archivos con diff

diff passwords.old passwords.new

Lo que veras (ejemplo con placeholder):

42c42
< <contrasena>
---
> <cadena_de_~32_caracteres>

Interpretacion linea a linea:

  • 42c42 — la linea 42 ha cambiado (c = change) entre el archivo 1 y el archivo 2.
  • < <contrasena> — esta era la contrasena en passwords.old (la anterior).
  • --- — separador visual de diff.
  • > <cadena_de_~32_caracteres> — esta es la linea nueva en passwords.new. Esta cadena es la contrasena de bandit18. Copiala.

La linea marcada con > es siempre la que pertenece al segundo archivo (el que pasas como segundo argumento). En este caso, passwords.new es el segundo argumento, asi que > = contrasena nueva = la que buscas.


Por que funciona

diff lee los dos archivos y aplica el algoritmo LCS (Longest Common Subsequence) para encontrar el minimo conjunto de cambios que transforma un archivo en el otro. Como solo ha cambiado una linea, la salida es minima: una sola diferencia con su numero de linea.

Este enfoque es identico al que usa git diff para mostrarte que cambiaste en tu codigo antes de un commit. El formato es el mismo: + para lineas nuevas, - para lineas eliminadas (aunque diff clasico usa > y < en vez de + y -).


Errores comunes

Confundir el orden de los argumentos

Si ejecutas diff passwords.new passwords.old (orden invertido), la linea marcada con > sera la contrasena vieja, no la nueva. Siempre coloca passwords.old primero y passwords.new segundo para que > apunte a lo nuevo.

Copiar la linea con el >

La linea en la terminal se vera como > <cadena_de_32_caracteres>. El caracter > y el espacio que le sigue NO son parte de la contrasena; copia solo la cadena alfanumerica.

No ver ninguna diferencia

Si diff no imprime nada, los archivos son identicos (no deberia ocurrir en este nivel). Si eso pasa, comprueba que estas en el directorio home correcto con pwd y ls.


Pasar al siguiente nivel

Una vez tengas la cadena que aparece tras >, abre una nueva terminal y conéctate como bandit18:

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

Cuando te pida la contrasena, pega <cadena_de_~32_caracteres> que obtuviste con diff.

Nota: el nivel 18 tiene una particularidad — el .bashrc esta modificado para cerrar la sesion inmediatamente al conectarte. El nivel 1819 te ensenara a lidiar con eso.


Conexiones