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
| Comando | Para que sirve |
|---|---|
diff archivo1 archivo2 | Compara 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
diffencuentra 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 [email protected] -p 2220Introduce la contrasena de bandit17 cuando te la pida. Veras algo como:
bandit17@bandit:~$
2. Comprueba que los archivos existen
ls -lLo 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.newLo 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 enpasswords.old(la anterior).---— separador visual de diff.> <cadena_de_~32_caracteres>— esta es la linea nueva enpasswords.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.newes 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 [email protected] -p 2220Cuando te pida la contrasena, pega <cadena_de_~32_caracteres> que obtuviste con diff.
Nota: el nivel 18 tiene una particularidad — el
.bashrcesta modificado para cerrar la sesion inmediatamente al conectarte. El nivel 18→19 te ensenara a lidiar con eso.