Introducción

¡Bienvenido al tutorial de resolución de Over The Wire - Bandit! Este libro está diseñado para guiarte paso a paso a través de cada nivel del juego Bandit, ayudándote a aprender conceptos esenciales de seguridad informática, Linux y resolución de problemas de manera práctica y divertida.

¿Qué es Over The Wire - Bandit?

Over The Wire es una plataforma en línea que ofrece una serie de juegos de seguridad informática. Estos juegos están diseñados para enseñar habilidades de hacking ético y seguridad de sistemas de manera interactiva. Bandit es uno de los juegos más populares de la plataforma, enfocado en principiantes que desean aprender los fundamentos de Linux y la resolución de problemas mediante la explotación de vulnerabilidades simples.

Cada nivel de Bandit presenta un desafío único que requiere el uso de comandos de Linux, scripts y pensamiento lógico para avanzar. A medida que progreses, te enfrentarás a problemas más complejos que te ayudarán a desarrollar habilidades valiosas en el mundo de la seguridad informática.

¿Por qué seguir este tutorial?

Este tutorial está diseñado para ser tu compañero en el viaje de resolución de Bandit. Aquí encontrarás:

  • Explicaciones claras: Cada nivel se explica de manera sencilla, con ejemplos prácticos.
  • Consejos útiles: Trucos y sugerencias para resolver los niveles de manera eficiente.
  • Soluciones detalladas: Si te quedas atascado, puedes consultar la solución paso a paso.
  • Enfoque práctico: Aprenderás haciendo, lo que te permitirá retener mejor los conceptos.

¿A quién está dirigido este tutorial?

Este tutorial es ideal para:

  • Principiantes en Linux y seguridad informática.
  • Estudiantes que desean aprender habilidades prácticas de hacking ético.
  • Entusiastas de la tecnología que disfrutan resolviendo desafíos y puzzles.
  • Cualquier persona interesada en mejorar sus habilidades en la terminal de Linux.

Requisitos previos

Para aprovechar al máximo este tutorial, necesitarás:

  • Conocimientos básicos de Linux (comandos como ls, cd, cat, etc.).
  • Acceso a una terminal o consola.
  • Conexión a Internet para acceder a los servidores de Over The Wire.
  • Ganas de aprender y resolver problemas.

Cómo usar este libro

Este libro está organizado por niveles, siguiendo la estructura del juego Bandit. Cada nivel incluye:

  1. Descripción del nivel: Explicación del objetivo y los conceptos involucrados.
  2. Instrucciones paso a paso: Guía detallada para resolver el nivel.
  3. Consejos y trucos: Sugerencias para abordar el problema de manera eficiente.
  4. Solución: Respuesta final para aquellos que se quedan atascados.

Puedes seguir el libro en orden o saltar directamente a los niveles que te interesen. ¡Tú decides cómo aprender!

Adicionales

Directorios útiles

/etc/bandit_pass/
/tmp
/dev/null

¡Comencemos!

Ahora que sabes qué esperar, es hora de sumergirte en el mundo de Bandit. Prepárate para aprender, resolver problemas y, sobre todo, divertirte. ¡Vamos a conquistar Bandit juntos!


Si tienes alguna pregunta o sugerencia, no dudes en contactarme o abrir un issue en el repositorio. ¡Buena suerte y que comience el desafío! 🚀

Niveles 0-5


Recomendaciones

Intenta no copiar los comandos, escríbelos para buscar la mayor retención posible

Nivel 0

Acceso

Para acceder al servidor usa las siguiete conexión ssh

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

La contraseña para tu primer nivel será:

bandit0

A continuación abre el archivo readme

cat readme

Note

Por último copia la clave para usarla para pasar al siguiente nivel.



Nivel 01

Para este nivel tienes que abrir el archivo '-'

cat <-

Copia la contraseña para acceder al siguiente nivel



Nivel 02

A continuación abre el archivo 'spaces in this filename'

cat spaces \in \this \filename

Ahora copia la contraseña para acceder al siguiente nivel.



Nivel 03

A continuación cambia de ubicación a inhere

cd inhere

Abre el archivo oculto

 cat ...Hiding-From-You

Copia la contraseña para pasar al siguiente nivel.



Nivel 04

A continuación cambia de ubicación a inhere

cd inhere

Vamos a verificar los tipos de archivos que hay en el directorio actual

file ./*

Ahora tenemos que abrir el archivo que contiene formato tipo texto ASCII

cat <-file07

Ahora guarda la contraseña para pasar al siguiente nivel.



Nivel 05

Busca el archivo que tenga las características descritas en Bandit

find ./* -size 1033c -not -executable

Abre el archivo que coincida

cat ./inhere/maybehere07/.file2

Ahora guarda la contraseña para pasar al siguiente nivel



Felicidades por pasar tus primeros 5 niveles!

Si estás leyendo lograste tu primer meta vamos por más!.

Niveles 06 - 10


Recomendaciones

Recuerda revisar el apartado de tareas!

Nivel 06

Busca el archivo que tenga las características descritas en Bandit

find /* -user bandit7 -group bandit6 -size 33c 2>/dev/null
cat ./inhere/maybehere07/.file2

Ahora guarda la contraseña para pasar al siguiente nivel



Nivel 07

Abre el archivo data txt y busca la coincidencia con la palabra millionth

cat data.txt| grep millionth

Ahora copia la contraseña para acceder al siguiente nivel.



Nivel 08

Para este nivel abre data.txt ordenalo y busca la única lina que ocurre una sola vez.

cat data.txt | sort | uniq -u

Ahora copia la contraseña para acceder al siguiente nivel.



Nivel 09

Abre data.txt filtrando el contenido por contenido legible por el humano, después busca los signos '==='

strings data.txt | grep ==

Ahora copia la contraseña para acceder al siguiente nivel.



Nivel 10

Decodifica el contenido base64 de data.txt

 cat data.txt | base64 -d

Ahora copia la contraseña para acceder al siguiente nivel.



Felicidades por pasar los primeros 10 niveles!

Si estás leyendo sigue trabajando duro y vamos por más!.

Niveles 11 - 15


Recomendaciones

¡Vas a empezar niveles más difíciles!

Recuerda tomar descansos!

Nivel 11

Decodifica el contenido de data.txt con ROT13

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

Ahora copia la contraseña para acceder al siguiente nivel.



Nivel 12

Configura tu entorno de trabajo.

cd /tmp | mktemp -d

El resultado del anterior comando deberás usarlo par ir a esa dirección:

 cd /tmp/tmp.OI1B9JR1PW

Una vez en el directorio temporal copia el archivo data.txt y renombralo sin extensión para un mejor manejo

 cp ~/data.txt hexdump

Revertir el hexdump

xxd -r hexdump compfile

Vamos a verificar los primeros bits del hexadecimal, esto nos dará el tipo de archivo en el que estamos trabajando, para eso tenemos que usar el siguiente comando:

xxd compfile| head

Cambiaremos el nombre del archivo para añadirle la extensón que le corresponda

mv compfile compfile.gz

Ahora a descomprimir

 gzip -d compfile.gz

Verificaremos nuevamente el encabezado hexadecimal

xxd compfile| head

Añadiremos la extensión .bz2

mv compfile compfile.bz2

Descomprime

bzip2 -d compfile.bz2

Cambia la extensión y vuelve a descomprimir

mv compfile compfile.gz | gzip -d compfile.gz

Verificamos el encabezado hexadecimal nuevamente.

Cambiamos la extensión y descomprimimos:

 mv compfile compfile.tar | tar -xf compfile.tar

Vemos que el resultado anterior fue un archivo nuevo llamado data5.bin

Verificamos el encabezado del nuevo archivo

Lo procedemos a extraer:

 tar -xf data5.bin

Vemos que el resultado anterior fue un archivo nuevo llamado data6.bin

Verificamos el encabezado del nuevo archivo

Lo procedemos a renombrar y a extraer:

mv data6.bin data6.bz2 | bzip2 -d data6.bz2

Verificamos el encabezado del resultado anterior

Lo procedemos a renombrar y a extraer:

 mv data6 data6.tar | tar -xf data6.tar

Verificamos el encabezado del resultado anterior

Lo procedemos a renombrar y a extraer:

 mv data8.bin data8.gz| gzip -d data8.gz

Ahora abriremos el ultimo resultado:

cat data8

Ahora copia la contraseña para acceder al siguiente nivel.



Nivel 13

Usaremos una llave privada para acceder al siguiente nivel.

Dentro del nivel 13 poner el siguiente comando:

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


Nivel 14

Abriremos la contraseña del nivel actual:

 cat /etc/bandit_pass/bandit14

Ahora vamos a copiar el resultado anterior

Mandaremos la información al localhost en puerto 30000

nc localhost 30000

Pega aquí la contraseña del primer paso

Ahora copia la contraseña para acceder al siguiente nivel.



Nivel 15

Enviaremos la contraseña de este nivel al localhost en puerto 30001 usando encriptación SSL/TLS:

openssl s_client -connect localhost:30001

Pega aquí la contraseña actual

Ahora copia la contraseña para acceder al siguiente nivel.



Felicidades !!!!!!!

Superaste una etapa desafiante vamos por más! 🔥

Niveles 16 - 20

Recomendaciones

¡Vas a empezar niveles más difíciles!

Recuerda tomar descansos!

Nivel 16

Ahora, debemos tener a mano la contraseña que utilizamos para acceder a este nivel.

Si no la guardaste puedes consultarla en:

cat /etc/bandit_pass/bandit16

Para este nivel haremos un escaneo de puertos, será en en rango de 31000 a 32000

 nmap -sV localhost -p 31000-32000

El resultado del escaneo de puertos nos arrojó que el puerto más probable sería el 31790 potque maneja SSL/Unknown quiere decir que aparte de SSL maneja otro servicio y esto nos hace pensar que es el adecuado.

Para enviar la contraseña usando ssl tenemos que poner el siguiente comando y pegar la contraseña para acceder a este nivel:

openssl s_client -quiet -connect localhost:31790

Copiar la llave privada.

Nos dirijiremos a el directorio /tmp.

Para poder trabajar y crear archivos necesitamos un directorio temporal.

cd /tmp | mktemp -d

Con el comando anterior nos devuelve una salida con el directorio temporal creado, ahora tenemos que cambiar al nuevo directorio creado

cd /tmp/(DirectorioTemporalGenerado)

Vamos a crear un archivo de llave privada.

vim id_rsa

Ahora debemos de usar el editor vim, siguiendo estos pasos:

  • esc

    • i
  • ctrl+v

  • esc

    • :wq

Cambiaremos los permisos de la llave que acabamos de crear.

chmod 400 id_rsa

Usaremos la siguiente instrucción para acceder al siguiente nivel.

Este comando utiliza la llave que acabamos de crear .

 ssh -i id_rsa bandit17@localhost -p 2220


Nivel 17

Vamos a comparar los documentos y veremos cuales son las lineas que cambian entre uno y otro

diff passwords.old passwords.new

Las lineas de salida que tenemos en este comando se mostraran en el mismo orden en el que pusimos los archivos por lo que la segunda linea es nuestra contraseña

Ahora copia la contraseña para acceder al siguiente nivel.



Felicidades !!!!!!!

Superaste una etapa desafiante vamos por más! 🔥


Nivel 18 🚪🔐

En este nivel, el archivo readme está vacío, pero hay una trampa: ¡el archivo está oculto!

🔍 ¿Qué pasa? Al iniciar sesión, el sistema te desconecta inmediatamente.

🧠 ¿Cómo lo resolvemos?

Vamos a usar el comando ssh con una opción extra para que ejecute un comando directamente, en lugar de abrir una shell interactiva.

ssh bandit18@localhost -p 2220 "cat readme"

📋 La contraseña para el siguiente nivel aparecerá como salida del comando.


Nivel 19 🕵️‍♂️🧱

Aquí el sistema mata automáticamente cualquier shell interactiva que no sea del propio usuario.

🔑 Entonces, debemos "engañar" al sistema para que piense que somos bandit18 mientras ejecutamos el siguiente comando.

🎩 Usamos ssh con una combinación especial:

ssh -p 2220 -i ./id_rsa bandit18@localhost "cat readme"

O también puedes usar este truco con setuid:

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

💡 Aquí bandit20-do es un ejecutable especial con privilegios del siguiente usuario.


Nivel 20 🧬🔗

Ahora necesitamos crear un script personalizado que será ejecutado por el programa suconnect.

🎯 Este script debe escribir la contraseña en un archivo accesible para nosotros.

🧪 Pasos:

  1. Crear un archivo temporal:
cd /tmp
mkdir scriptlab
cd scriptlab
  1. Crear el archivo script.sh:
vim script.sh

Contenido del archivo:

#!/bin/bash
cat /etc/bandit_pass/bandit20 > /tmp/password20.txt
  1. Dar permisos de ejecución:
chmod +x script.sh
  1. Ejecutar el programa con el script:
./suconnect 20 script.sh
  1. Leer el archivo de salida:
cat /tmp/password20.txt

🎉 ¡Y listo! Tienes la contraseña del nivel 20.


Nivel 20-25


Nivel 21 🧾📡

🧠 En este nivel tenemos un programa que escucha conexiones en un puerto específico. Nuestra misión es enviarle un mensaje especial.

🔧 Pasos:

  1. Ve al directorio donde está el ejecutable:
cd /etc/bandit_pass
  1. Corre el binario con nc (netcat):
./suconnect 22

Te dirá que espera una clave específica. Esa clave está en el archivo:

cat /etc/bandit_pass/bandit21

📤 Después, debes conectar al puerto correcto y enviar la contraseña.


Nivel 22 🌐🔎

Aquí necesitamos conectarnos a un servidor HTTP que solo acepta conexiones desde localhost.

🔧 Solución: usamos curl para hacer la solicitud desde dentro del servidor:

curl http://localhost:80

🧠 Si ves que responde con HTML, perfecto. Ahora, busca el endpoint secreto:

curl http://localhost:80/index.html

Inspecciona el contenido y sigue los enlaces hasta encontrar la contraseña. Usa comandos como:

curl -s http://localhost:80/secret-directory/

Nivel 23 🧩🔒

🎯 El servidor ahora espera una cookie especial. Si no la mandas, no da acceso.

🍪 ¿Cómo hacerlo?

  1. Accede primero para ver qué respuesta devuelve:
curl -i http://localhost:80
  1. Luego usa la cookie que te pide:
curl --cookie "foo=bar" http://localhost:80

Reemplaza "foo=bar" por lo que el servidor espera. Con un poco de prueba y error (o viendo pistas en el HTML), llegas a la contraseña.


Nivel 24 ⚙️🔁

Este reto nos da un binario llamado bandit24 que se comporta como un servidor esperando conexiones.

👣 Lo que tienes que hacer es:

  1. Crear un script que actúe como cliente y mande una contraseña:
#!/bin/bash
echo "contraseña_de_bandit23"
  1. Luego conecta usando netcat:
./bandit24 &  # Esto lo ejecuta en segundo plano
nc localhost 30002 < script.sh

💥 Te devuelve la contraseña si todo va bien.


Nivel 25 🔂🔐

Este es el nivel final del reto Bandit 🎉

🔍 El binario bandit25 se conecta a un servidor externo remoto.

🧠 ¿El truco? Simular ese servidor externo en tu máquina y hacer que el programa se conecte a ti en vez del original.

⚙️ Pasos:

  1. Crear un archivo script que imprima la contraseña:
echo "contraseña_de_bandit24" > mensaje.txt
  1. Levanta un servidor falso:
nc -l -p 30001 < mensaje.txt
  1. Luego ejecuta el binario para que se conecte a ese puerto:
./bandit25 localhost 30001

🚀 Y con eso deberías obtener la contraseña del último nivel.


🎉 ¡Felicidades hacker! 🧠💻

Si llegaste hasta aquí, dominaste una tonelada de herramientas útiles de Linux y pentesting básico. Prepárate para retos aún más complejos (como Narnia, Leviathan o Krypton 🔐).

Info

My example is the best!

Example

My example is the best!

Note

A plain note.

Data loss

The following steps can lead to irrecoverable data corruption.

This will take a while, go and grab a drink of water.

Referencing and dereferencing

The opposite of referencing by using & is dereferencing, which is accomplished with the dereference operator, *.

Bug

This syntax won't work in Python 3:

print "Hello, world!"