Skip to content

Resolución problemas básicos de Bandit

Página para practicar, comandos linux, desde la terminal.

Página Web: https://overthewire.org/wargames/bandit/

SSH Información

Host:

Terminal window
bandit.labs.overthewire.org
Terminal window
Port: 2220

Comando para cambiar de terminal y habilitar el comando clear:

Terminal window
export TERM=xterm
Comando ssh para conectarse a bandit Para conectarse a bandit0 se puede hacer con el siguiente comando:
ssh bandit0@bandit.labs.overthewire.org -p 2220

Después de conectarte al servicio, bandit te pedirá una contraseña, en este caso la contraseña es

bandit0

En vez de colocar bandit0 colocas bandit1 para el siguiente nivel, en cada nivel debes obtener una contraseña, que se dará las instrucciones en la página web (Ir a página web (overthewire, bandit)), para completar cada nivel y obtener dicha contraseña del siguiente nivel.

El propósito de este archivo, es dar pistas sencillas en español de los niveles, y además tener a mano la solución en dado, caso de querer saltar algún nivel, para luego estudiarlo.

Aunque, en la página oficial, ya hay material, para aprender, y pistas de como resolver los ejercicios (todo en ingles).

Página web:

Imagen de página web de bandit

Terminal:

Imagen de terminal de bandit

Pista: Solo hay que leer.

Posible solucion
cat readme.md

Pista: solo hay que leer de otra forma.

Posible solucion
cat ./-

Se indica que en el directorio actual existe un archivo que se llama - y lo muestra.


Pista: solo hay que leer igual que el anterior pero con unas cosas extras.

Posible solucion
cat "./--spaces in this filename--"

Indica que con ”, que en el repositorio actual existe un archivo con espacios de línea y - guiones, y lo muestra.


Pista: Igual que la anterior, pero solo hay un directorio con un archivo oculto.

Posible solucion
cat "inhere/...Hiding-From-You"

Indica con ” el texto como tal aparece, es la ruta y nombre del archivo, en el repositorio, y lo muestra.


Pista: el archivo que sea tipo texto es el que tendrá la clave.

Posible solucion
find ./inhere/ -type f | xargs file

Busca en la carpeta inhere, busca los archivos -type f, y muestra el tipo de datos que contenga xargs file cada archivo.

El archivo que sea ascii text, es el que contendrá la clave para el siguiente nivel.


Pista:

  • legible para humanos
  • 1033 bytes de tamaño
  • no ejecutable
Posible solucion
find ./inhere/ -type f -size 1033c

Busca en inhere un archivo -type f que contenga un tamaño de 1033 bytes -size 1033c.

Dará la ruta del archivo que cumpla con los requisitos de tamaño sí hay solo 1, ese tendrá la clave.


Pista:

  • Propiedad del usuario bandit7
  • Propiedad del grupo bandit6
  • Tamaño: 33 bytes
Posible solucion
find / -user bandit7 -group bandit6 -size 33c 2>/dev/null

Busca desde / archivo o carpeta que contenga, como permisos de usuario bandit7 -user bandit7, como grupo -group bandit6, y que contenga un tamaño de 33 bytes -size 33c, habrán archivos que cumplan los requerimientos, pero no serán accesibles y darán error, entonces esos archivos no lo mostramos en la terminal con 2>/dev/null.

Mostrará la dirección del archivo que tendrá la clave.

Clave para el siguiente
morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj

Pista: La contraseña para el siguiente nivel se almacena en el archivo data.txt junto a la palabra “millionth”.

Posible solucion
cat data.txt | grep millionth

Muestra el archivo cat data.txt y filtra todo el texto para solo mostrar la línea que contenga millionth, grep millionth.


Pista: La contraseña para el siguiente nivel se almacena en el archivo data.txt y es la única línea de texto que aparece solo una vez.

Posible solucion
cat data.txt | sort | uniq -u

Organizar las líneas del archivo, para que hagan líneas consecutivas repetidas sort, luego con uniq -u, elimina todas las líneas consecutivas repetidas y solo muestra las que no tiene repeticiones.


Pista: La contraseña para el siguiente nivel se almacena en el archivo data.txt en una de las pocas cadenas legibles por humanos, precedida por varios caracteres ‘=’.

Posible solucion
cat data.txt | grep -a === | awk 'NF{print $NF}'

Filtra por líneas que contengan ===. Como el archivo contiene caracteres binarios, indicamos al filtrado que procese todo como texto con grep -a, y luego extraemos únicamente la última palabra de cada línea usando {awk 'NF{print $NF}'}.


Bandit10 (contiene clave para el siguiente)

Section titled “Bandit10 (contiene clave para el siguiente)”

Pista: La contraseña para el siguiente nivel se almacena en el archivo data.txt, que contiene datos codificados en base64.

Posible solucion
base64 -d data.txt

Utilizamos el comando base64 -d para decodificar el archivo data.txt.

Clave para el siguiente
dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr

Bandit11 (contiene clave para el siguiente)

Section titled “Bandit11 (contiene clave para el siguiente)”

Pista: La contraseña para el siguiente nivel se almacena en el archivo data.txt, donde todas las letras minúsculas (a-z) y mayúsculas (A-Z) se han rotado 13 posiciones.

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

La información de data.txt con tr remplaza los caracteres de mayúscula y minúscula, a los mismos caracteres pero rotados 13 veces, como un cifrado cesar, para descifrar en este caso.

Clave para el siguiente
7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4

Pista: La contraseña para el siguiente nivel está en el archivo data.txt, que es un volcado hexadecimal de un archivo comprimido repetidamente.

Posible solucion
cat data.txt | xxd -r > data_new

El contenido del archivo data.txt lo redirige al comando xxd -r que convierte datos binarios, a un texto decimal legible, y el resultado lo redirige a un nuevo archivo llamado data_new.

Luego te salen puros archivos comprimidos, para descomprimirlos en general sin utilizar la herramienta específica para descomprimir un archivo de cada tipo puedes utilizar:

7z x data_new

Te sale un nuevo archivo comprimido, y vuelves a repetir el anterior comando para descomprimir, así sucesivamente hasta que te salga el archivo de texto con la clave.

O Utilizar bash script con un bucle…


Pista: La contraseña para el siguiente nivel se almacena en /etc/bandit_pass/bandit14 y solo puede ser leída por el usuario bandit14. Para este nivel, no se obtiene la siguiente contraseña, sino una clave SSH privada que permite iniciar sesión en el siguiente nivel. Nota: localhost es un nombre de host que se refiere a la máquina en la que se está trabajando.

Posible solucion
chmod 600 bandit14.key
ssh -i bandit14.key bandit14@bandit.labs.overthewire.org -p 2220

Se dan los permisos correspondientes, donde la clave solo pueda ser leída, y manipulada por el usuario, y luego se utiliza el comando ssh todo igual, pero agregando la línea -i nombre_clave.

Ya estarías en el nivel bandit14.


Pista: La contraseña para el siguiente nivel se puede recuperar enviando la contraseña del nivel actual al puerto 30000 en localhost.

Posible solucion Primero buscas la clave, del usuario actual donde se mencionó anteriormente, y la copias:
nc localhost 30000

Conectando a localhost y puerto 30000; luego pega la clave y te pasará la contraseña del siguiente nivel.


Bandit15 (contiene clave para el siguiente)

Section titled “Bandit15 (contiene clave para el siguiente)”

Pista: La contraseña del siguiente nivel se puede recuperar enviando la contraseña del nivel actual al puerto 30001 del host local mediante cifrado SSL/TLS.

Posible solucion
ncat --ssl 127.0.0.1 30001

Y pegas la clave del usuario actual, te dará la clave para el siguiente.

Clave para el siguiente
kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

Pista: Las credenciales para el siguiente nivel se pueden recuperar presentando la contraseña del nivel actual a un puerto en localhost en el rango 31000–32000. Primero averigua cuál de estos puertos tiene un servidor escuchando. A continuación, determina cuáles de ellos hablan SSL/TLS y cuáles no. Solo hay un servidor que devolverá la contraseña del siguiente nivel; los demás simplemente reenviarán lo que les envíes.

Posible solucion
nmap --open -T5 -v -n -p31000-32000 127.0.0.1

Escanea por puertos TCP abiertos (—open), ajusta la velocidad con -T5 y usa -v para ver salida en tiempo real. -n evita resolución DNS; -p indica el rango de puertos. 127.0.0.1 es la dirección (host) local donde realizar el escaneo.

ncat --ssl 127.0.0.1

Para conectarse con cifrado a dicho puertos, pegando la clave, y alguno de ellos dará la clave para el siguiente nivel.


Pista: En el directorio principal hay dos archivos: passwords.old y passwords.new. La contraseña para el siguiente nivel se encuentra en passwords.new y es la única línea que ha cambiado entre passwords.old y passwords.new.

NOTA: Si has resuelto este nivel y ves «¡Adiós!» al intentar iniciar sesión en bandit18, esto se debe al siguiente nivel, bandit19.

Posible solucion
diff passwords.old passwords.new

Muestra las diferencias entre los dos archivos.


Pista: La contraseña para el siguiente nivel se almacena en un archivo “readme” en el directorio personal. Lamentablemente, alguien modificó .bashrc para cerrar sesión al iniciar sesión con SSH.

Posible solucion
entrar al con ssh pero agregando al final bash para ejecutar la terminal bash

Esto es como una especie de inyección de código antes que se ejecute el .bashrc


Bandit19 (contiene clave para el siguiente)

Section titled “Bandit19 (contiene clave para el siguiente)”

Pista: Para acceder al siguiente nivel, debes usar el binario setuid en tu directorio personal. Ejecútalo sin argumentos para ver cómo usarlo. La contraseña para este nivel se encuentra en la ubicación habitual (/etc/bandit_pass), después de haber usado el binario setuid.

Posible solucion
entrar al con ssh pero agregando al final bash para ejecutar la terminal bash

Esto es como una especie de inyección de código antes que se ejecute el .bashrc, y leer el readme.

Clave para el siguiente
0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO

Pista: En el directorio personal hay un binario setuid que se conecta a localhost en el puerto que especifiques como argumento. Luego lee una línea de texto de la conexión y la compara con la contraseña del nivel anterior (bandit20). Si la contraseña es correcta, transmite la contraseña del siguiente nivel (bandit21).

NOTA: Intenta conectarte a tu propio demonio de red para comprobar si funciona como esperas.

Posible solucion Abres 2 terminales.
./archivo

En una ejecutas el archivo y en la otra ejecutas el comando para abrir un puerto con el comando nc y envías la clave anterior en este comando.

nc -nlvp 1234

Te debería devolver el archivo donde ejecutaste esta clave.


Pista: Un programa se ejecuta automáticamente a intervalos regulares mediante cron, el programador de tareas basado en tiempo. Consulte el archivo /etc/cron.d/ para ver la configuración y comprobar qué comando se está ejecutando.

Posible solucion Entrar al directorio, ver el código de los archivos y ver el archivo relacionado con el siguiente nivel, dentro de ese archivo hay un script, ver el script y verás que ese script copia la clave de un archivo que no tienes permisos para leer a otro que sí.

Pista: Un programa se ejecuta automáticamente a intervalos regulares mediante cron, el programador de tareas basado en tiempo. Consulte el archivo /etc/cron.d/ para ver la configuración y el comando que se está ejecutando.

NOTA: Analizar scripts de shell escritos por otros es una habilidad muy útil. El script de este nivel está diseñado para ser fácil de leer. Sí tiene problemas para comprender su funcionamiento, intente ejecutarlo para ver la información de depuración que muestra.

Posible solucion Lo mismo que el anterior nivel, pero jugar un poco con bash, y donde esta la variable del usuario colocar el usuario futuro que es bandit23.

Bandit23 (contiene clave para el siguiente)

Section titled “Bandit23 (contiene clave para el siguiente)”

Pista: Un programa se ejecuta automáticamente a intervalos regulares mediante cron, el programador de tareas basado en tiempo. Consulta el archivo /etc/cron.d/ para ver la configuración y el comando que se está ejecutando.

NOTA: Este nivel requiere que crees tú primer script de shell. ¡Es un gran paso y deberías sentirte orgulloso/a cuando lo logres!

NOTA 2: Ten en cuenta que tu script de shell se elimina una vez ejecutado, así que quizá quieras guardar una copia.

Posible solucion Analizar el script del usuario, y crear un archivo en una ruta temporal mktemp -p, y copiarla donde el script ejecuta los archivos.
Clave para el siguiente
gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8

Pista: Un demonio está escuchando en el puerto 30002 y te proporcionará la contraseña de bandit25 sí le das la contraseña de bandit24 y un código PIN secreto de 4 dígitos. No hay forma de obtener el código PIN excepto probando las 10 000 combinaciones posibles, un método conocido como fuerza bruta.

No necesitas crear nuevas conexiones cada vez.

Posible solucion crear un bucle para hacer todas las combinaciones posibles y redirigirlas a un archivo, el archivo (en directorio temporar) lo rediriges, a nc utilizando la informacion dada, y filtrar para eliminar las opciones que tengan Wrong.
[Web para practicar expresiones tareas Cron](https://www.site24x7.com/es/tools/crontab/cron-generator.html)

Pista: Iniciar sesión en bandit26 desde bandit25 debería ser bastante sencillo… El shell del usuario bandit26 no es /bin/bash, sino otro. Averigua cuál es, cómo funciona y cómo salir de él.

NOTA: Sí eres usuario de Windows y normalmente usas PowerShell para conectarte por SSH a bandit, ten en cuenta que PowerShell suele causar problemas con la solución propuesta para este nivel. Deberías usar la línea de comandos.

Posible solucion Entrar en el modo visual del archivo more, que se ejecuta y con :set shell=/bin/bash y :shell obtener la shell.

Pista: ¡Buen trabajo consiguiendo una shell! ¡Ahora date prisa y consigue la contraseña para bandit27!

Posible solucion el nivel es similar a uno en el pasado, pero ahora busca utilizar cat directamente.

Pista: Existe un repositorio Git en ssh://bandit27-git@bandit.labs.overthewire.org/home/bandit27-git/repo a través del puerto 2220. La contraseña del usuario bandit27-git es la misma que la del usuario bandit27.

Clona el repositorio y busca la contraseña para el siguiente nivel.

Terminal window
ssh://bandit27-git@bandit.labs.overthewire.org:2220/home/bandit27-git/repo
Posible solucion Puede que la conexión no funcione desde la terminal de bandit en el formato protocolo://usuario@url:puerto/ruta, tienes que clonar en un terminal personal, y luego colocar la clave del nivel actual, luego en el archivo readme estará la clave del siguiente nivel.
Clave Propia
upsNCc7vzaRDx6oZC6GiR6ERwe1MowGB

Pista: Existe un repositorio Git en ssh://bandit28-git@bandit.labs.overthewire.org/home/bandit28-git/repo a través del puerto 2220. La contraseña del usuario bandit28-git es la misma que la del usuario bandit28.

Clona el repositorio y busca la contraseña para el siguiente nivel.

Terminal window
ssh://bandit28-git@bandit.labs.overthewire.org/home/bandit28-git/repo
Posible solucion Clonar repo, colocar la clave, y revisar commits pasados.

Comandos importantes:

git log
git show

Pista: Existe un repositorio Git en ssh://bandit29-git@bandit.labs.overthewire.org/home/bandit29-git/repo a través del puerto 2220. La contraseña del usuario bandit29-git es la misma que la del usuario bandit29.

Clona el repositorio y busca la contraseña para el siguiente nivel.

Terminal window
ssh://bandit29-git@bandit.labs.overthewire.org/home/bandit29-git/repo
Posible solucion Buscar ramas, y mirar ramas según el enunciado, viendo el archivo readme.

Comandos importantes:

git branch
git switch

Pista: Existe un repositorio Git en ssh://bandit30-git@bandit.labs.overthewire.org/home/bandit30-git/repo a través del puerto 2220. La contraseña del usuario bandit30-git es la misma que la del usuario bandit30.

Clona el repositorio y busca la contraseña para el siguiente nivel.

Terminal window
ssh://bandit30-git@bandit.labs.overthewire.org/home/bandit30-git/repo
Posible solucion Comandos importantes:
git tag
git show

Pista: Hay un repositorio Git en ssh://bandit31-git@bandit.labs.overthewire.org/home/bandit31-git/repo a través del puerto 2220. La contraseña para el usuario bandit31-git es la misma que para el usuario bandit31.

Clona el repositorio y busca la contraseña para el siguiente nivel.

Terminal window
ssh://bandit31-git@bandit.labs.overthewire.org/home/bandit31-git/repo
Posible solucion Seguir los pasos dados en el archivo del repositorio.

Pista: Después de todo este rollo de Git, es hora de otra escapada. ¡Buena suerte!

Terminal window
ssh://bandit31-git@bandit.labs.overthewire.org/home/bandit31-git/repo
Posible solucion Entrar con ssh como normalmente, y conseguir una terminal shell con $0 y luego una bash bash.

Fin de los niveles actualmente.