Bandit Nivel 21 a 22
Nivel del wargame OverTheWire Bandit — juego legal y educativo de terminal/Linux orientado a aprender seguridad ofensiva desde cero.
Objetivo
Conectarte como bandit21 y encontrar la contraseña de bandit22. La pista del nivel dice que hay un cron job ejecutándose periódicamente. Tu misión: descubrir qué hace ese job y aprovecharte de ello.
Qué aprendes
| Comando / Concepto | Para qué sirve |
|---|---|
cron | Planificador de tareas automáticas en Linux |
/etc/cron.d/ | Carpeta donde los programas depositan sus reglas de cron |
cat /etc/cron.d/<archivo> | Leer una regla cron para saber qué script ejecuta y cuándo |
| Leer un script bash | Entender qué hace un programa antes de ejecutarlo |
/tmp/ | Directorio temporal de mundo-legible en Linux |
Conceptos clave antes de empezar
Cron es el “reloj despertador” de Linux. Permite que un comando o script se ejecute automáticamente a intervalos fijos (cada minuto, cada hora, al arrancar el sistema, etc.) sin que nadie lo lance a mano.
/etc/cron.d/ es una carpeta especial donde los paquetes y administradores depositan archivos con reglas cron en formato estándar. Cada línea de esos archivos sigue el patrón:
minuto hora dia-mes mes dia-semana usuario comando
Por ejemplo, * * * * * bandit22 /usr/bin/cronjob_bandit22.sh significa: “ejecuta ese script como el usuario bandit22 cada minuto, todos los días”.
/tmp/ es un directorio temporal que cualquier usuario puede leer (salvo que el archivo tenga permisos restrictivos). Es un lugar habitual para que los scripts dejen resultados intermedios.
Paso a paso
1. Conéctate como bandit21
ssh bandit21@bandit.labs.overthewire.org -p 2220Introduce la contraseña que obtuviste en el nivel anterior cuando te la pida.
2. Explora el directorio de cron
ls /etc/cron.d/Verás algo como:
cronjob_bandit22 cronjob_bandit23 cronjob_bandit24 e2scrub_all otw-tmp sysstat
Hay varios jobs. El que te interesa es cronjob_bandit22.
3. Lee la regla de cron
cat /etc/cron.d/cronjob_bandit22Verás:
@reboot bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
Lo que esto dice:
@reboot— ejecuta el script cuando arranca el sistema.* * * * *— ejecuta el script cada minuto.bandit22— lo ejecuta con los permisos de bandit22 (es decir, puede leer archivos de ese usuario)./usr/bin/cronjob_bandit22.sh— ese es el script que se lanza.&> /dev/null— redirige toda la salida (stdout y stderr) a la papelera; el sistema no muestra nada en pantalla.
4. Lee el script para entender qué hace
cat /usr/bin/cronjob_bandit22.shVerás:
#!/bin/bash
chmod 644 /tmp/<contrasena>
cat /etc/bandit_pass/bandit22 > /tmp/<contrasena>Desglose línea a línea:
chmod 644 /tmp/<contrasena>— ajusta los permisos del archivo temporal a644, lo que significa que cualquier usuario puede leerlo (propietario: leer+escribir; grupo y otros: solo leer).cat /etc/bandit_pass/bandit22 > /tmp/<contrasena>— copia la contraseña de bandit22 (que normalmente solo puede leer bandit22) a ese archivo temporal accesible por todos.
El script se ejecuta como bandit22, por lo que tiene permiso de leer /etc/bandit_pass/bandit22. Y como deja el resultado en /tmp/ con permisos abiertos, tú, siendo bandit21, puedes leerlo.
5. Lee el archivo temporal con la contraseña
cat /tmp/<contrasena>Verás:
<cadena_de_~32_caracteres>
Esa cadena es la contraseña de bandit22. Copiala.
Por qué funciona
La cadena de confianza es:
cronejecuta el script comobandit22cada minuto.- El script lee
/etc/bandit_pass/bandit22(solo legible por bandit22) y la vuelca en/tmp/. - El archivo en
/tmp/tiene permisos644, así que cualquier usuario del sistema puede leerlo. - Tú, conectado como
bandit21, simplemente lo lees.
Este patrón ilustra un principio de seguridad importante: un job automatizado que corre con privilegios elevados y escribe datos sensibles en un lugar de acceso público es una fuga de información. En la vida real, esto sería una vulnerabilidad de tipo “insecure file permissions” o “world-readable sensitive file”.
Errores comunes
| Error | Causa | Solución |
|---|---|---|
No such file or directory al leer /tmp/t7O... | El script aún no ha corrido desde que te conectaste | Espera hasta 1 minuto y vuelve a intentarlo |
| Nombre de archivo incorrecto | Copiaste mal el nombre del archivo desde el script | Vuelve a cat /usr/bin/cronjob_bandit22.sh y copia con cuidado el nombre exacto |
Permission denied al leer el script | En algunos sistemas el script puede no ser legible | En Bandit suele ser accesible; si falla, revisa con ls -l /usr/bin/cronjob_bandit22.sh |
Confundir cronjob_bandit22 con cronjob_bandit23 | Hay varios jobs en /etc/cron.d/ | Confirma que lees el archivo correcto antes de continuar |
Pasar al siguiente nivel
Con la contraseña obtenida en el paso 5, conéctate como bandit22:
ssh bandit22@bandit.labs.overthewire.org -p 2220Cuando pida la contraseña, pega <cadena_de_~32_caracteres> que copiaste del archivo /tmp/.
Conexiones
- 00_README — índice general del wargame y cómo empezar
- MOC_Ciberseguridad — mapa de contenidos de seguridad en la bóveda