OverTheWire Bandit
Domina los fundamentos de seguridad Linux a través de 34 niveles progresivos. Una guía completa de mi experiencia en penetration testing y hacking ético.
Niveles de Dificultad
Explora cada nivel con soluciones detalladas, explicaciones técnicas y comandos prácticos que yo mismo he implementado.
Niveles 0-5
BÁSICOComandos fundamentales de Linux, navegación del sistema de archivos y conceptos básicos de seguridad.
Niveles 6-11
INTERMEDIOBúsquedas avanzadas, manipulación de texto y técnicas de codificación/decodificación.
Niveles 12-17
AVANZADOCompresión múltiple, claves SSH, comunicación por puertos y conexiones SSL.
Niveles 18-23
EXPERTOBinarios setuid, programación de red, análisis de scripts y trabajos cron.
Niveles 24-29
MASTERBrute force, escape de terminales, explotación de editores y repositorios Git.
Niveles 30-33
LEGENDARYGit avanzado, tags, push remoto, restricciones de shell y desafío final.
Guía Detallada de Niveles
Soluciones paso a paso, comandos explicados y técnicas de hacking ético aplicadas
BÁSICO Niveles 0-5: Fundamentos de Linux
Primer Acceso SSH
🎯 Objetivo
Conectarse al juego usando SSH. El host es bandit.labs.overthewire.org, puerto 2220, usuario bandit0 y contraseña bandit0.
💡 Solución
ssh bandit0@bandit.labs.overthewire.org -p 2220
📚 Explicación
Este es el punto de entrada al CTF. SSH (Secure Shell) es un protocolo de red criptográfico para conexiones seguras a sistemas remotos.
Lectura de Archivos Básica
🎯 Objetivo
La contraseña para el siguiente nivel está almacenada en un archivo llamado 'readme' en el directorio home.
💡 Solución
pwd # Ver ubicación actual
ls # Listar archivos
cat readme # Leer contenido del archivo
📚 Explicación
pwd
: Muestra el directorio de trabajo actualls
: Lista los archivos y directorioscat
: Muestra el contenido de un archivo
Archivos con Nombres Especiales
🎯 Objetivo
La contraseña está en un archivo llamado '-' en el directorio home.
💡 Solución
cat ./-
📚 Explicación
El guión '-' tiene significado especial en Unix (representa stdin/stdout). Para leer un archivo con este nombre, usamos './-' especificando la ruta relativa.
Archivos con Espacios
🎯 Objetivo
La contraseña está en un archivo llamado 'spaces in this filename'.
💡 Solución
cat "spaces in this filename"
📚 Explicación
Los espacios en nombres de archivo requieren comillas dobles o simples para ser interpretados como un solo argumento por la shell.
Archivos Ocultos
🎯 Objetivo
La contraseña está en un archivo oculto en el directorio 'inhere'.
💡 Solución
cd inhere
ls -la
cat ...Hiding-From-You
📚 Explicación
Los archivos que comienzan con punto (.) están ocultos en sistemas Unix. La opción -a
de ls
muestra todos los archivos, incluyendo los ocultos.
Identificación de Tipos de Archivo
🎯 Objetivo
La contraseña está en el único archivo legible (ASCII text) del directorio 'inhere'.
💡 Solución
cd inhere
file ./* # Identificar tipos de archivo
cat ./-file07 # Leer el archivo ASCII text
📚 Explicación
El comando file
identifica el tipo de contenido de los archivos. Solo buscamos archivos "ASCII text" que sean legibles por humanos.
Búsqueda Avanzada con Find
🎯 Objetivo
Encontrar un archivo con: tamaño 1033 bytes, legible por humanos y no ejecutable.
💡 Solución
cd inhere
find . -type f -size 1033c ! -executable -exec file {} \;
📚 Explicación
-type f
: Solo archivos regulares-size 1033c
: Exactamente 1033 bytes! -executable
: No ejecutable-exec file {} \;
: Ejecuta 'file' en cada resultado
INTERMEDIO Niveles 6-11: Búsquedas y Codificación
Búsqueda con Permisos Específicos
🎯 Objetivo
Encontrar un archivo que pertenezca al usuario bandit7, grupo bandit6 y tenga 33 bytes de tamaño.
💡 Solución
find / -type f -user bandit7 -group bandit6 -size 33c 2>/dev/null
📚 Explicación
-user bandit7
: Pertenece al usuario bandit7-group bandit6
: Pertenece al grupo bandit62>/dev/null
: Oculta errores de permisos denegados
Búsqueda en Texto con Grep
🎯 Objetivo
La contraseña está en data.txt junto a la palabra "millionth".
💡 Solución
grep millionth data.txt
📚 Explicación
grep
busca patrones de texto en archivos. Es fundamental para filtrar información en sistemas Linux.
Líneas Únicas con Sort y Uniq
🎯 Objetivo
Encontrar la única línea de texto que aparece solo una vez en data.txt.
💡 Solución
sort data.txt | uniq -u
📚 Explicación
sort
: Ordena las líneas alfabéticamenteuniq -u
: Muestra solo líneas únicas (no duplicadas)|
: Pipe - pasa la salida de un comando al siguiente
Strings y Caracteres Especiales
🎯 Objetivo
La contraseña está en una cadena legible precedida por varios caracteres "=".
💡 Solución
strings data.txt | grep "=" | tail -1
📚 Explicación
strings
extrae texto legible de archivos binarios. Útil para analizar ejecutables y archivos no texto.
Decodificación Base64
🎯 Objetivo
El archivo data.txt contiene datos codificados en Base64.
💡 Solución
base64 -d data.txt
📚 Explicación
Base64 es un sistema de codificación que convierte datos binarios en texto ASCII. La opción -d
decodifica.
Cifrado ROT13
🎯 Objetivo
El texto está cifrado con ROT13 (rotación de 13 posiciones en el alfabeto).
💡 Solución
cat data.txt | tr "a-zA-Z" "n-za-mN-ZA-M"
📚 Explicación
ROT13 es un cifrado Caesar simple. tr
traduce caracteres: cada letra se desplaza 13 posiciones en el alfabeto.
AVANZADO Niveles 12-17: Compresión y SSH
Descompresión Múltiple
🎯 Objetivo
Un hexdump de un archivo comprimido múltiples veces con diferentes algoritmos.
💡 Solución
mktemp -d
cp data.txt /tmp/workdir/
xxd -r data.txt > compressed_data
file compressed_data
# Repetir: mv, gzip -d, bzip2 -d, tar -xf...
📚 Explicación
Proceso iterativo de identificación y descompresión: gzip, bzip2, tar. file
identifica el tipo de compresión.
Autenticación con Clave SSH
🎯 Objetivo
Usar una clave SSH privada para conectarse a bandit14.
💡 Solución
ssh -i sshkey.private bandit14@localhost -p 2220
cat /etc/bandit_pass/bandit14
📚 Explicación
Autenticación SSH con clave privada. -i
especifica el archivo de identidad (clave privada).
Comunicación por Puerto con Netcat
🎯 Objetivo
Enviar la contraseña actual al puerto 30000 en localhost.
💡 Solución
echo "MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS" | nc localhost 30000
📚 Explicación
netcat (nc)
es la "navaja suiza" de las redes. Permite conexiones TCP/UDP y transferencia de datos.
Conexión SSL/TLS con OpenSSL
🎯 Objetivo
Enviar la contraseña al puerto 30001 usando cifrado SSL/TLS.
💡 Solución
echo "8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo" | openssl s_client -connect localhost:30001 -quiet
📚 Explicación
OpenSSL permite conexiones seguras cifradas. s_client
actúa como cliente SSL/TLS.
Escaneo de Puertos y SSL
🎯 Objetivo
Encontrar el puerto correcto entre 31000-32000 que acepta SSL y devuelve una clave SSH.
💡 Solución
nmap -p 31000-32000 localhost
# Probar puertos SSL hasta encontrar el correcto
openssl s_client -connect localhost:31790 -quiet
# Introducir contraseña: kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx
📚 Explicación
Combina escaneo de puertos con nmap
y pruebas SSL. El servidor correcto devuelve una clave SSH privada.
Comparación de Archivos con Diff
🎯 Objetivo
Encontrar la diferencia entre passwords.old y passwords.new.
💡 Solución
diff passwords.old passwords.new
📚 Explicación
diff
compara archivos línea por línea. Muestra las diferencias con > y < indicando qué archivo contiene cada línea.
EXPERTO Niveles 18-23: SetUID y Scripting
Bypass de .bashrc
🎯 Objetivo
El .bashrc está modificado para cerrar la sesión. Ejecutar comando antes del cierre.
💡 Solución
ssh bandit18@bandit.labs.overthewire.org -p 2220 "cat readme"
📚 Explicación
SSH permite ejecutar comandos remotos sin shell interactiva, evitando la ejecución de .bashrc.
Binario SetUID
🎯 Objetivo
Usar un binario setUID para ejecutar comandos como otro usuario.
💡 Solución
./bandit20-do cat /etc/bandit_pass/bandit20
📚 Explicación
SetUID permite que un programa se ejecute con permisos del propietario del archivo, no del usuario que lo ejecuta.
Cliente-Servidor con Netcat
🎯 Objetivo
Crear un servidor que envíe la contraseña actual al cliente setUID.
💡 Solución
# Terminal 1:
echo "0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO" | nc -l -p 1234
# Terminal 2:
./suconnect 1234
📚 Explicación
Comunicación cliente-servidor usando netcat. El servidor envía datos que el cliente setUID valida.
Trabajos Cron Básicos
🎯 Objetivo
Analizar trabajos cron para encontrar donde se almacena la contraseña.
💡 Solución
cat /etc/cron.d/cronjob_bandit22
cat /usr/bin/cronjob_bandit22.sh
cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
📚 Explicación
Cron ejecuta tareas programadas. Los scripts generalmente guardan resultados en archivos temporales.
Análisis de Scripts Cron
🎯 Objetivo
Analizar un script cron que genera nombres de archivo basados en el usuario.
💡 Solución
echo I am user bandit23 | md5sum | cut -d " " -f 1
cat /tmp/8ca319486bfbbc3663ea0fbe81326349
📚 Explicación
El script genera un hash MD5 del texto "I am user bandit23" para crear un nombre de archivo único.
Creación de Scripts Personalizados
🎯 Objetivo
Crear un script que sea ejecutado por cron para obtener la contraseña.
💡 Solución
mktemp -d
echo "#!/bin/bash
cat /etc/bandit_pass/bandit24 > /tmp/mypass24.txt" > /var/spool/bandit24/foo/getpass.sh
chmod +x /var/spool/bandit24/foo/getpass.sh
# Esperar ejecución de cron
cat /tmp/mypass24.txt
📚 Explicación
Escribir scripts personalizados que serán ejecutados por cron con privilegios de otro usuario.
MASTER Niveles 24-29: Brute Force y Git
Ataque de Fuerza Bruta
🎯 Objetivo
Realizar fuerza bruta en un PIN de 4 dígitos en el puerto 30002.
💡 Solución
for i in {0000..9999}; do
echo "gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8 $i"
done | nc localhost 30002 | grep -v "Wrong"
📚 Explicación
Ataque de fuerza bruta sistemático. Se prueban todas las combinaciones posibles de 0000 a 9999.
Escape de Shell Restringida
🎯 Objetivo
Escapar de una shell restringida (more) para acceder a comandos del sistema.
💡 Solución
ssh bandit25@localhost -p 2220 -i bandit26.sshkey
# Redimensionar terminal para activar more
# Presionar 'v' para abrir vim
# En vim ejecutar:
:set shell=/bin/bash
:shell
📚 Explicación
Shell escape via more
→ vim
. Se aprovecha que vim puede cambiar su shell y ejecutar comandos del sistema.
Escalada con SetUID via Vim
🎯 Objetivo
Usar vim para explotar un binario setUID y obtener acceso privilegiado.
💡 Solución
# Continuando desde el nivel 25
# Ya con shell de bandit26:
ls -la
./bandit27-do cat /etc/bandit_pass/bandit27
📚 Explicación
Continuación del escape anterior. Una vez con shell completa, se puede usar el binario setUID para leer archivos privilegiados.
Clonado de Repositorio Git
🎯 Objetivo
Clonar un repositorio Git y encontrar la contraseña en los archivos.
💡 Solución
mktemp -d
cd /tmp/tmp.XXXXXX
git clone ssh://bandit27-git@localhost/home/bandit27-git/repo
cd repo
cat README
📚 Explicación
Introducción a Git. Se clona un repositorio remoto y se examina su contenido para encontrar información sensible.
Historial de Git
🎯 Objetivo
Examinar el historial de commits de Git para encontrar información eliminada.
💡 Solución
mktemp -d
cd /tmp/tmp.XXXXXX
git clone ssh://bandit28-git@localhost/home/bandit28-git/repo
cd repo
git log --oneline
git show HEAD~1
📚 Explicación
Git mantiene historial completo. Información "eliminada" en commits recientes puede estar en commits anteriores.
Ramas de Git
🎯 Objetivo
Explorar diferentes ramas de Git para encontrar información oculta.
💡 Solución
mktemp -d
cd /tmp/tmp.XXXXXX
git clone ssh://bandit29-git@localhost/home/bandit29-git/repo
cd repo
git branch -a
git checkout dev
cat README.md
📚 Explicación
Los desarrolladores a menudo usan ramas para desarrollo. Información sensible puede estar en ramas no principales.
LEGENDARIO Niveles 30-33: Git Avanzado y Desafío Final
Tags de Git
🎯 Objetivo
Explorar tags de Git para encontrar versiones específicas con información.
💡 Solución
mktemp -d
cd /tmp/tmp.XXXXXX
git clone ssh://bandit30-git@localhost/home/bandit30-git/repo
cd repo
git tag
git show secret
📚 Explicación
Los tags en Git marcan versiones específicas. Información importante puede estar etiquetada para fácil referencia.
Push a Repositorio Remoto
🎯 Objetivo
Crear un archivo, hacer commit y push para obtener la contraseña del servidor.
💡 Solución
mktemp -d
cd /tmp/tmp.XXXXXX
git clone ssh://bandit31-git@localhost/home/bandit31-git/repo
cd repo
echo "May I come in?" > key.txt
git add -f key.txt
git commit -m "Add key"
git push origin master
📚 Explicación
Git hooks del servidor pueden ejecutar código al recibir pushes. Se usa -f
para forzar archivos ignorados por .gitignore.
Escape de UPPERCASE Shell
🎯 Objetivo
Escapar de una shell que convierte todo a mayúsculas usando variables especiales.
💡 Solución
# En la UPPERCASE shell:
$0
# Ahora en shell normal:
cat /etc/bandit_pass/bandit33
📚 Explicación
$0
es una variable especial que contiene el nombre del shell actual, permitiendo escape de shells restringidas.
¡Felicidades! Has Completado Bandit
🎯 Objetivo
¡Has completado todos los niveles de Bandit! Este es el nivel final de reconocimiento.
🎉 ¡Enhorabuena!
BANDIT COMPLETADO
🚀 RECURSOS
OverTheWire Universe
Explora más wargames de OverTheWire como Leviathan, Natas, Krypton y más.
Explorar Wargames →Guía Linux
Guía de linux que nomina cada comando, cada herramienta.
Explorar Guía →CTF Arena Global
Página oficial de CTF de hackers éticos. Compite, aprende, conquista.
Entrar a la Arena →🎓 Reflexiones
Bandit no ha sido solo un CTF. Ha sido mi primer reto de iniciación al mundo de la ciberseguridad. Cada nivel era una barrera mental, pero con cada comando exitoso ha ayudado a forjar mi identidad como hacker. He aprendido a pensar como un atacante, a buscar vulnerabilidades y a entender la importancia de la seguridad en el mundo digital.
Habilidades Adquiridas
🚀 ¿Te ha gustado este proyecto?
Conecta conmigo y explora más proyectos de ciberseguridad