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 / ConceptoPara qué sirve
cronPlanificador 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 bashEntender 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 2220

Introduce 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_bandit22

Verá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.sh

Verá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 a 644, 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:

  1. cron ejecuta el script como bandit22 cada minuto.
  2. El script lee /etc/bandit_pass/bandit22 (solo legible por bandit22) y la vuelca en /tmp/.
  3. El archivo en /tmp/ tiene permisos 644, así que cualquier usuario del sistema puede leerlo.
  4. 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

ErrorCausaSolución
No such file or directory al leer /tmp/t7O...El script aún no ha corrido desde que te conectasteEspera hasta 1 minuto y vuelve a intentarlo
Nombre de archivo incorrectoCopiaste mal el nombre del archivo desde el scriptVuelve a cat /usr/bin/cronjob_bandit22.sh y copia con cuidado el nombre exacto
Permission denied al leer el scriptEn algunos sistemas el script puede no ser legibleEn Bandit suele ser accesible; si falla, revisa con ls -l /usr/bin/cronjob_bandit22.sh
Confundir cronjob_bandit22 con cronjob_bandit23Hay 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 2220

Cuando pida la contraseña, pega <cadena_de_~32_caracteres> que copiaste del archivo /tmp/.


Conexiones