🛡️ Cybersecurity Challenge

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.

34 Niveles
100% Completado
CTF Challenge

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ÁSICO

Comandos fundamentales de Linux, navegación del sistema de archivos y conceptos básicos de seguridad.

SSH cat ls find

Niveles 6-11

INTERMEDIO

Búsquedas avanzadas, manipulación de texto y técnicas de codificación/decodificación.

grep base64 ROT13 strings

Niveles 12-17

AVANZADO

Compresión múltiple, claves SSH, comunicación por puertos y conexiones SSL.

gzip SSH keys netcat SSL

Niveles 18-23

EXPERTO

Binarios setuid, programación de red, análisis de scripts y trabajos cron.

setuid cron scripting networking

Niveles 24-29

MASTER

Brute force, escape de terminales, explotación de editores y repositorios Git.

brute force vim escape git exploitation

Niveles 30-33

LEGENDARY

Git avanzado, tags, push remoto, restricciones de shell y desafío final.

git advanced shell bypass final boss

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

00

Primer Acceso SSH

Introducción
🎯 Objetivo

Conectarse al juego usando SSH. El host es bandit.labs.overthewire.org, puerto 2220, usuario bandit0 y contraseña bandit0.

💡 Solución
Terminal
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.

0

Lectura de Archivos Básica

Fácil
🎯 Objetivo

La contraseña para el siguiente nivel está almacenada en un archivo llamado 'readme' en el directorio home.

💡 Solución
Terminal
pwd          # Ver ubicación actual
ls           # Listar archivos
cat readme   # Leer contenido del archivo
🔑 Contraseña: ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If
📚 Explicación
  • pwd: Muestra el directorio de trabajo actual
  • ls: Lista los archivos y directorios
  • cat: Muestra el contenido de un archivo
1

Archivos con Nombres Especiales

Fácil
🎯 Objetivo

La contraseña está en un archivo llamado '-' en el directorio home.

💡 Solución
Terminal
cat ./-
🔑 Contraseña: 263JGJPfgU6LtdEvgfWU1XP5yac29mFx
📚 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.

2

Archivos con Espacios

Fácil
🎯 Objetivo

La contraseña está en un archivo llamado 'spaces in this filename'.

💡 Solución
Terminal>
cat "spaces in this filename"
🔑 Contraseña: MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx
📚 Explicación

Los espacios en nombres de archivo requieren comillas dobles o simples para ser interpretados como un solo argumento por la shell.

3

Archivos Ocultos

Fácil
🎯 Objetivo

La contraseña está en un archivo oculto en el directorio 'inhere'.

💡 Solución
Terminal
cd inhere
ls -la
cat ...Hiding-From-You
🔑 Contraseña: 2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ
📚 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.

4

Identificación de Tipos de Archivo

Intermedio
🎯 Objetivo

La contraseña está en el único archivo legible (ASCII text) del directorio 'inhere'.

💡 Solución
Terminal
cd inhere
file ./*        # Identificar tipos de archivo
cat ./-file07   # Leer el archivo ASCII text
🔑 Contraseña: 4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw
📚 Explicación

El comando file identifica el tipo de contenido de los archivos. Solo buscamos archivos "ASCII text" que sean legibles por humanos.

5

Búsqueda Avanzada con Find

Intermedio
🎯 Objetivo

Encontrar un archivo con: tamaño 1033 bytes, legible por humanos y no ejecutable.

💡 Solución
Terminal
cd inhere
find . -type f -size 1033c ! -executable -exec file {} \;
🔑 Contraseña: HWasnPhtq9AVKe0dmk45nxy20cvUa6EG
📚 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

6

Búsqueda con Permisos Específicos

Intermedio
🎯 Objetivo

Encontrar un archivo que pertenezca al usuario bandit7, grupo bandit6 y tenga 33 bytes de tamaño.

💡 Solución
Terminal
find / -type f -user bandit7 -group bandit6 -size 33c 2>/dev/null
🔑 Contraseña: morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj
📚 Explicación
  • -user bandit7: Pertenece al usuario bandit7
  • -group bandit6: Pertenece al grupo bandit6
  • 2>/dev/null: Oculta errores de permisos denegados
7

Búsqueda en Texto con Grep

Intermedio
🎯 Objetivo

La contraseña está en data.txt junto a la palabra "millionth".

💡 Solución
Terminal
grep millionth data.txt
🔑 Contraseña: dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc
📚 Explicación

grep busca patrones de texto en archivos. Es fundamental para filtrar información en sistemas Linux.

8

Líneas Únicas con Sort y Uniq

Intermedio
🎯 Objetivo

Encontrar la única línea de texto que aparece solo una vez en data.txt.

💡 Solución
Terminal
sort data.txt | uniq -u
🔑 Contraseña: 4CKMh1JI91bUIZZPXDqGanal4xvAg0JM
📚 Explicación
  • sort: Ordena las líneas alfabéticamente
  • uniq -u: Muestra solo líneas únicas (no duplicadas)
  • |: Pipe - pasa la salida de un comando al siguiente
9

Strings y Caracteres Especiales

Intermedio
🎯 Objetivo

La contraseña está en una cadena legible precedida por varios caracteres "=".

💡 Solución
Terminal
strings data.txt | grep "=" | tail -1
🔑 Contraseña: FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey
📚 Explicación

strings extrae texto legible de archivos binarios. Útil para analizar ejecutables y archivos no texto.

10

Decodificación Base64

Intermedio
🎯 Objetivo

El archivo data.txt contiene datos codificados en Base64.

💡 Solución
Terminal
base64 -d data.txt
🔑 Contraseña: dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr
📚 Explicación

Base64 es un sistema de codificación que convierte datos binarios en texto ASCII. La opción -d decodifica.

11

Cifrado ROT13

Intermedio
🎯 Objetivo

El texto está cifrado con ROT13 (rotación de 13 posiciones en el alfabeto).

💡 Solución
Terminal
cat data.txt | tr "a-zA-Z" "n-za-mN-ZA-M"
🔑 Contraseña: 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4
📚 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

12

Descompresión Múltiple

Avanzado
🎯 Objetivo

Un hexdump de un archivo comprimido múltiples veces con diferentes algoritmos.

💡 Solución
Terminal
mktemp -d
cp data.txt /tmp/workdir/
xxd -r data.txt > compressed_data
file compressed_data
# Repetir: mv, gzip -d, bzip2 -d, tar -xf...
🔑 Contraseña: FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn
📚 Explicación

Proceso iterativo de identificación y descompresión: gzip, bzip2, tar. file identifica el tipo de compresión.

13

Autenticación con Clave SSH

Avanzado
🎯 Objetivo

Usar una clave SSH privada para conectarse a bandit14.

💡 Solución
Terminal
ssh -i sshkey.private bandit14@localhost -p 2220
cat /etc/bandit_pass/bandit14
🔑 Contraseña: MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS
📚 Explicación

Autenticación SSH con clave privada. -i especifica el archivo de identidad (clave privada).

14

Comunicación por Puerto con Netcat

Avanzado
🎯 Objetivo

Enviar la contraseña actual al puerto 30000 en localhost.

💡 Solución
Terminal
echo "MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS" | nc localhost 30000
🔑 Contraseña: 8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo
📚 Explicación

netcat (nc) es la "navaja suiza" de las redes. Permite conexiones TCP/UDP y transferencia de datos.

15

Conexión SSL/TLS con OpenSSL

Avanzado
🎯 Objetivo

Enviar la contraseña al puerto 30001 usando cifrado SSL/TLS.

💡 Solución
Terminal
echo "8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo" | openssl s_client -connect localhost:30001 -quiet
🔑 Contraseña: kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx
📚 Explicación

OpenSSL permite conexiones seguras cifradas. s_client actúa como cliente SSL/TLS.

16

Escaneo de Puertos y SSL

Avanzado
🎯 Objetivo

Encontrar el puerto correcto entre 31000-32000 que acepta SSL y devuelve una clave SSH.

💡 Solución
Terminal
nmap -p 31000-32000 localhost
# Probar puertos SSL hasta encontrar el correcto
openssl s_client -connect localhost:31790 -quiet
# Introducir contraseña: kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx
🔑 Contraseña: EReVavePLFHtFlFsjn3hyzMlvSuSAcRD
📚 Explicación

Combina escaneo de puertos con nmap y pruebas SSL. El servidor correcto devuelve una clave SSH privada.

17

Comparación de Archivos con Diff

Avanzado
🎯 Objetivo

Encontrar la diferencia entre passwords.old y passwords.new.

💡 Solución
Terminal
diff passwords.old passwords.new
🔑 Contraseña: x2gLTTjFwMOhQ8oWNbMN362QKxfRqGlO
📚 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

18

Bypass de .bashrc

Experto
🎯 Objetivo

El .bashrc está modificado para cerrar la sesión. Ejecutar comando antes del cierre.

💡 Solución
Terminal
ssh bandit18@bandit.labs.overthewire.org -p 2220 "cat readme"
🔑 Contraseña: cGWpMaKXVwDUNgPAVJbWYuGHVn9zl3j8
📚 Explicación

SSH permite ejecutar comandos remotos sin shell interactiva, evitando la ejecución de .bashrc.

19

Binario SetUID

Experto
🎯 Objetivo

Usar un binario setUID para ejecutar comandos como otro usuario.

💡 Solución
Terminal
./bandit20-do cat /etc/bandit_pass/bandit20
🔑 Contraseña: 0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO
📚 Explicación

SetUID permite que un programa se ejecute con permisos del propietario del archivo, no del usuario que lo ejecuta.

20

Cliente-Servidor con Netcat

Experto
🎯 Objetivo

Crear un servidor que envíe la contraseña actual al cliente setUID.

💡 Solución
Terminal
# Terminal 1:
echo "0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO" | nc -l -p 1234

# Terminal 2:
./suconnect 1234
🔑 Contraseña: EeoULMCra2q0dSkYj561DX7s1CpBuOBt
📚 Explicación

Comunicación cliente-servidor usando netcat. El servidor envía datos que el cliente setUID valida.

21

Trabajos Cron Básicos

Experto
🎯 Objetivo

Analizar trabajos cron para encontrar donde se almacena la contraseña.

💡 Solución
Terminal
cat /etc/cron.d/cronjob_bandit22
cat /usr/bin/cronjob_bandit22.sh
cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
🔑 Contraseña: t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
📚 Explicación

Cron ejecuta tareas programadas. Los scripts generalmente guardan resultados en archivos temporales.

22

Análisis de Scripts Cron

Experto
🎯 Objetivo

Analizar un script cron que genera nombres de archivo basados en el usuario.

💡 Solución
Terminal
echo I am user bandit23 | md5sum | cut -d " " -f 1
cat /tmp/8ca319486bfbbc3663ea0fbe81326349
🔑 Contraseña: 0Zf11ioIjMVN551jX3CmStKLYqjk54Ga
📚 Explicación

El script genera un hash MD5 del texto "I am user bandit23" para crear un nombre de archivo único.

23

Creación de Scripts Personalizados

Experto
🎯 Objetivo

Crear un script que sea ejecutado por cron para obtener la contraseña.

💡 Solución
Terminal
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
🔑 Contraseña: gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8
📚 Explicación

Escribir scripts personalizados que serán ejecutados por cron con privilegios de otro usuario.

MASTER Niveles 24-29: Brute Force y Git

24

Ataque de Fuerza Bruta

Master
🎯 Objetivo

Realizar fuerza bruta en un PIN de 4 dígitos en el puerto 30002.

💡 Solución
Terminal
for i in {0000..9999}; do 
    echo "gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8 $i"
done | nc localhost 30002 | grep -v "Wrong"
🔑 Contraseña: iCi86ttT4KSNe1armKiwbQNmB3YJP3q4
📚 Explicación

Ataque de fuerza bruta sistemático. Se prueban todas las combinaciones posibles de 0000 a 9999.

25

Escape de Shell Restringida

Master
🎯 Objetivo

Escapar de una shell restringida (more) para acceder a comandos del sistema.

💡 Solución
Terminal
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
🔑 Contraseña: s0773xxkk0MXfdqOfPRVr9L3jJBUOgCZ
📚 Explicación

Shell escape via morevim. Se aprovecha que vim puede cambiar su shell y ejecutar comandos del sistema.

26

Escalada con SetUID via Vim

Master
🎯 Objetivo

Usar vim para explotar un binario setUID y obtener acceso privilegiado.

💡 Solución
Terminal
# Continuando desde el nivel 25
# Ya con shell de bandit26:
ls -la
./bandit27-do cat /etc/bandit_pass/bandit27
🔑 Contraseña: upsNCc7vzaRDx6oZC6GiR6ERwe1MowGB
📚 Explicación

Continuación del escape anterior. Una vez con shell completa, se puede usar el binario setUID para leer archivos privilegiados.

27

Clonado de Repositorio Git

Master
🎯 Objetivo

Clonar un repositorio Git y encontrar la contraseña en los archivos.

💡 Solución
Terminal
mktemp -d
cd /tmp/tmp.XXXXXX
git clone ssh://bandit27-git@localhost/home/bandit27-git/repo
cd repo
cat README
🔑 Contraseña: Yz9IpL0sBcCeuG7m9uQFt8ZNpS4HZRcN
📚 Explicación

Introducción a Git. Se clona un repositorio remoto y se examina su contenido para encontrar información sensible.

28

Historial de Git

Master
🎯 Objetivo

Examinar el historial de commits de Git para encontrar información eliminada.

💡 Solución
Terminal
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
🔑 Contraseña: tQKvmcwNYcFS6vmPHIUSI3ShmsrQZK8S
📚 Explicación

Git mantiene historial completo. Información "eliminada" en commits recientes puede estar en commits anteriores.

29

Ramas de Git

Master
🎯 Objetivo

Explorar diferentes ramas de Git para encontrar información oculta.

💡 Solución
Terminal
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
🔑 Contraseña: xbhV3HpNGlTIdnjUrdAlPzc2L6y9EOnS
📚 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

30

Tags de Git

Legendario
🎯 Objetivo

Explorar tags de Git para encontrar versiones específicas con información.

💡 Solución
Terminal
mktemp -d
cd /tmp/tmp.XXXXXX
git clone ssh://bandit30-git@localhost/home/bandit30-git/repo
cd repo
git tag
git show secret
🔑 Contraseña: OoffzGDlzhAlerFJ2cAiz1D41JW1Mhmt
📚 Explicación

Los tags en Git marcan versiones específicas. Información importante puede estar etiquetada para fácil referencia.

31

Push a Repositorio Remoto

Legendario
🎯 Objetivo

Crear un archivo, hacer commit y push para obtener la contraseña del servidor.

💡 Solución
Terminal
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
🔑 Contraseña: rmCBvG56y58BXzv98yZGdO7ATVL5dW8y
📚 Explicación

Git hooks del servidor pueden ejecutar código al recibir pushes. Se usa -f para forzar archivos ignorados por .gitignore.

32

Escape de UPPERCASE Shell

Legendario
🎯 Objetivo

Escapar de una shell que convierte todo a mayúsculas usando variables especiales.

💡 Solución
Terminal
# En la UPPERCASE shell:
$0
# Ahora en shell normal:
cat /etc/bandit_pass/bandit33
🔑 Contraseña: odHo63fHiFqcWWJG9rLiLDtPm45KzUKy
📚 Explicación

$0 es una variable especial que contiene el nombre del shell actual, permitiendo escape de shells restringidas.

33

¡Felicidades! Has Completado Bandit

Completado
🎯 Objetivo

¡Has completado todos los niveles de Bandit! Este es el nivel final de reconocimiento.

🎉 ¡Enhorabuena!

🏆 ¡Has Masterizado Bandit!

Has demostrado dominio en:

  • ✅ Fundamentos de Linux y SSH
  • ✅ Manipulación de archivos y permisos
  • ✅ Técnicas de búsqueda y filtrado
  • ✅ Codificación y cifrado
  • ✅ Compresión y descompresión
  • ✅ Networking y protocolos seguros
  • ✅ Binarios setUID y escalada de privilegios
  • ✅ Programación y scripting
  • ✅ Trabajos cron y automatización
  • ✅ Ataques de fuerza bruta
  • ✅ Git y control de versiones
  • ✅ Shell escapes y bypasses
MISIÓN COMPLETADA

BANDIT COMPLETADO

🎓 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

🐧
Linux
Master
🔍
Digital Detective
Expert
🛡️
Security
Advanced
Script
Pro
🌐
Network Hunter
Elite
🔐
Crypto Breaker
Legendary

🚀 ¿Te ha gustado este proyecto?

Conecta conmigo y explora más proyectos de ciberseguridad