Bandit Nivel 32 a 33
Nivel final de Bandit (por ahora). Te meten en una “UPPERCASE SHELL” — una shell trampa que convierte todo lo que escribes a mayúsculas antes de ejecutarlo. El truco está en conocer una variable especial de la shell que la propia trampa no puede bloquear.
Pagina oficial: https://overthewire.org/wargames/bandit/bandit33.html
Objetivo
Escapar de la UPPERCASE SHELL y leer el archivo /etc/bandit_pass/bandit33 para obtener la contraseña final del juego.
Qué aprendes
| Concepto / Comando | Para qué sirve |
|---|---|
$0 | Variable especial: contiene el nombre del shell o script que se está ejecutando actualmente |
Variables especiales de shell ($0, $1, $#, …) | Parámetros posicionales y metadatos del proceso de shell |
| Shell trampa / restricted shell | Técnica de CTF: shells que filtran o transforman la entrada del usuario |
cat /etc/bandit_pass/<usuario> | Leer el archivo donde Bandit almacena cada contraseña |
Jerga importante:
- Shell trampa: una shell modificada que intercepta tu entrada y hace algo con ella antes de pasarla al sistema (en este caso, convertirla a mayúsculas).
- Variable especial
$0: en cualquier shell POSIX,$0se expande al nombre del ejecutable actual. Si estás enbash,$0valebash(o la ruta completa). Como es una expansión que hace la shell antes de procesar la entrada, la trampa no la puede convertir a mayúsculas. - Escape de shell: salir del entorno restringido/trampa y caer en una shell normal con permisos del usuario real.
Paso a paso
1. Conectarse al nivel 32
ssh bandit32@bandit.labs.overthewire.org -p 2220Cuando pida la contraseña, pega la que obtuviste en el nivel anterior.
Lo que verás al entrar — en lugar del prompt habitual de Bandit, aparece esto:
WELCOME TO THE UPPERCASE SHELL
>>
2. Intentar un comando normal (para entender el problema)
Escribe ls y pulsa Enter:
>> ls
sh: 1: LS: not found
>>
La shell ha convertido ls en LS antes de ejecutarlo. LS no existe como comando, así que falla. Lo mismo pasará con cualquier comando en minúsculas.
3. Usar $0 para escapar
Escribe exactamente esto (es un signo de dólar seguido de cero, sin espacios):
$0Lo que verás:
>> $0
$
El prompt ha cambiado de >> a $. Ahora estás en una shell sh normal, ejecutando como bandit33. La trampa ha quedado atrás.
Por qué funciona con $0 y no con otros comandos: la UPPERCASE SHELL convierte la cadena de texto que escribes, pero $0 es una expansión de variable, no texto literal. La shell (incluso la trampa) expande $0 al nombre de su propio ejecutable (/bin/sh o similar) antes de hacer cualquier otra transformación. El resultado de esa expansión es una ruta en minúsculas que sí existe, y el sistema la ejecuta como un nuevo proceso de shell limpio.
4. Leer la contraseña final
Ya en la shell normal:
cat /etc/bandit_pass/bandit33Lo que verás:
<cadena_de_~32_caracteres>
Esa cadena es la contraseña de bandit33. Copiala.
Por qué funciona
La UPPERCASE SHELL es un programa que envuelve una shell real. Su lógica aproximada es:
- Leer lo que escribes.
- Convertir todo a mayúsculas con algo equivalente a
tr '[:lower:]' '[:upper:]'. - Intentar ejecutar el resultado.
El problema para la trampa es que $0 no es un comando: es una expansión de parámetro que la shell resuelve en su fase de análisis sintáctico, antes de llegar al paso de transformación de la trampa (o bien la trampa transforma el texto pero después la expansión ya ocurrió). El valor resultante — la ruta al ejecutable de la shell, como /bin/sh — ya está en minúsculas y es válido.
Al ejecutar /bin/sh (o el ejecutable que sea $0), se lanza un nuevo proceso de shell como el usuario bandit33, sin ninguna trampa encima. Desde ahí tienes acceso normal al sistema de archivos con los permisos de ese usuario, incluido /etc/bandit_pass/bandit33.
Errores comunes
| Error | Causa | Solución |
|---|---|---|
LS: not found, CAT: not found, etc. | Escribiste el comando en minúsculas y la trampa lo convirtió | Es el comportamiento esperado; no uses comandos normales directamente |
Intentar /bin/sh o /bin/bash directamente | La barra / y las letras en minúsculas quedan como /BIN/SH → inválido | Usa exactamente $0 |
Escribir $0 y volver a estar en la UPPERCASE SHELL | Pulsaste algo que relanzó la trampa | Sal con exit y prueba de nuevo; el $0 debe escribirse exactamente así |
Confundir el prompt $ con “nada ha cambiado” | El prompt $ es precisamente la señal de que ya estás en una shell normal | Ahora sí puedes usar cat, ls, etc. |
El final del juego (por ahora)
Una vez obtenida la contraseña de bandit33, conéctate al nivel 33:
ssh bandit33@bandit.labs.overthewire.org -p 2220Al entrar verás algo como:
Congratulations on solving the last level of this game!
At this moment, there are no more levels to play in this game. However, we are
working on new levels and will most likely expand this game in the future.
Keep an eye out for an upcoming series of new levels. :-)
...
Bandit 33 no tiene reto: es el README de cierre. Has completado Bandit en su estado actual.
Pasar al siguiente nivel
ssh bandit33@bandit.labs.overthewire.org -p 2220
# Contraseña: <cadena_de_~32_caracteres> (la que obtuviste con cat /etc/bandit_pass/bandit33)Al entrar solo encontrarás el mensaje de felicitación — no hay nivel 34 todavía.
Conexiones
- 00_README — índice de todos los niveles de Bandit
- MOC_Ciberseguridad — mapa de contenido de ciberseguridad
- —
$0,$1,$#,$?y demás (crear si no existe) - — técnicas de escape de shells restringidas en CTF (crear si no existe)