Ejercicio prático de Bandit

Bandit es un juego de guerra (wargame) de la plataforma OverTheWire que está diseñado para enseñar los fundamentos de la seguridad y el hacking en Linux. Ideal para principiantes, cada nivel te reta a encontrar una contraseña que te permitirá acceder al siguiente.
🌐 Ir al juego en OverTheWire

🏴‍☠️ Bandit Level 0 → Level 1

🔐 Objetivo: Acceder al usuario bandit1 encontrando la contraseña oculta en el sistema del usuario bandit0.
1️⃣ Conectarse al servidor

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

🧠 _Te pedirá la contraseña, que para el nivel 0 es:bandit0 a

📘 👉 📚 ¿No sabes cómo funciona ssh? Mira mis apuntes aquí → SSH
2️⃣ Leer el contenido del archivoa
Al conectarte, verás un archivo llamado readme.

ls
cat readme

Para pasar al siguiente nivel

sshpass -p '<contraseña>' ssh bandit01@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 1 → Level 2

El archivo se llama -, lo cual normalmente en la terminal se interpreta como entrada estándar (stdin). Esto puede confundir comandos como cat.

Solución
Usa cat indicando explícitamente el archivo como ruta relativa:

cat ./-

y para pasar al siguiente nivel

sshpass -p '<contraseña>' ssh bandit2@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 2 → Level 3

🎯 Objetivo del nivel:
Encontrar la contraseña que está guardada en un archivo llamado:
spaces in this filename
🧠 Problema:
El nombre del archivo contiene espacios, por lo que no puedes usar cat o cualquier otro comando tal cual, ya que el terminal interpretaría cada palabra como un argumento distinto.

👨‍💻 Solución: Tienes varias formas de manejarlo:

✅ Opción 1: Comillas

`cat "spaces in this filename"`

✅ Opción 2: Escape de espacios con \

cat spaces\ in\ this\ filename

✅ Opción 3: Autocompletar con TAB

Escribe el inicio del nombre, por ejemplo:

cat spa

y presiona TAB. El terminal lo completará automáticamente por ti si no hay más archivos con nombres parecidos.

📥 Esto te dará la contraseña para el usuario bandit3.

sshpass -p '<contraseña>' ssh bandit3@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 3 → Level 4

🎯 Objetivo:
Encontrar un archivo oculto dentro del directorio inhere que contiene la contraseña.
👨‍💻 Solución: Es un fichero oculto dentro de la carpeta inhere. El comando para listar los comandos ocultos

ls -a

🔹 Léelo con:

cat .nombre_del_archivo

🔐 Acceder al siguiente nivel
Una vez tengas la contraseña:

sshpass -p '<contraseña>' ssh bandit4@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 4 → Level 5

🎯 Objetivo:
Encontrar un archivo normal (no oculto) en inhere/ que:

El comando

find . | xargs file 

🧠 ¿Qué hace este comando?

Para pasar al siguiente nivel

sshpass -p '<contraseña>' ssh bandit5@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 4 → Level 5

🎯 Objetivo:
Encontrar un archivo bajo el directorio inhere que cumpla con las siguientes propiedades:

find * -type f -size 1033c ! -executable | xargs cat 

🧠 ¿Qué hace este comando?

Una vez encontrado el archivo con la contraseña, utiliza:
Para pasar al siguiente nivel

sshpass -p '<contraseña>'
' ssh bandit6@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 5 → Level 7

🎯 Objetivo:
Encontrar un archivo en el servidor que tenga las siguientes propiedades:

find / -user bandit7 -group bandit6 -size 33c 2>/dev/null | xargs cat

🧠 ¿Qué hace este comando?

sshpass -p '<contraseña>' ssh bandit7@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 7 → Level 8

🎯 Objetivo:
Encontrar la contraseña para el siguiente nivel, la cual está almacenada en el archivo data.txt, al lado de la palabra "millionth".

Comando:

cat data.txt | grep "millionth" | awk '{print $2}'

🧠 ¿Qué hace este comando?

sshpass -p '<contraseña>' ssh bandit8@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 8 → Level 9

🎯 Objetivo:
La contraseña para el siguiente nivel está almacenada en el archivo data.txt y es la única línea de texto que aparece solo una vez.
Comando:

sort data.txt | uniq -u

🧠 ¿Qué hace este comando?

Avanzar al siguiente nivel:

sshpass -p '<contraseña>'
' ssh bandit9@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 9 → Level 10

🎯 Objetivo:
La contraseña para el siguiente nivel está almacenada en el archivo data.txt y es una de las pocas cadenas legibles para humanos que está precedida por varios caracteres =.
Comando:

strings data.txt | grep "=="

🧠 ¿Qué hace este comando?

sshpass -p '<contraseña>' ssh bandit10@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 10 → Level 11

🎯 Objetivo:
La contraseña para el siguiente nivel está almacenada en el archivo data.txt, que contiene datos codificados en base64.

Comando:

cat data.txt | base64 -d

🧠 ¿Qué hace este comando?

Avanzar al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit11@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 11 → Level 12

🎯 Objetivo:
La contraseña para el siguiente nivel está almacenada en el archivo data.txt, donde todas las letras (mayúsculas y minúsculas) han sido rotadas 13 posiciones en el alfabeto (cifrado ROT13).

🧠 ¿Qué es ROT13?
Es una forma simple de cifrado que reemplaza cada letra por la que se encuentra 13 posiciones más adelante en el alfabeto. Si se aplica dos veces, el texto vuelve a ser legible.

Comando para decodificar:

cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'

📥 Esto mostrará el contenido original descifrado, incluyendo la contraseña.
🔐 Avanzar al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit12@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 12 → Level 13

🎯 Objetivo:
La contraseña está oculta en un archivo llamado data.txt, el cual es un hexdump de un archivo que ha sido comprimido múltiples veces.
Tu misión: reconstruir el archivo original y descomprimirlo tantas veces como sea necesario hasta revelar la contraseña.
📦 Pasos sugeridos:
1️⃣ Crear un directorio temporal en /tmp
Esto evita ensuciar tu directorio y reduce errores con permisos:

mkdir $(mktemp -d /tmp/banditXXXX) cd /tmp/banditXXXX

2️⃣ Copiar el archivo y reconstruir el binario original desde el hexdump

cp ~/data.txt . xxd -r data.txt > decode.gz

3️⃣ Detectar el tipo de archivo

file decode.gz`

🔍 Repite este paso tras cada extracción para saber el tipo de compresión.

4️⃣ Descomprimir el archivo

7z x decode.gz

ℹ️ Se usará 7z porque detecta y descomprime múltiples formatos: gzip, bzip2, tar, etc.

5️⃣ Seguir descomprimiendo
Repite el proceso de detección y extracción sobre cada archivo extraído, hasta que finalmente obtengas un archivo de texto plano que contiene la contraseña.

💡 TIP para hacerlo más fácil:
Puedes automatizar el proceso con este script:

#!/bin/bash

function ctrl_c(){
  echo -e "\n\n[!] Saliendo...\n"
  exit 1
}

# Ctrl+C
trap ctrl_c INT

first_file_name="data.gz"
decompressed_file_name="$(7z l data.gz | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"

7z x $first_file_name &>/dev/null

while [ $decompressed_file_name ]; do
  echo -e "\n[+] Nuevo archivo descomprimido: $decompressed_file_name"
  7z x $decompressed_file_name &>/dev/null
  decompressed_file_name="$(7z l $decompressed_file_name 2>/dev/null | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"
done
sshpass -p '<contraseña>' ssh bandit13@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 13 → Level 14

🎯 Objetivo:
Acceder al usuario bandit14 utilizando una clave privada SSH proporcionada en el archivo sshkey.private.

🧠 ¿Qué hace especial este nivel?
Este nivel no requiere una contraseña tradicional. En su lugar, se conecta mediante autenticación por clave pública/privada SSH.
📘 👉 ¿No sabés cómo funciona esto? Mirá esta sección de mis apuntes: SSH#3. Autenticación con Claves SSH (Sin Contraseña)
Hay un clave privada asi que no necesita saber la contraseña solo desde la propia maquina

📡 Conéctate al siguiente nivel con la clave:

ssh -i sshkey.private bandit14@bandit.labs.overthewire.org -p 2220

🕵️‍♂️ Obtener la contraseña del usuario badnti14:

cat /etc/bandit_pass/bandit14

🏴‍☠️ Bandit Level 14 → Level 15

🎯 Objetivo:
Enviar la contraseña a un servidor en el puerto 30000 local usando netcat para obtener la siguiente contraseña.

📡 Netcat (nc) es una herramienta que permite enviar datos por red, útil para probar puertos y comunicarse con servicios directamente.
Para más información sobre el tema, revisa 🖧 Puertos y Conexiones de Red en Linux

Pasos a seguir:

🧪 Conectarse al puerto:

nc localhost 30000

🔐 Pegar la contraseña obtenida en el paso anterior (de bandit14) y presionar Enter.
🔐 Avanzar al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit15@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 15 → Level 16

🎯 Objetivo:
Conectarse al servidor utilizando ncat con SSL para obtener la siguiente contraseña.

📡 Ncat permite establecer conexiones seguras con el uso de SSL, lo cual es útil para conectarse a servicios que requieren un canal cifrado. Aquí hablo sobre 🖧 Puertos y Conexiones de Red en Linux para más información.

Pasos a seguir:

🧪 Conectarse al puerto con Ncat utilizando SSL:

ncat --ssl localhost 30001

🔐 La respuesta será la contraseña:

🔑 Avanzar al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit16@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 16 → Level 17

🎯 Objetivo:
Enviar la contraseña actual a un servidor local escuchando en algún puerto entre 31000 y 32000.
Solo uno de esos puertos responde correctamente con la contraseña del siguiente nivel.
Los demás solo te devolverán lo que envíes, o responderán con mensajes como "DONE", "RENEGOTIATING", etc.

1️⃣ Escanear los puertos entre 31000 y 32000

Usa nmap para encontrar los puertos abiertos en localhost:

nmap -p 31000-32000 localhost

📌 Resultado:
Pasted image 20250421181716.png

📡 2. Probar puertos con ncat y enviar la contraseña actual:

ncat --ssl localhost 31790

💾 3. Guardar y usar la clave privada
Una vez obtengas la clave:

  1. Guárdala en un archivo llamado id_rsa:
    nano id_rsa

  2. Pega la clave privada completa (incluyendo -----BEGIN RSA PRIVATE KEY----- hasta -----END RSA PRIVATE KEY-----), y guarda.

  3. Asigna los permisos correctos al archivo para que SSH pueda usarlo:
    chmod 600 id_rsa

ssh -i id_rsa bandit17@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 17 → Level 18

🎯 Objetivo del nivel:
Encontrar la contraseña para el siguiente nivel, que está en el archivo passwords.new, en la única línea que ha cambiado respecto a passwords.old.

🧠 Pistas del nivel:

👨‍💻 Solución:

Comparar los archivos con el comando diff

diff passwords.old passwords.new

📤 Resultado:
Pasted image 20250421184154.png
📥 Conéctate al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit18@bandit.labs.overthewire.org -p 2220

⚠️ NOTA IMPORTANTE:
Si al conectarte a bandit18 ves Byebye!, no es un error.
Esto forma parte del siguiente nivel (bandit19) y tiene que ver con cómo funciona el shell de bandit18.

🏴‍☠️ Bandit Level 18 → Level 19

🎯 Objetivo:
Acceder al usuario bandit19, pero al intentar conectarte como bandit18, el servidor te expulsa inmediatamente con un mensaje: Byebye!
🧠 ¿Qué está pasando?
Alguien ha modificado el archivo ~/.bashrc, el cual se ejecuta automáticamente al iniciar sesión. En este caso, contiene un comando que expulsa al usuario inmediatamente.

👨‍💻 ¿Cómo evitar que se ejecute .bashrc?

La idea es ejecutar un comando al momento de conectarse, de modo que no se inicie una sesión interactiva (la cual cargaría .bashrc).

Solución: Usamos ssh para ejecutar directamente el comando cat readme (el archivo readme contiene la contraseña para el siguiente nivel):

sshpass -p '<contraseña>' ssh bandit18@bandit.labs.overthewire.org -p 2220 cat readme

📤 Esto imprimirá directamente la contraseña sin abrir una shell interactiva.
📥 Conéctate al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit19@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 19 → Level 20

🎯 Objetivo:
Usar el binario especial bandit20-do para ejecutar comandos como otro usuario (bandit20) y así obtener la contraseña del siguiente nivel.

🧠 ¿Qué es setuid?
Es una propiedad que permite que un archivo ejecutable se ejecute con los privilegios del propietario, en este caso bandit20, aunque lo ejecute bandit19.
Esto nos permite hacer cosas como leer archivos que normalmente no podríamos.

📚 Aquí hablo más sobre esto: 🔐👤👥 Gestión de Usuarios, Grupos y Permisos en Linux#🛡️ SUID y SGID en Linux
Pasted image 20250421190622.png

./bandit20-do

Nos dice que podemos ejecutar comandos como otro usuario. Ejemplo:

./bandit20-do id

Entonces, para obtener la contraseña del siguiente nivel:

./bandit20-do cat /etc/bandit_pass/bandit20

📥 Conéctate al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit20@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 20 → Level 21

🎯 Objetivo:
Usar el binario suconnect (con permisos especiales) para conectar a un puerto en localhost, enviar la contraseña del nivel actual y recibir la contraseña del siguiente nivel.

📦 El binario está en el home:
./suconnect <puerto>

Este programa se conecta a localhost:<puerto> y espera recibir la contraseña de bandit20 desde el otro extremo. Si es correcta, te devuelve la contraseña de bandit21.
Pasos a seguir:
1️⃣ Verifica el binario

ls -l

-rwsr-x--- 1 bandit21 bandit20 15608 suconnect

🔐 El bit s en rws indica que el binario se ejecuta con los permisos del propietario (bandit21), aunque tú seas bandit20. Eso permite acceder a la contraseña del siguiente nivel.

2️⃣ Lanza un servidor en un puerto (por ejemplo el 6664)

nc -nlvp 6664

Esto espera conexiones entrantes.
3️⃣ En otro terminal, ejecuta el binario:

./suconnect 6664

El programa se conectará a tu netcat. En el terminal donde está escuchando nc, verás algo así como:
Connection received on 127.0.0.1
4️⃣ Pega la contraseña del nivel 20 (la que ya tienes) en el servidor (netcat):
Si es correcta, el binario te devuelve la contraseña del siguiente nivel en el mismo netcat:
Pasted image 20250421192637.png
📥 Conéctate al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit21@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 21 → Level 22

🎯 Objetivo:
Acceder al siguiente nivel al examinar las tareas programadas en el sistema y encontrar la forma de obtener la contraseña del usuario bandit22.
📚 Aquí hablo más cron: ⏰ Automatización con cron en Linux
1️⃣ Revisar las tareas programadas en /etc/cron.d

Al conectarte al sistema, encontrarás varias tareas programadas. Nos vamos a centrar en la tarea cronjob_bandit22, que se ejecuta cada minuto y lanza un script llamado cronjob_bandit22.sh.

Para ver las tareas programadas, ejecuta:

bandit21@bandit:/etc/cron.d$ cat cronjob_bandit22

La salida:
Pasted image 20250422192346.png
Esto indica que el script cronjob_bandit22.sh se ejecuta cada minuto bajo el usuario bandit22.

2️⃣ Revisar el contenido del script cronjob_bandit22.sh

Ahora, vamos a examinar el script cronjob_bandit22.sh para entender qué hace. Este script se encuentra en la ruta /usr/bin/cronjob_bandit22.sh y contiene instrucciones para cambiar los permisos de un archivo temporal y copiar la contraseña de bandit22 en él.
Pasted image 20250422192451.png
Este script hace lo siguiente:

  1. Cambia los permisos del archivo temporal /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv para que todos los usuarios puedan leerlo.

  2. Copia la contraseña del archivo /etc/bandit_pass/bandit22 al archivo temporal mencionado.
    3️⃣ Acceder a la contraseña de bandit22
    Dado que el archivo /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv tiene permisos 644, cualquier usuario puede leerlo. Ahora, solo tenemos que ver su contenido para obtener la contraseña.

Ejecuta:

cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv

La salida mostrará la contraseña de bandit22

📥 Conéctate al siguiente nivel:
Ahora que tienes la contraseña, puedes acceder al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit22@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 22 → Level 23

🎯 Objetivo:
Acceder al siguiente nivel mediante la manipulación de tareas programadas, específicamente a través de un cronjob, para obtener la contraseña del usuario bandit23.

1️⃣ Revisar las tareas programadas en /etc/cron.d

Al igual que en el nivel anterior, el objetivo es centrarnos en las tareas programadas. En este caso, hay un cronjob que ejecuta el script cronjob_bandit23.sh, tanto al reiniciar el sistema como cada minuto.
Conéctate al servidor y revisa el contenido del archivo cronjob_bandit23:

bandit22@bandit:/etc/cron.d$ cat cronjob_bandit23`

La salida:
Pasted image 20250422194904.png
Esta configuración indica que el script cronjob_bandit23.sh se ejecuta cada minuto y también al reiniciar el sistema.

2️⃣ Revisar el contenido del script cronjob_bandit23.sh

El siguiente paso es analizar el script cronjob_bandit23.sh, que contiene el código responsable de obtener la contraseña del usuario bandit23. Veamos qué hace este script:

bandit22@bandit:/etc/cron.d$ cat /usr/bin/cronjob_bandit23.sh

El contenido del script es el siguiente:
Pasted image 20250422195002.png
Análisis del script:

3️⃣ Acceder a la contraseña de bandit23

El archivo generado en /tmp/ tendrá el nombre basado en el hash MD5, que corresponde a la contraseña del usuario bandit23. Para encontrar este archivo y ver su contenido, tenemos que ejecutar el comando

echo I am user bandit23 | md5sum | cut -d ' ' -f 1

cat /tmp/8ca319486bfbbc3663ea0fbe81326349

La salida mostrará la contraseña de bandit23

📥 Conéctate al siguiente nivel:

Ahora que tienes la contraseña, puedes conectarte al siguiente nivel:


sshpass -p '<contraseña>' ssh bandit23@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 23 → Level 24

🎯 Objetivo:
Aprovechar un cronjob que ejecuta scripts en una carpeta específica para obtener la contraseña del usuario bandit24.

1️⃣ Revisar el cronjob del sistema

Desde el usuario bandit23, revisamos las tareas programadas en /etc/cron.d:

cat /etc/cron.d/cronjob_bandit24

📌 Salida esperada:
Pasted image 20250423174140.png
✅ Esto nos dice que el script /usr/bin/cronjob_bandit24.sh se ejecuta como bandit24, tanto al iniciar como cada minuto.

2️⃣ Revisar el script que ejecuta el cronjob

cat /usr/bin/cronjob_bandit24.sh

📌 Contenido del script:
Pasted image 20250423174205.png
🔍 ¿Qué hace este script?

3️⃣ Crear tu propio script para obtener la contraseña

Primero, crea una carpeta segura temporal y el script:

Ya tienes un buen comienzo con tu script en tu carpeta tmp:

#!/bin/bash
cat /etc/bandit_pass/bandit24 > /tmp/unai_temporal/password_bandit24.txt
chmod +x script.sh

Recuerda que el script será borrado automáticamente tras su ejecución, así que si quieres conservar una copia por si algo falla:
Pon la carpeta temporal que otro puedan para así poder el usuario bandit 24 envie la contraseña

chmod o+wx /tmp/unai_temporal

Ahora tenemos que enviarlo a /var/spool/bandit24/foo. Con el comando:

cp /tmp/unai_temporal/script.sh /var/spool/bandit24/foo/

4️⃣ Esperar la magia 🪄

El cronjob se ejecuta cada minuto, así que tras 1 min deberías poder ver:
Pasted image 20250423174102.png

sshpass -p '<contraseña>' ssh bandit24@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 24 → Level 25

🎯 Objetivo:
Conectarse a un servicio en localhost en el puerto 30002 que solicita una contraseña + PIN. El objetivo es hacer fuerza bruta sobre el PIN (de 4 cifras) y encontrar el correcto.

Información inicial:

🛠️ Script para fuerza bruta

Puedes crear un script como este:

#!/bin/bash 
for pin in {0000..9999}; 
do    echo "<contraseña> $pin"done | nc localhost 30002

💡 Asegúrate de darle permisos de ejecución:

chmod +x brute.sh

✅ Resultado
Pasted image 20250423193818.png
📥 Conéctate al siguiente nivel:

Ahora que tienes la contraseña, puedes conectarte al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit25@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 25 → Level 26

🎯 Objetivo:

Entrar como bandit26 usando una clave SSH, escapar del entorno restringido que ejecuta un script (/usr/bin/showtext) en lugar de un shell, y obtener acceso completo al sistema.

1️⃣ Obtener la clave SSH privada
Desde el usuario bandit25, puedes visualizar la clave SSH de bandit26:

cat bandit26.sshkey

Guárdala como un archivo local en tu máquina:

chmod 600 bandit26.sshkey

2️⃣ Conectarse como bandit26
Usa el siguiente comando desde tu máquina local:

ssh -i bandit26.sshkey -p 2220 bandit26@bandit.labs.overthewire.org

📛 Problema:
No obtienes un shell interactivo. En su lugar, se lanza el script /usr/bin/showtext, que utiliza more para mostrar un archivo de texto.
Pasted image 20250423195757.png
3️⃣ 🔓 Escapando del programa more
💡 Truco: more permite abrir vi, y desde vi puedes lanzar un shell.

Pasos:
Reduce el tamaño de tu terminal
Para que el contenido no quepa en pantalla y more muestre:
--More--
Presiona la tecla v
Esto abrirá el archivo en el editor vi.
Dentro de vi, escribe:

:set shell=/bin/bash
:shell

:shell
✅ ¡Ahora estás dentro de un shell real como el usuario bandit26!
Cuando nos conectamos nos echan,
Pasted image 20250424171843.png

🏴‍☠️ Bandit Level 26 → Level 27

Una vez dentro, notarás que no puedes hacer SSH de vuelta con interactividad. Pero el sistema te da una herramienta: un setuid wrapper llamado bandit27-do.

./bandit27-do cat /etc/bandit_pass/bandit27

📥 Conéctate al siguiente nivel:
Ahora que tienes la contraseña, puedes conectarte al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit27@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 27 → Level 28

🎯 Objetivo:
Clonar un repositorio Git privado usando SSH y encontrar la contraseña del siguiente nivel.
🧠 ¿Qué es GitHub?
GitHub es un portal creado para alojar el código de las aplicaciones de cualquier desarrollador. Fue comprada por Microsoft en junio del 2018.

La plataforma está diseñada para que los desarrolladores suban el código de sus aplicaciones y herramientas. Como usuario, no sólo puedes descargar la aplicación, sino también leer sobre ella o incluso colaborar con su desarrollo.

📌 Algunas características importantes:

👉 En los siguientes niveles veremos curiosidades y retos para aprender parámetros y funcionalidades del comando git.
📦 Información proporcionada:

Pasos a seguir:

mkdir /tmp/unai_temporal && cd /tmp/unai_temporal

2️⃣ Clona el repositorio:

git clone ssh://bandit27-git@localhost:2220/home/bandit27-git/repo

🔐 Ignora los mensajes de advertencia sobre la autenticidad del host y .ssh. Solo confirma con yes y proporciona la contraseña cuando se solicite.

Cloning into 'repo'... remote: Enumerating objects: 3, done. ...

3️⃣ Entra al repositorio clonado:

cd repo

4️⃣ Lista los archivos y lee el README:

ls cat README

📄 Salida:
Pasted image 20250424174911.png
📥 Conéctate al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit28@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 28 → Level 29

🎯 Objetivo:
Clonar un repositorio Git privado y buscar la contraseña del siguiente nivel a través de los cambios del proyecto.

📦 Información proporcionada:

Pasos a seguir:

1️⃣ Clona el repositorio en tu máquina:

bash

CopiarEditar

git clone ssh://bandit28-git@localhost:2220/home/bandit28-git/repo

🔐 Acepta la advertencia de autenticidad y proporciona la contraseña cuando se te solicite.

No hay nada de
Pasted image 20250424180000.png
Revisa los cambios realizados en el proyecto con git log:

git log

Pasted image 20250424180057.png
5️⃣ Analiza el cambio donde parece haber fuga de información. Verás un cambio sospechoso con un hash específico.

6️⃣ Visualiza los detalles de este cambio utilizando el hash:

git show 674690a00a0056ab96048f7317b9ec20c057c06b

📄 Salida del comando git show:
Pasted image 20250424180617.png

📥 Conéctate al siguiente nivel:

sshpass -p '<contraseña>' ssh bandit29@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 29 → Level 30

🎯 Objetivo:
Acceder al siguiente nivel revisando un repositorio Git y obteniendo la contraseña de bandit30 desde el archivo README.md.

📦 Información proporcionada:

Pasos a seguir:

1️⃣ Clonar el repositorio:

Para comenzar, debes clonar el repositorio usando el siguiente comando:

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

2️⃣ Cambiar al directorio del repositorio:

Una vez que hayas clonado el repositorio, accede a él con cd repo

3️⃣ Ver las ramas en el repositorio:

En Git, una rama es una versión separada de tu proyecto. Las ramas permiten desarrollar nuevas características o realizar cambios sin afectar el código principal. Algunas ramas pueden estar en tu máquina local y otras pueden ser remotas (en el servidor).

Para listar las ramas disponibles en el repositorio, usa:

git branch # es utilizado para listar las ramas locales en un repositorio de Git
git branch -a # Muestra una lista de **todas las ramas** en el repositorio, tanto locales como remotas.

`
La salida te mostrará algo como esto:
Pasted image 20250424181848.png
Aquí se pueden observar dos tipos de ramas:

4️⃣ Cambiar a la rama dev:

Para ver los cambios y buscar la contraseña del siguiente nivel, cambia a la rama dev con el siguiente comando:

git checkout dev

git checkout dev

5️⃣ Revisar el archivo README.md:

Ahora, revisa el contenido del archivo README.md para encontrar las credenciales del siguiente nivel:

cat README.md

La salida mostrará algo como:
Pasted image 20250424181924.png

📥 Conéctate al siguiente nivel:

sshpass -p 'qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL' ssh bandit30@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 30 → Level 31

🎯 Objetivo:
Acceder al siguiente nivel utilizando una etiqueta (tag) de Git que contiene la contraseña.
📦 Pasos a seguir:
¿Qué es un tag en Git?

En Git, un tag es como una etiqueta especial que marca un punto específico en la historia de tu proyecto. Es similar a una rama, pero con una gran diferencia: no cambia jamás. 🚀

Un tag es un nombre que apunta a un commit específico y no se mueve, lo que lo hace perfecto para marcar versiones importantes, como lanzamientos. Es decir, un tag es inmutable, siempre apunta al mismo commit y se usa para señalar momentos clave, como versiones o hitos importantes en el repositorio. 🎯
1️⃣ Clonar el repositorio:
Primero, necesitas clonar el repositorio proporcionado para empezar a trabajar con él.

git clone ssh://bandit30-git@localhost:2220/home/bandit30-git/repo

2️⃣ Accede al repositorio:

Entra en el directorio del repositorio clonado:
cd repo
3️⃣ Verifica las etiquetas (tags) en el repositorio:
Ahora, vamos a listar las etiquetas disponibles en el repositorio:

git tag

4️⃣ Acceder al contenido de la etiqueta 'secret':

Para ver el contenido de la etiqueta 'secret', usa el siguiente comando:

git show secret

La salida mostrará la contraseña, que es la siguiente:
Pasted image 20250424183508.png
📥 Conéctate al siguiente nivel:

Finalmente, conéctate al siguiente nivel utilizando la contraseña obtenida:

sshpass -p '<contraseña>' ssh bandit31@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 30 → Level 31

🎯 Objetivo: Empujar un archivo key.txt con un contenido específico al repositorio remoto.

Primero, clonamos el repositorio con el siguiente comando:

git clone ssh://bandit31-git@localhost:2220/home/bandit31-git/repo

Luego, creamos el archivo key.txt con el siguiente contenido:

nano key.txt

May I come in?
El archivo fue añadido al área de preparación con el comando:

git add -f key.txt

Realizamos un commit para registrar el archivo en el repositorio:

git commit -m "Fichero nuevo subido"

Una vez realizado el commit, ahora empujamos los cambios al repositorio remoto:

git push -u origin master

Al hacer el push, el sistema valida el archivo y, si todo está correcto, te da la contraseña para el siguiente nivel:
Pasted image 20250424184846.png
📥 Conéctate al siguiente nivel:
Finalmente, conéctate al siguiente nivel utilizando la contraseña obtenida:

sshpass -p '<contraseña>' ssh bandit32@bandit.labs.overthewire.org -p 2220

🏴‍☠️ Bandit Level 33 → Level 34

🎯 Objetivo: ¡Accede al siguiente nivel utilizando el "Uppercase Shell"! 🚀

🚨 Problema:

Al intentar usar ls, obtienes:

ls: Permission denied

🧩 Solución: ¡Usa el comando especial!

Ejecuta:
$0

Esto te llevará a un shell sin restricciones .

🎉 Final

¡Has terminado el juego de Bandit! Felicitaciones por completar todos los niveles. 🏆