Bandit Nivel 19 a 20
Nivel del wargame legal y educativo OverTheWire Bandit. El objetivo es escalar privilegios aprovechando un binario con el bit SETUID activado — uno de los conceptos más importantes para entender la gestión de permisos en Linux.
Objetivo
Encontrar y usar el binario bandit20-do que vive en el home de bandit19. Ese binario tiene un bit especial que le permite ejecutar comandos como si fuera el usuario bandit20, aunque tú hayas iniciado sesión como bandit19. La contraseña de bandit20 está en /etc/bandit_pass/bandit20, un archivo que bandit19 normalmente no puede leer. Usando el binario, puedes saltarte esa restricción.
Qué aprendes
Conceptos clave
| Concepto | Qué es |
|---|---|
| SETUID | Bit de permiso especial en un ejecutable. Cuando está activo, el programa corre con los permisos del propietario del archivo, no con los del usuario que lo lanza. |
| Escalada de privilegios | Técnica (aquí, legítima y controlada) para ejecutar acciones con más permisos de los que tienes normalmente. |
/etc/bandit_pass/ | Directorio donde OverTheWire almacena las contraseñas de cada nivel, con permisos estrictos: solo el usuario correspondiente puede leerla. |
Comandos usados
| Comando | Para qué sirve |
|---|---|
ls -la | Listar archivos con permisos detallados (clave para ver el bit SETUID). |
file bandit20-do | Identificar el tipo de archivo (binario ejecutable ELF). |
./bandit20-do <comando> | Ejecutar <comando> con los permisos de bandit20. |
cat /etc/bandit_pass/bandit20 | Leer la contraseña del siguiente nivel. |
Paso a paso
1. Conectarse al nivel 19
ssh bandit19@bandit.labs.overthewire.org -p 2220Introduce la contraseña que obtuviste al resolver el nivel 18 cuando te la pida.
2. Explorar el home
ls -laLo que verás:
total 28
drwxr-xr-x 2 root root 4096 Apr 23 18:04 .
drwxr-xr-x 70 root root 4096 Apr 23 18:04 ..
-rwsr-x--- 1 bandit20 bandit19 14876 Apr 23 18:04 bandit20-do
-rw-r--r-- 1 root root 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 root root 3526 Jan 6 2022 .bashrc
-rw-r--r-- 1 root root 807 Jan 6 2022 .profile
Fijate en la columna de permisos del binario: -rwsr-x---
La s en la posición del bit de ejecución del propietario (donde normalmente hay una x) indica que el bit SETUID esta activo. Ademas, el propietario del archivo es bandit20, no bandit19.
3. Inspeccionar el binario (opcional pero instructivo)
file bandit20-doLo que verás:
bandit20-do: setuid ELF 32-bit LSB executable, Intel 80386, ...
La palabra setuid aparece explicitamente en la descripción del archivo. Linux lo reconoce como binario SETUID.
4. Probar el binario sin argumentos
./bandit20-doLo que verás:
Run a command as another user.
Example: ./bandit20-do id
El propio binario te indica cómo usarlo. Pide que le pases un comando como argumento.
5. Confirmar la identidad bajo la que corre
./bandit20-do idLo que verás:
uid=11020(bandit20) gid=11019(bandit19) groups=11019(bandit19)
El uid es de bandit20, pero el gid (grupo) sigue siendo bandit19. Esto es exactamente lo que hace SETUID: cambia el usuario efectivo, no el grupo.
6. Leer la contraseña
./bandit20-do cat /etc/bandit_pass/bandit20Lo que verás:
<cadena_de_~32_caracteres>
Esa cadena es la contraseña del nivel 20. Copiala.
Por que funciona
En Linux, cada proceso tiene dos identidades de usuario:
- UID real: el usuario que lanzo el proceso (aqui,
bandit19). - UID efectivo: el usuario con cuyos permisos se evaluan las operaciones del proceso.
Normalmente ambos coinciden. Pero cuando un ejecutable tiene el bit SETUID activado, el sistema operativo cambia el UID efectivo al propietario del archivo en el momento de lanzarlo.
Flujo de lo que ocurre al ejecutar ./bandit20-do cat /etc/bandit_pass/bandit20:
- El kernel ve que
bandit20-dotiene el bit SETUID y su propietario esbandit20. - Lanza el proceso con UID efectivo =
bandit20. bandit20-dollama internamente acat /etc/bandit_pass/bandit20.- El kernel comprueba los permisos de
/etc/bandit_pass/bandit20: solo legible porbandit20. El UID efectivo esbandit20. Acceso concedido. - El contenido del archivo llega a tu terminal.
Este mecanismo es el mismo que usa, por ejemplo, el comando passwd (que necesita escribir en /etc/shadow aunque lo lance un usuario normal).
Errores comunes
Error: Permission denied al intentar leer directamente
cat /etc/bandit_pass/bandit20
# cat: /etc/bandit_pass/bandit20: Permission deniedCorrecto, eso es lo esperado. No tienes permiso como bandit19. Por eso existe el binario.
Error: ejecutar el binario sin ./
bandit20-do cat /etc/bandit_pass/bandit20
# bash: bandit20-do: command not foundEl directorio actual (.) no esta en el PATH de seguridad del sistema. Siempre usa ./ para ejecutar binarios del directorio actual.
Error: pasar el comando sin espacio o con comillas innecesarias
./bandit20-do "cat /etc/bandit_pass/bandit20"
# el binario puede interpretar esto como un unico argumento, no como comando + rutaPasa el comando y sus argumentos separados, sin comillas envolventes:
./bandit20-do cat /etc/bandit_pass/bandit20Confundir SETUID con SETGID
El bit SETGID (s en la posicion del grupo, p.ej. rwxr-sr-x) hace lo mismo pero para el grupo efectivo. Son mecanismos distintos. Aqui solo opera SETUID.
Pasar al siguiente nivel
Con la contraseña obtenida, conéctate al nivel 20:
ssh bandit20@bandit.labs.overthewire.org -p 2220Introduce <cadena_de_~32_caracteres> (la que copiaste en el paso 6) cuando te la pida.
Conexiones
- 00_README — indice general del wargame y convenciones de la serie
- MOC_Ciberseguridad — mapa de contenido de ciberseguridad en la boveda