Bandit Nivel 29 → 30

Pagina oficial del nivel: https://overthewire.org/wargames/bandit/bandit30.html

Marco: OverTheWire Bandit es un wargame legal y educativo diseñado para aprender hacking ético y administración de sistemas Linux paso a paso.


Objetivo

Conectarte al servidor como bandit29, clonar un repositorio Git y encontrar la contraseña del siguiente nivel (bandit30). La trampa: la contraseña no está en la rama principal (master). Está escondida en otra rama del repositorio. Tienes que saber buscarla.


Qué aprendes

Comandos Git nuevos

ComandoPara qué sirve
git branch -aLista todas las ramas: locales y remotas
git checkout <nombre-rama>Cambia a esa rama (actualiza los archivos del directorio)
git log --onelineVer historial de commits de forma compacta
git showVer el contenido del commit actual

Conceptos clave

  • Rama (branch): una linea de desarrollo paralela dentro del mismo repositorio. Piensalo como un historial alternativo del proyecto.
  • master / main: la rama principal por convencion, pero no la unica.
  • Ramas remotas: ramas que existen en el servidor (origin). Cuando clonas un repo, tu tienes copias de todas ellas, pero solo tienes checked out (activa) la principal. Las remotas se ven con el prefijo origin/.
  • git checkout: ademas de cambiar de rama, descarga los archivos de esa rama a tu directorio de trabajo.

Paso a paso

1. Conéctate al servidor como bandit29

ssh bandit29@bandit.labs.overthewire.org -p 2220

Usa la contraseña que obtuviste en el nivel 28 (la cadena de ~32 caracteres que copiaste).

2. Crea un directorio temporal de trabajo

mkdir /tmp/bandit29_work
cd /tmp/bandit29_work

Por que /tmp/: es el unico lugar donde bandit29 tiene permisos de escritura.

3. Busca la URL del repositorio Git

El enunciado del nivel (en la pagina oficial o en el fichero /etc/bandit_pass/bandit29 — que no puedes leer) te indica la URL. Normalmente es algo como:

# La URL del repo suele estar indicada en la pagina del nivel:
# ssh://bandit29-git@localhost/home/bandit29-git/repo

4. Clona el repositorio

git clone ssh://bandit29-git@localhost/home/bandit29-git/repo

Te pedira la contraseña de bandit29-git — es la misma que usaste para entrar al servidor (la del nivel 28).

Lo que veras:

Cloning into 'repo'...
bandit29-git@localhost's password:
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 16 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (16/16), done.
Resolving deltas: 100% (2/2), done.

5. Entra al repositorio clonado

cd repo

6. Mira el contenido en la rama actual (master)

cat README.md

Veras algo como:

# Bandit Notes
Some notes for bandit30 of bandit.

## credentials

- username: bandit30
- password: <no passwords in production!>

La pista es clara: en produccion (rama master) no hay passwords. Hay que buscar en otra rama.

7. Lista TODAS las ramas, incluidas las remotas

git branch -a

Lo que veras:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/sploits-dev

Explicacion de la salida:

  • * indica la rama en la que estas ahora (master).
  • remotes/origin/dev — una rama llamada dev en el servidor remoto. Esta es sospechosa.
  • remotes/origin/sploits-dev — otra rama remota. Tambien merece un vistazo.

8. Cambia a la rama dev

git checkout dev

Lo que veras:

Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'

Git ha creado una rama local dev que sigue a la remota origin/dev y ha actualizado tus ficheros.

9. Busca la contraseña en la rama dev

cat README.md

Lo que veras:

# Bandit Notes
Some notes for bandit30 of bandit.

## credentials

- username: bandit30
- password: <cadena_de_~32_caracteres>

La cadena que aparece en password: es la contraseña del nivel 30. Copiala.

Si dev no tuviera la pass, habrias probado con git checkout sploits-dev y repetido el proceso.

10. Sal del servidor

exit

Por que funciona

Un repositorio Git no es un solo fichero: es un grafo de commits organizado en ramas. Cada rama es simplemente un puntero a un commit concreto. Cuando clonas un repositorio, Git descarga todos los commits y todas las ramas remotas, pero solo activa (checkout) la rama por defecto.

La rama master representa el codigo “en produccion” — por convencion, limpio y sin secretos. La rama dev es el entorno de desarrollo donde a veces (mal habito) se dejan credenciales de prueba. Este nivel simula un error de seguridad muy real: credenciales que alguien olvido en una rama no-principal que cree que “nadie va a ver”.

git branch -a te da visibilidad completa del repositorio: sin ese flag (-a = all), solo verias las ramas locales y te perderia las remotas.


Errores comunes

ErrorCausa probableSolucion
Permission denied al clonarContraseña equivocada para bandit29-gitUsa la pass del nivel 28, no la del 29 (que aun no tienes)
git clone falla con “not a git repository”URL mal copiadaComprueba la URL en la pagina oficial del nivel
git branch -a no muestra ramas remotasClonaste con opciones raras o red caidaVuelve a clonar en /tmp
cat README.md sigue mostrando “no passwords”No hiciste git checkout dev correctamenteEjecuta git branch (sin -a) para ver en que rama estas; el * indica la activa
Directorio /tmp/bandit29_work ya existeSesion anteriorrm -rf /tmp/bandit29_work y vuelve a empezar

Pasar al siguiente nivel

Con la contraseña obtenida en la rama dev, conéctate como bandit30:

ssh bandit30@bandit.labs.overthewire.org -p 2220

Cuando te pida la contraseña, pega la cadena de ~32 caracteres que copiaste del README.md de la rama dev.


Conexiones