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
| Comando | Para qué sirve |
|---|---|
git branch -a | Lista todas las ramas: locales y remotas |
git checkout <nombre-rama> | Cambia a esa rama (actualiza los archivos del directorio) |
git log --oneline | Ver historial de commits de forma compacta |
git show | Ver 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 prefijoorigin/. 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 [email protected] -p 2220Usa 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_workPor 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/repo4. Clona el repositorio
git clone ssh://bandit29-git@localhost/home/bandit29-git/repoTe 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 repo6. Mira el contenido en la rama actual (master)
cat README.mdVeras 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 -aLo 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 llamadadeven 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 devLo 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.mdLo 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
devno tuviera la pass, habrias probado congit checkout sploits-devy repetido el proceso.
10. Sal del servidor
exitPor 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
| Error | Causa probable | Solucion |
|---|---|---|
Permission denied al clonar | Contraseña equivocada para bandit29-git | Usa la pass del nivel 28, no la del 29 (que aun no tienes) |
git clone falla con “not a git repository” | URL mal copiada | Comprueba la URL en la pagina oficial del nivel |
git branch -a no muestra ramas remotas | Clonaste con opciones raras o red caida | Vuelve a clonar en /tmp |
cat README.md sigue mostrando “no passwords” | No hiciste git checkout dev correctamente | Ejecuta git branch (sin -a) para ver en que rama estas; el * indica la activa |
Directorio /tmp/bandit29_work ya existe | Sesion anterior | rm -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 [email protected] -p 2220Cuando te pida la contraseña, pega la cadena de ~32 caracteres que copiaste del README.md de la rama dev.
Conexiones
- 00_README — indice general del wargame Bandit
- MOC_Ciberseguridad — mapa de contenido de ciberseguridad
- git-en-detalle — ramas, commits, remotes: toda la mecanica Git que este nivel usa