Tutoriales

OverTheWire Bandit: guía de los niveles 0 al 15 con pistas y comandos

Resuelve OverTheWire Bandit del nivel 0 al 15: qué enseña cada nivel, pistas y los comandos Linux que lo resuelven, sin destripar las contraseñas.

Publicado el 3 de noviembre de 202612 min de lectura0 views

OverTheWire Bandit es el primer wargame que casi todo el mundo recomienda para empezar en el hacking ético, y con razón: te obliga a moverte por una terminal Linux real para encontrar la contraseña de cada nivel. En esta guía repasamos los niveles 0 al 15 uno por uno: qué te piden, qué concepto de Linux enseñan, una pista para que lo intentes por tu cuenta y los comandos que lo resuelven. Lo que no vas a encontrar aquí son las contraseñas: cambian periódicamente y copiarlas te quita justo lo que el juego te enseña.

Qué es OverTheWire Bandit y por qué empezar por aquí

OverTheWire es una comunidad que mantiene varios wargames gratuitos. Bandit es el de nivel más básico: cada nivel es un usuario en un servidor Linux (bandit0, bandit1, bandit2...) y tu objetivo es encontrar la contraseña del siguiente usuario escondida en algún sitio del sistema. No hay que instalar nada raro ni hay interfaz gráfica: solo tú, SSH y la terminal.

Eso lo convierte en el mejor entrenamiento para lo que vendrá después. Casi todas las máquinas de CTF y los laboratorios de pentesting asumen que sabes listar archivos ocultos, buscar con find, filtrar con grep o decodificar Base64 sin pensarlo. Bandit te enseña exactamente eso, paso a paso. Si todavía no tienes claro el camino general, lee antes cómo aprender hacking ético desde cero.

Antes de empezar: cómo conectarte y cómo trabajar

Necesitas un cliente SSH. En Linux y macOS ya viene instalado, y en Windows 10/11 también (desde PowerShell). Si quieres un entorno de prácticas completo, te sirve una máquina virtual con Kali: lo explicamos en Kali Linux para principiantes.

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

Fíjate en el -p 2220: el servidor no escucha en el puerto 22 estándar. La contraseña del nivel 0 te la da la propia web del juego. A partir de ahí, cada contraseña que encuentres te sirve para entrar como el siguiente usuario: ssh bandit1@bandit.labs.overthewire.org -p 2220, y así sucesivamente.

Tres hábitos que te ahorrarán tiempo:

  • Apunta las contraseñas en un archivo de tu ordenador, no en el servidor. Si cierras sesión, podrás volver al último nivel sin repetir nada.
  • Lee la página de cada nivel en la web de OverTheWire. Incluye la lista de comandos que probablemente necesitarás: es la mejor pista que existe.
  • Usa man. man find o man tar te dan la respuesta oficial. Aprender a leer manuales es parte del juego.

Niveles 0 a 5: moverte por el sistema de archivos

Nivel 0 → 1: leer un archivo

Objetivo: la contraseña está en un archivo llamado readme en tu directorio personal.

Concepto: listar archivos y mostrar su contenido. ls enseña lo que hay en una carpeta y cat imprime un archivo en pantalla.

ls
cat readme

Nivel 1 → 2: un archivo llamado "-"

Objetivo: la contraseña está en un archivo llamado -.

Concepto: para muchos programas, - no es un nombre de archivo sino "la entrada estándar". Si escribes cat -, el comando se queda esperando a que teclees algo.

Pista: dale al comando una ruta que no se pueda confundir con una opción. ./ significa "en el directorio actual".

cat ./-

Nivel 2 → 3: espacios (y guiones) en el nombre

Objetivo: la contraseña está en un archivo cuyo nombre contiene espacios. En la versión actual del juego, además, empieza y termina con guiones (--spaces in this filename--).

Concepto: la shell separa los argumentos por espacios, así que cat spaces in this filename intenta abrir cuatro archivos distintos. Hay que entrecomillar el nombre o escapar cada espacio con \. Y si empieza por --, también hay que evitar que se lea como opción.

Pista: escribe las primeras letras y pulsa Tab; el autocompletado escapa el nombre por ti.

cat ./"--spaces in this filename--"
# alternativa: "--" indica a cat que ya no vienen más opciones
cat -- "--spaces in this filename--"

Nivel 3 → 4: archivos ocultos

Objetivo: la contraseña está en un archivo oculto dentro del directorio inhere.

Concepto: en Linux, cualquier archivo cuyo nombre empiece por punto (.) está oculto y ls no lo muestra. La opción -a enseña todo, y -l añade permisos, propietario y tamaño.

ls -la inhere
cat inhere/<nombre_del_archivo_oculto>

Este ls -la lo vas a escribir miles de veces en tu vida: los archivos ocultos (configuraciones, claves, historiales) son de lo primero que se revisa en cualquier máquina.

Nivel 4 → 5: el único archivo legible

Objetivo: en inhere hay diez archivos (-file00 a -file09) y solo uno contiene texto legible.

Concepto: el comando file identifica el tipo de un archivo mirando su contenido, no su extensión. Los demás archivos son datos binarios.

Pista: los nombres empiezan por guion otra vez; ya sabes cómo resolverlo.

file ./inhere/*
cat ./inhere/-file0X   # el que aparezca como "ASCII text"

Nivel 5 → 6: buscar por propiedades

Objetivo: el archivo está en algún lugar bajo inhere (hay muchas subcarpetas) y es legible, ocupa exactamente 1033 bytes y no es ejecutable.

Concepto: find recorre directorios y filtra por nombre, tipo, tamaño, permisos o propietario. En -size, el sufijo c significa bytes; sin él, find cuenta en bloques de 512 bytes.

find inhere -type f -size 1033c ! -executable

Niveles 6 a 11: buscar, filtrar y decodificar

Nivel 6 → 7: buscar en todo el servidor

Objetivo: el archivo está "en algún lugar del servidor", pertenece al usuario bandit7, al grupo bandit6 y ocupa 33 bytes.

Concepto: buscar desde la raíz / con filtros de propietario y grupo. Saldrán cientos de errores de "Permission denied"; 2>/dev/null redirige la salida de errores (descriptor 2) a la nada para que solo veas los resultados.

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

Esta misma técnica es la que se usa en escalada de privilegios para localizar archivos de otros usuarios o binarios con permisos especiales.

Nivel 7 → 8: grep

Objetivo: la contraseña está en data.txt, al lado de la palabra millionth.

Concepto: el archivo es enorme; leerlo con cat no es práctico. grep muestra solo las líneas que contienen un patrón.

grep millionth data.txt

Nivel 8 → 9: la línea que no se repite

Objetivo: en data.txt, la contraseña es la única línea que aparece una sola vez.

Concepto: tuberías (|). uniq solo detecta duplicados consecutivos, por eso primero hay que ordenar con sort. La opción -u de uniq muestra solo las líneas únicas.

sort data.txt | uniq -u

Un error muy común es probar uniq -u data.txt sin ordenar y no entender por qué salen cientos de líneas.

Nivel 9 → 10: texto dentro de un binario

Objetivo: data.txt es mayoritariamente binario; la contraseña es una de las pocas cadenas legibles y va precedida de varios signos =.

Concepto: strings extrae las secuencias de caracteres imprimibles de cualquier archivo. Es una herramienta básica en análisis de malware e ingeniería inversa.

strings data.txt | grep "=="

Nivel 10 → 11: Base64

Objetivo: data.txt contiene datos codificados en Base64.

Concepto: Base64 no es cifrado, es una codificación para transportar datos como texto. Cualquiera puede revertirla. Lo reconocerás por sus letras, números, +, / y, a menudo, = al final.

base64 -d data.txt

Nivel 11 → 12: ROT13 con tr

Objetivo: en data.txt, todas las letras han sido rotadas 13 posiciones.

Concepto: ROT13 es un cifrado César con desplazamiento 13. Como el alfabeto tiene 26 letras, aplicarlo dos veces devuelve el texto original. tr traduce caracteres de un conjunto a otro: aquí, la A pasa a ser N, la B a ser O, etc.

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

Niveles 12 a 15: compresión, claves SSH y red

Nivel 12 → 13: hexdump y compresión en capas

Objetivo: data.txt es un volcado hexadecimal de un archivo que ha sido comprimido varias veces.

Concepto: xxd -r convierte un volcado hexadecimal de vuelta a binario. Luego usas file para saber qué formato tienes en cada paso (gzip, bzip2 o tar) y lo descomprimes con la herramienta correspondiente. Es el nivel más largo hasta ahora, pero solo es repetir el mismo ciclo.

Pista: no tienes permisos de escritura en tu home. Crea un directorio temporal y trabaja ahí.

cd "$(mktemp -d)"
cp ~/data.txt .
xxd -r data.txt > datos
file datos
# Si dice "gzip compressed data":
mv datos datos.gz && gzip -d datos.gz
# Si dice "bzip2 compressed data":
mv datos datos.bz2 && bzip2 -d datos.bz2
# Si dice "POSIX tar archive":
tar xf datos   # y luego ejecuta file sobre el archivo que salga
# Repite "file" + descomprimir hasta llegar a "ASCII text"

Ojo con los nombres: gzip -d exige la extensión .gz, por eso renombramos antes. Con tar, el archivo extraído tiene un nombre nuevo; míralo con ls antes de seguir.

Nivel 13 → 14: autenticación con clave privada SSH

Objetivo: esta vez no hay contraseña, sino una clave privada SSH (sshkey.private) que permite entrar como bandit14. La contraseña de bandit14 está en /etc/bandit_pass/bandit14, y solo ese usuario puede leerla.

Concepto: SSH puede autenticar con un par de claves en lugar de contraseña: el servidor tiene la clave pública y tú demuestras que posees la privada. Además, SSH se niega a usar una clave privada si otros usuarios pueden leerla, así que hay que restringir sus permisos.

Copia la clave a tu ordenador con scp (que también usa el puerto 2220) y conéctate desde ahí:

# desde tu máquina, no desde el servidor
scp -P 2220 bandit13@bandit.labs.overthewire.org:sshkey.private .
chmod 600 sshkey.private
ssh -i sshkey.private bandit14@bandit.labs.overthewire.org -p 2220
# ya dentro como bandit14:
cat /etc/bandit_pass/bandit14

Atención a la diferencia: scp usa -P mayúscula para el puerto y ssh usa -p minúscula.

Nivel 14 → 15: hablar con un puerto usando nc

Objetivo: envía la contraseña del nivel actual al puerto 30000 de localhost.

Concepto: un servicio de red no es más que un programa escuchando en un puerto. nc (netcat) abre una conexión TCP y envía lo que le pases por la entrada estándar. Lo usarás muchísimo para probar servicios y para shells reversas.

cat /etc/bandit_pass/bandit14 | nc localhost 30000

Nivel 15 → 16: lo mismo, pero cifrado con TLS

Objetivo: envía la contraseña del nivel actual al puerto 30001 de localhost, que exige SSL/TLS.

Concepto: netcat habla en texto plano; si el servicio espera una conexión cifrada, la conexión falla. openssl s_client establece la conexión TLS y después funciona como un netcat cifrado. Es la herramienta de referencia para inspeccionar certificados y servicios HTTPS a mano.

cat /etc/bandit_pass/bandit15 | openssl s_client -connect localhost:30001 -quiet

Pista importante: en modo interactivo, s_client interpreta algunas líneas que empiezan por ciertas letras (como R o Q) como órdenes propias, no como datos. Si una contraseña empieza por una de ellas, la conexión hace cosas raras. La opción -quiet desactiva ese comportamiento y además oculta toda la información del certificado.

Resumen: qué te llevas de cada nivel

NivelConceptoComando clave
0 → 1Leer archivosls, cat
1 → 2Nombres que parecen opcionescat ./-
2 → 3Espacios en nombrescomillas, --, Tab
3 → 4Archivos ocultosls -la
4 → 5Tipo de archivofile
5 → 6Buscar por tamaño y permisosfind -size -executable
6 → 7Buscar por propietariofind / -user -group, 2>/dev/null
7 → 8Filtrar textogrep
8 → 9Tuberías y duplicadossort | uniq -u
9 → 10Texto en binariosstrings
10 → 11Codificaciónbase64 -d
11 → 12Cifrado clásicotr (ROT13)
12 → 13Hexdump y compresiónxxd -r, gzip, bzip2, tar
13 → 14Claves SSHscp, chmod 600, ssh -i
14 → 15Conexiones TCPnc
15 → 16Conexiones TLSopenssl s_client

Errores típicos de principiante en Bandit

  • Olvidar el puerto 2220 y pensar que el servidor está caído.
  • Copiar la contraseña con un espacio de más al principio o al final. Si te dice que es incorrecta, pégala en un editor y revísala.
  • Buscar las soluciones antes de pelearte con el nivel. Date al menos 20-30 minutos y la página man antes de mirar una pista. La frustración de esos minutos es exactamente donde se aprende.
  • Trabajar en directorios compartidos. En el nivel 12 usa siempre mktemp -d; otros jugadores usan el mismo servidor.
Recuerda: Bandit es un entorno diseñado para practicar. Las técnicas de búsqueda y conexión que aprendes aquí solo deben usarse en sistemas propios o en plataformas y auditorías donde tengas autorización expresa.

Qué hacer después de Bandit

Bandit tiene más niveles (hasta el 34 aproximadamente) que entran en escaneo de puertos con nmap, tareas cron, Git y escapes de shells restringidas. Merece la pena terminarlo. Después, estos son los siguientes pasos lógicos:

  • Natas (también en OverTheWire): seguridad web desde el navegador. Código fuente, cookies, inyecciones y lógica del lado servidor.
  • Leviathan: wargame corto centrado en binarios con permisos SUID y en entender qué hace un programa sin tener su código.
  • picoCTF: retos tipo CTF de todas las categorías (criptografía, forense, web, reversing), pensados para estudiantes y con dificultad progresiva.
  • TryHackMe: salas guiadas con máquinas virtuales en el navegador, ideales para dar el salto a pentesting de máquinas completas.

Si prefieres un camino estructurado en español, con lecciones y retos prácticos ordenados, échale un vistazo a la Academia de Hackers en Acción. Y si todavía no tienes tu laboratorio montado, empieza por instalar Kali Linux en una máquina virtual: lo vas a necesitar en cuanto salgas de Bandit.

Guía gratisAprende hacking ético desde cero

Tags

overthewirebanditlinuxctfbeginners
CompartirTwitterLinkedIn

// POSTS_RELACIONADOS