Bandit Nivel 26 → 27
Pagina oficial: https://overthewire.org/wargames/bandit/bandit27.html
Este nivel es la segunda parte del escape por vi que empezaste en el nivel 25→26. Ya tienes una shell como bandit26; ahora toca aprovechar un binario especial que hay en el home para leer la contraseña de bandit27.
Objetivo
Ejecutar el binario bandit27-do (que tiene el bit setuid de bandit27) para leer el archivo /etc/bandit_pass/bandit27 y obtener la contraseña del siguiente nivel.
Qué aprendes
| Elemento | Descripcion |
|---|---|
vi — :shell | Abrir una shell interactiva desde dentro del editor |
vi — :set shell | Cambiar el interprete de shell que usa vi antes de lanzarlo |
Bit setuid (s) | Permiso especial: el binario se ejecuta con el UID del propietario, no del invocador |
bandit27-do | Binario wrapper que corre como bandit27 |
cat /etc/bandit_pass/<usuario> | Patron estandar en Bandit para leer passwords |
ls -l | Ver permisos y propietario de un archivo |
Jerga clave
- setuid (SUID): cuando ves una
sen los permisos de ejecucion del propietario (-rwsr-xr-x), el programa corre con los privilegios del dueno del archivo, no con los tuyos. Es un mecanismo legítimo de Linux que, mal configurado, se convierte en vector de escalada de privilegios. - UID efectivo vs. real: al ejecutar un binario SUID, tu UID real sigue siendo
bandit26, pero el UID efectivo pasa a serbandit27. El kernel usa el efectivo para los controles de acceso. - Shell de escape (jail escape): salir de un entorno restringido (en este caso,
more/vicomo shell de login) para obtener una shell normal.
Paso a paso
Situacion de partida
Llegaste al nivel anterior (25→26) y conseguiste entrar a vi desde more. Si cerraste la sesion, vuelve a abrir la conexion SSH a bandit26 y repite el truco de reducir la ventana de terminal para forzar que more entre en modo de paginacion, luego pulsa v para abrir vi.
Terminal Kitty:
moreyvicorren en el servidor, así que si usas Kitty y vesError opening terminal: xterm-kitty, abre la conexión con el TERM ya fijado:TERM=xterm ssh -i ~/bandit26.sshkey [email protected] -p 2220.
1. Verificar que estas dentro de vi
Dentro de vi deberias ver el contenido del archivo text.txt de bandit26 y la barra de estado de vi en la parte inferior. Si no es asi, repasa el nivel anterior.
2. Cambiar el interprete de shell (si es necesario)
La shell de login de bandit26 es /usr/bin/showtext, un script muy restringido. Cuando vi lanza una shell con :shell, usa la variable $SHELL del entorno, que apunta a ese script restringido. Hay que cambiarlo a /bin/bash desde dentro de vi:
:set shell=/bin/bashEscribe :set shell=/bin/bash y pulsa Enter. No veras ninguna salida visible; vi simplemente actualiza la variable interna.
3. Abrir una shell de bash desde vi
:shellEsto hace que vi lance /bin/bash como subproceso. Veras algo como:
bandit26@bandit:~$
Ya tienes una shell interactiva como bandit26. El prompt puede variar; lo importante es que responde a comandos normales de bash.
4. Explorar el home de bandit26
ls -l ~Salida esperada (aproximada):
total 20
-rwsr-x--- 1 bandit27 bandit26 14880 Apr 23 18:04 bandit27-do
-rw-r----- 1 bandit26 bandit26 258 Apr 23 18:04 text.txt
Fjate en los permisos de bandit27-do:
-rwsr-x---— lasen la posicion de ejecucion del propietario indica SUID.- Propietario:
bandit27. Grupo:bandit26. bandit26puede ejecutarlo (permisos de grupor-x).
5. Ejecutar el binario setuid para leer la password
./bandit27-do cat /etc/bandit_pass/bandit27Salida esperada:
<cadena_de_~32_caracteres>
Esa cadena es la contraseña de bandit27. Copiala.
6. (Opcional) Confirmar que el binario corre como bandit27
./bandit27-do idSalida esperada:
uid=11026(bandit26) gid=11026(bandit26) euid=11027(bandit27) groups=11026(bandit26)
Observa: uid (real) = bandit26, euid (efectivo) = bandit27. El kernel da acceso a /etc/bandit_pass/bandit27 basandose en el euid.
Por que funciona
El bit SUID en detalle
-rwsr-x---
^^^
rws → propietario puede leer, escribir, y ejecutar; la 's' reemplaza la 'x' normal
Cuando ejecutas ./bandit27-do:
- El kernel ve que el bit SUID esta activado.
- Asigna como UID efectivo el UID del propietario del archivo (
bandit27). - El proceso hijo (
cat /etc/bandit_pass/bandit27) hereda ese UID efectivo. - El archivo
/etc/bandit_pass/bandit27solo es legible porbandit27(permisos400aprox.), pero el proceso tiene el UID efectivo correcto → acceso concedido.
Por que necesitamos el truco de vi primero
La shell de login de bandit26 es /usr/bin/showtext, que imprime text.txt y termina inmediatamente. No hay forma de ejecutar comandos directamente al hacer SSH. El escape por vi es el puente entre “sesion SSH que se cierra sola” y “shell bash utilizable”.
Cadena completa de la explotacion (resumen)
SSH bandit26 → more (paginador) → [v] → vi → :set shell=/bin/bash → :shell → bash → ./bandit27-do → bandit27 UID efectivo → cat /etc/bandit_pass/bandit27
Errores comunes
La shell que abre vi sigue siendo restringida
Sintoma: ejecutas :shell y obtienes un error o la sesion termina.
Causa: olvidaste ejecutar :set shell=/bin/bash antes de :shell. La shell por defecto es /usr/bin/showtext.
Solucion: vuelve a vi, ejecuta :set shell=/bin/bash y luego :shell.
Permission denied al ejecutar bandit27-do
Sintoma:
-bash: ./bandit27-do: Permission denied
Causa: no estas en el directorio home o el archivo no es ejecutable para tu usuario.
Solucion:
cd ~
ls -l bandit27-doComprueba que el grupo es bandit26 y que tienes permiso de ejecucion de grupo (r-x).
La terminal era demasiado grande y more no pagino
Sintoma: al conectarte a bandit26, la sesion se cierra de inmediato sin mostrar more.
Causa: si la terminal es suficientemente grande para mostrar todo text.txt en una sola pantalla, more termina sin entrar en modo interactivo y showtext cierra la sesion.
Solucion: reduce el tamano vertical de la ventana de terminal a unas 5-10 lineas antes de conectarte por SSH. Repasa los detalles en el nivel 26-nivel-25-a-26.
Confundir SUID con sudo
bandit27-do no usa sudo; es un binario precompilado con el bit SUID. Intentar ejecutar sudo ./bandit27-do no tendra efecto (ademas de que bandit26 probablemente no tiene entrada en sudoers).
Pasar al siguiente nivel
Con la password obtenida, abre una nueva terminal y conectate a bandit27:
ssh [email protected] -p 2220Cuando te pida contrasena, pega <cadena_de_~32_caracteres> que copiaste en el paso 5.
Conexiones
- 00_README — indice general de la serie Bandit
- MOC_Ciberseguridad — mapa de contenido de ciberseguridad
- 26-nivel-25-a-26 — nivel anterior; explica el escape inicial por vi y more
- — SUID, SGID y sticky bit en profundidad (si existe)