Logo de fravelz

Notas de Hacking

Fravelz

Resolución problemas básicos de Bandit


Información {#información}

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

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

SSH Información

Host:

bandit.labs.overthewire.org
Port: 2220

Comando para cambiar de terminal y habilitar el comando clear:

export TERM=xterm
Comando ssh para conectarse a bandit Para conectarse a bandit0 se puede hacer con el siguiente comando: ```bash 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
---

Bandit0 {#bandit0}

Pista: Solo hay que leer.

Posible solucion ```bash cat readme.md ```
---

Bandit1 {#bandit1}

Pista: solo hay que leer de otra forma.

Posible solucion ```bash cat ./- ```

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

---

Bandit2 {#bandit2}

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

Posible solucion ```bash 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.

---

Bandit3 {#bandit3}

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

Posible solucion ```bash 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.

---

Bandit4 {#bandit4}

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

Posible solucion ```bash 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.

---

Bandit5 {#bandit5}

Pista:

  • legible para humanos
  • 1033 bytes de tamaño
  • no ejecutable
Posible solucion ```bash 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.

---

Bandit6 (contiene clave siguiente) {#bandit6-contiene-clave-siguiente}

Pista:

  • Propiedad del usuario bandit7
  • Propiedad del grupo bandit6
  • Tamaño: 33 bytes
Posible solucion ```bash 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 ```bash morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj ```
---

Bandit7 {#bandit7}

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

Posible solucion ```bash 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.

---

Bandit8 {#bandit8}

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 ```bash 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.

---

Bandit9 {#bandit9}

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 ```bash 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) {#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 ```bash base64 -d data.txt ```

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

Clave para el siguiente ```bash dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr ```
---

Bandit11 (contiene clave para el siguiente) {#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 ```bash 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 ```bash 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4 ```
---

Bandit12 {#bandit12}

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 ```bash 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…

---

Bandit13 {#bandit13}

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 ```bash 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.

---

Bandit14 {#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: ```bash 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) {#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 ```bash 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 ```bash kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx ```
---

Bandit16 {#bandit16}

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 ```bash 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.

---

Bandit17 {#bandit17}

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 ```bash diff passwords.old passwords.new ```

Muestra las diferencias entre los dos archivos.

---

Bandit18 {#bandit18}

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 ```bash 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) {#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 ```bash 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 ```bash 0qXahG8ZjOVMN9Ghs7iOWsCfZyXOUbYO ```
---

Bandit20 {#bandit20}

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. ```bash ./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.

---

Bandit21 {#bandit21}

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í.
---

Bandit22 {#bandit22}

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) {#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 ```bash gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8 ```
---

Bandit24 {#bandit24}

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)

Bandit25 {#bandit25}

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.
---

Bandit26 {#bandit26}

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.
---

Bandit27 (contiene clave propia) {#bandit27-contiene-clave-propia}

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.

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 ```bash upsNCc7vzaRDx6oZC6GiR6ERwe1MowGB ```
---

Bandit28 {#bandit28}

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.

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

Bandit29 {#bandit29}

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.

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

Bandit30 {#bandit30}

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.

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

Bandit31 {#bandit31}

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.

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

Bandit32 {#bandit32}

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

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.