Y. Bandit Level 24 → Level 25 - Walkthrough

Objetivo del Nivel

Un daemon está escuchando en el puerto 30002 y proporcionará la contraseña para bandit25 si recibe la contraseña correcta de bandit24 y un código PIN de 4 dígitos. No hay manera de obtener el PIN más que probando todas las combinaciones posibles, lo que significa que debemos hacer un ataque de fuerza bruta.

Conceptos Claves

Fuerza Bruta

Este método consiste en probar todas las combinaciones posibles hasta encontrar la correcta. En este caso, tenemos 10,000 combinaciones posibles (0000 a 9999).

Sockets en Python

Un socket es una forma de comunicación entre procesos a través de la red. En este reto, usaremos sockets TCP para comunicarnos con el daemon en localhost y enviar los intentos de PIN de manera continua sin cerrar la conexión.


Pasos para Resolver el Nivel

1. Conectar a Bandit 24

Inicia sesión con la contraseña obtenida en el nivel anterior.

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

Cuando se solicite, ingresa la contraseña:


2. Crear el Script en /tmp

Nos movemos a la carpeta /tmp (ya que no tenemos permisos de escritura en ~/):

Creamos un nuevo archivo llamado bruteforce.py:

Pega el siguiente código en el editor.


3. Código en Python para la Fuerza Bruta

Este script intentará todas las combinaciones de PIN en una sola conexión sin necesidad de reconectarse en cada intento.


4. Dar Permisos de Ejecución

Después de guardar el archivo (CTRL + X, luego Y y Enter), necesitamos darle permisos de ejecución:


5. Ejecutar el Script

Ahora podemos ejecutar el script y dejar que haga la fuerza bruta automáticamente:

Este script probará todas las combinaciones de PIN (0000 a 9999) en una única conexión.

Cuando encuentre el PIN correcto, imprimirá algo como esto:

Copiamos esta contraseña y la usamos para el siguiente nivel.


6. Conectar a Bandit 25

Cuando se solicite la contraseña, pegamos la que encontramos en el paso anterior.


Explicación del Código

  • socket.socket(): Crea una conexión TCP.

  • s.connect((host, port)): Se conecta al puerto 30002 en localhost.

  • s.sendall(mensaje.encode()): Envía la contraseña y el PIN al daemon.

  • s.recv(1024).decode(): Recibe la respuesta del daemon.

  • for pin in range(10000): Itera desde 0000 hasta 9999 probando cada PIN.

  • if "Password" in respuesta: Verifica si la respuesta contiene la contraseña de bandit25.


Conclusión

Este método permite encontrar el PIN correcto en menos de 1 minuto sin necesidad de abrir múltiples conexiones. Si el script se interrumpe, puedes volver a ejecutarlo y comenzará desde 0000 nuevamente.

¡Felicidades! Has completado el nivel 24 y ahora puedes avanzar al nivel 25. 🚀

Última actualización