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:
- Descripción del nivel: Explicación del objetivo y los conceptos involucrados.
- Instrucciones paso a paso: Guía detallada para resolver el nivel.
- Consejos y trucos: Sugerencias para abordar el problema de manera eficiente.
- 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
¡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
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
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
Si estás leyendo lograste tu primer meta vamos por más!.
Niveles 06 - 10
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.
Si estás leyendo sigue trabajando duro y vamos por más!.
Niveles 11 - 15
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.
Niveles 16 - 20
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.
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:
- Crear un archivo temporal:
cd /tmp
mkdir scriptlab
cd scriptlab
- Crear el archivo
script.sh:
vim script.sh
Contenido del archivo:
#!/bin/bash
cat /etc/bandit_pass/bandit20 > /tmp/password20.txt
- Dar permisos de ejecución:
chmod +x script.sh
- Ejecutar el programa con el script:
./suconnect 20 script.sh
- 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:
- Ve al directorio donde está el ejecutable:
cd /etc/bandit_pass
- 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?
- Accede primero para ver qué respuesta devuelve:
curl -i http://localhost:80
- 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:
- Crear un script que actúe como cliente y mande una contraseña:
#!/bin/bash
echo "contraseña_de_bandit23"
- 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:
- Crear un archivo script que imprima la contraseña:
echo "contraseña_de_bandit24" > mensaje.txt
- Levanta un servidor falso:
nc -l -p 30001 < mensaje.txt
- 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 🔐).
This will take a while, go and grab a drink of water.
The opposite of referencing by using & is dereferencing, which is
accomplished with the dereference operator, *.