• Inicio
  • Sobre mí
    • Que no te hackeen photo

      Que no te hackeen

      Bienvenido! mi nombre es Cristian Chiri, conoce un poco mas de mi y de mis trabajos.

    • Learn More
    • Email
    • LinkedIn
  • Publicaciones
    • Todos
    • Etiquetas
  • Laboratorio

Solución a Bandit de Over The Wire, niveles 0-11

Bandit es un wargame creada por OverTheWire para principiantes, donde el objetivo es encontrar banderas que contengan las contraseñas en los diferentes niveles usando comandos linux, esto permite interiorizarnos con la línea de comando del OS Linux.

Este juego viene por niveles y dificultades, nos permite aprender desde lo más básico y al completar cada nivel obtenemos una ‘Flag’, esta ‘Flag’ corresponde a la contraseña del siguiente nivel, por lo tanto, debemos ir de nivel en nivel sin saltarnos ninguna.

Link de la pagina Over The Wire - Bandit

Consejo Primero resuelve todo lo que puedas por tu cuenta, en caso te encuentres atascado acude a las soluciones como última opción. Si te queda dudas de algún comando, usa las siguientes opciones en los comandos (man, –help. -h), por ejemplo ‘fim –help’, ‘file -h’, ‘man find’. Google, google lo sabe todo!

Comencemos el juego

Para iniciar el juego primero debemos conectarnos al host mediante SSH en el puerto 2220 desde una terminal linux o usar PuTTY en Windows con el siguiente comando:

La contraseña para conectarnos es: bandit0

ssh bandit0@bandit.labs.overthewire.org -p 2220
  • bandit0 indica el usuario con el cual nos conectaremos al host.
  • bandit.labs.overthewire.org es la direccin del host.
  • -p 2220 nos indica a que puerto del host nos conectaremos.

Una vez conectados nos aparecerá una terminal de la siguiente manera:

Consejo Cada flag encontrada es la contraseña para el siguiente nivel, anótalo.

Solución nivel 0 -> 1

Instrucción

La contraseña para el siguiente nivel se almacena en un archivo llamado readme ubicado en el directorio de inicio. Use esta contraseña para iniciar sesión en bandit1 usando SSH. Siempre que encuentre una contraseña para un nivel, use SSH (en el puerto 2220) para iniciar sesión en ese nivel y continuar el juego.

Solución

Consejo Para copiar en una terminal usa ctrl + shift +c y para pegar ctrl + shift +v

La solución se encuentra almacenada en el archivo llamado ‘readme’, ubicado en el directorio de inicio.

Para saber los archivos que se encuentran en el directorio donde estamos, usamos el comando ls, nos lista un archivo llamado ‘readme’

bandit0@bandit:~$ ls 
readme
bandit0@bandit:~$ file readme 
readme: ASCII text

Ahora que sabemos que el archivo se encuentra en nuestro directorio, hacemos uso del comando cat para ver el contenido de readme.

  • file es un comando que nos ayuda a saber el tipo y formato de un archivo, nos indica si es un jpg, si es un png, etc. En este caso nos indica que es un archivo de tipo texto.

Visualizamos el contenido del archivo readme, el cual es nuestra contraseña para el siguiente nivel.

bandit0@bandit:~$ cat readme 
NH2SXQwcBdpmTEzi3bvBHMM9H66vVXjL
  • cat nos permite ver el contenido de los archivos.

Solución nivel 1 -> 2

Advertencia Para cada nivel debemos cambiar el usuario de la conexión ssh por el número de nivel.

Conectamos por ssh con el usuario bandit1

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

La contraseña para este nivel es la bandera que se encontró en el nivel 0.

Instrucción

La contraseña para el siguiente nivel se almacena en un archivo llamado - ubicado en el directorio de inicio.

Solución

El archivo tiene como nombre ‘-‘, no podemos visualizar porque todo comando utiliza como parámetro de entrada el ‘-‘ por esta razón el comando se queda en espera de otro parámetro.

Para abrir el archivo tenemos algunas maneras de hacerlo, con los siguientes comando:

bandit1@bandit:~$ cat ./-
rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzi
bandit1@bandit:~$ cat $(pwd)/-
rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzi
  • cat sirve para ver el contenido del archivo.
  • ./ indica el directorio donde estamos.
  • - nombre del archivo.
  • pwd es un comando para saber qué directorio nos encontramos actualmente.
  • $(pwd) es una variable que guarda la salida del pwd.

Solución nivel 2 -> 3

Instrucción

La contraseña para el siguiente nivel se almacena en un archivo llamado spaces in this filename ubicado en el directorio de inicio.

Solución

Primero debemos hacer un listado de los archivos con el comando.

ls

Para leer archivos que contengas espacios podemos utilizar las siguientes opciones:

Para cada espacio en el nombre pondemos el simbolo \

cat spaces\ in\ this\ filename
aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiG

Podemos también usar las " para poner el nombre de una archivo

cat "spaces in this filename"
aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiG

Este comando leerá todos los archivos que empiecen por space

bandit2@bandit:~/inhere$ cat spac*
aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiG

Solución nivel 3 -> 4

Instrucción

La contraseña para el siguiente nivel se almacena en un archivo oculto en el directorio inhere.

Solución

Listamos los archivos que se encuentran en nuestro directorio

bandit3@bandit:~$ ls
inhere

Ingresamos al directorio inhere

bandit3@bandit:~$ cat inhere

Para listar archivos ocultos usamos el siguiente comando

bandit3@bandit:~/inhere$ ls -la
total 12
drwxr-xr-x 2 root    root    4096 Dec  3 08:14 .
drwxr-xr-x 3 root    root    4096 Dec  3 08:14 ..
-rw-r----- 1 bandit4 bandit3   33 Dec  3 08:14 .hidden

Los archivos ocultos tienen un . al comienzo de su nombre, para visualizarlos usamos el siguiente comando.

bandit3@bandit:~/inhere$ cat .hidden 
2EW7BBsr6aMMoJ2HjW067dm8EgX26xNe

Solución nivel 4 -> 5

Instrucción

La contraseña para el siguiente nivel se almacena en el único archivo legible por humanos en el directorio inhere . Consejo: si su terminal está desordenada, intente con el comando “restablecer”.

Solución

La instruccion nos dice que esta en un archivo que solo es legible para humanos, listemos los archivos que hay en inhere e intentemos saber el tipo de archivo con el comando file.

bandit4@bandit:~/inhere$ ls
-file00  -file01  -file02  -file03  -file04  -file05  -file06  -file07  -file08  -file09
bandit4@bandit:~/inhere$ file -file00
file: Cannot open `ile00' (No such file or directory)

como podemos ver nos da errores, ya que el nombre de los archivos comienza por -.

Volvemos a nuestra carpeta anterior y volver a hacer un listado con el comando file que nos permitirá ver el tipo de archivo, el parametro inhere/* indica que hará una revision de todos los archivos en la carpeta actual.

bandit4@bandit:~$ file inhere/*
inhere/-file00: data
inhere/-file01: data
inhere/-file02: data
inhere/-file03: data
inhere/-file04: data
inhere/-file05: data
inhere/-file06: data
inhere/-file07: ASCII text
inhere/-file08: data
inhere/-file09: data
  • * es una wildcard que indica todo.

Observar que el único archivo de tipo textes el -file07, para ver su contenido

bandit4@bandit:~$ cat $(find . -name -file07)
lrIWWI6bB37kxfiCQZqUdOIYfr6eEeqR
  • find es un comando que nos ayuda a buscar archivos por nombre.
  • . indica la ruta donde buscara el archivo, en este caso sería el directorio actual.
  • -name es el nombre de archivo que buscara, como anteriormente encontramos que el unico archivo tipo txt era el-name07.

Solución nivel 5 -> 6

Instrucción

La contraseña para el siguiente nivel se almacena en un archivo en algún lugar del directorio inhere y tiene todas las siguientes propiedades:

  1. legible por humanos.
  2. 1033 bytes de tamaño.
  3. no ejecutable.

Solución

Debemos leer detenidamente la instrucción, nos indica que es legible por humanos (puede que sea un txt), indica el tamaño y que no es ejecutable.

Si hacemos un listo de las carpetas, podemos observar que hay muchas carpetas y además cada carpeta tiene otras carpetas y archivos, buscar un archivo de tipo txt en todas estas carpetas de manera manual es muy complicado.

bandit5@bandit:~$ ls
inhere
bandit5@bandit:~$ ls inhere/
maybehere00  maybehere02  maybehere04  maybehere06  maybehere08  maybehere10  maybehere12  maybehere14  maybehere16  maybehere18
maybehere01  maybehere03  maybehere05  maybehere07  maybehere09  maybehere11  maybehere13  maybehere15  maybehere17  maybehere19
bandit5@bandit:~$ ls inhere/maybehere00
-file1  -file2  -file3  spaces file1  spaces file2  spaces file3

Para esto usamos el comando find que nos ayuda a encontrar archivos, para todas las opciones que tiene este comando usamos find --help o man find.

Una vez visto el manual del comando hacemos uso de sus parámetros para buscar el archivo por las características pedidas.

bandit5@bandit:~$ find . -type f -readable ! -executable -size 1033c
./inhere/maybehere07/.file2
  • -type f readable buscará por tipo de archivos que sea legible.
  • ! -executable indica de que el archivo a buscar no sea ejecutable.
  • -size 1033c buscará los archivos de tamaño 1033 bytes.

Por último vemos el contenido del archivo

bandit5@bandit:~$ cat ./inhere/maybehere07/.file2
P4L4vucdmLnm8I7Vl7jG1ApGSfjYKqJU

Solución nivel 6 -> 7

Instrucción

La contraseña para el siguiente nivel se almacena en algún lugar del servidor y tiene todas las siguientes propiedades:

  • propiedad del usuario bandit7.
  • propiedad del grupo bandit6.
  • 33 bytes de tamaño.

Solución

Este ejercicio es similar al anterior, por lo tanto, podemos usar el comando find, pero en este caso nos dice que puede estar en algún lugar del servidor.

bandit6@bandit:~$ find / -user bandit7 -group bandit6 -size 33c 2>/dev/null
/var/lib/dpkg/info/bandit7.password
  • -user indica el propietario del usuario.
  • -group indica a qué grupo pertenece.
  • -size el tamaño.
  • 2>/dev/null este comando sirve para desechar todos los errores que nos de el comando de find moviéndolos en la carpeta /den/null.

Prueba el mismo comando sin el 2>/dev/null para ver que pasa.

Por último vemos el contenido del archivo encontrado

bandit6@bandit:~$ cat /var/lib/dpkg/info/bandit7.password
z7WtoNQU2XfjmMtWA8u5rN4vzqu4v99S

Solución nivel 7 -> 8

Instrucción

La contraseña para el siguiente nivel se almacena en el archivo data.txt junto a la palabra millonésima

Solución

Listamos los archivos que hay

bandit7@bandit:~$ ls
data.txt

Si hacemos una lectura de este txt con cat, nos saldra muchas líneas de texto, intentalo para que puedas observar la cantidad de líneas escritas, buscar la palabra millionth de manera manual sera una tortura.

Para buscar una palabra en archivos de texto plano, tenemos a grep que se usa como un filtro.

bandit7@bandit:~$ grep "millionth" data.txt
millionth       TESKZC0XvTetK0S9xNwm25STk5iWrBvP

grep nos devuleve la linea completa en donde coincide la palabra que buscamos.

Solución nivel 8 -> 9

Instrucción

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

Solución

Es muy parecido al anterior, si visualizamos el archivo data.txt tendremos mucho texto confuso.

Debemos ordenar el archivo y eliminar las líneas repetidas, para encontrar la única cadena que no se repite.

bandit8@bandit:~$cat data.txt | sort
  • sort ordena las palabras y junta todas las repetidas. Buscamos la palabra que no se repite
bandit8@bandit:~$ cat data.txt | sort | uniq -u
EN632PlfYiZbn3PhVK3XOGSlNInNE00t
  • uniq -u busca las unicas palabras que no se repiten.

Solución nivel 9 -> 10

Instrucción

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 ‘=’.

Solución

Si visualizamos el archivo data.txt, podemos ver muchos símbolos raros que no son legibles ante la vista humana, esto es porque es un archivo de datos. Para confirmar el tipo de archivos ejecutamos file data.txt Consejo Debemos tener en cuenta casi siempre el tipo de archivo , ya que según a eso podemos usar diferentes estrategias para resolver el juego.

bandit9@bandit:~$ file data.txt 
data.txt: data

Para buscar por caracteres o palabras usamos grep.

bandit9@bandit:~$ strings data.txt | grep "="
TM9=\
========== the
=Dbb
P,f=l
2v&z+=
p.g=
bktk=
========== password
j[=Cq
========== is=
b@!g=J
        =LG
=0 E
=0}I
F========== G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s
h=57
  • strings es una comando que se usa para solo obtener cadenas de caracteres, eliminando todos los símbolos raros.

Para ordenar un poco mejor el resultado usamos awk

bandit9@bandit:~$ strings data.txt | grep "==" | awk {'print $2'}
the
password
is=
G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s
  • | son tuverias que nos ayudan a unir mas de un comando.
  • awk {'print $2'} imprime las columnas que le mandemos, en este caso le mandamos la columna 2, con columnas me refiero a los espacio que hay, cada espacio es una columna.

Consejo Para saber como funciona de mejor manera el símbolo de |, investiga que son las tuberías en linux.

Solución nivel 10 -> 11

Instrucción

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

Solución

Consejo Investiga los diferentes tipos de encriptación que existen, los más usados.

Si visualizamos el contenido de data, observamos que tiene un formado diferente a las anteriores contraseñas encontradas, esto se debe a que está codificado en base64.

Como saber que es base64? Las codificaciones base64 siempre terminan en el símbolo =

bandit10@bandit:~$ ls
data.txt
bandit10@bandit:~$ cat data.txt 
VGhlIHBhc3N3b3JkIGlzIDZ6UGV6aUxkUjJSS05kTllGTmI2blZDS3pwaGxYSEJNCg==

Para decodificar la contraseña podemos usar una pagina web como la siguiente: Decode base64

También podemos usar el decodificador de base64 de linux.

bandit10@bandit:~$ cat data.txt | base64 -d
The password is 6zPeziLdR2RKNdNYFNb6nVCKzphlXHBM
  • base64 -d nos ayuda a decodificar en base64.

Solución nivel 11 -> 12

Instrucción

La contraseña para el siguiente nivel se almacena en el archivo data.txt, donde todas las letras minúsculas (az) y mayúsculas (AZ) se han girado 13 posiciones.

Solución

Este es un cifrado ROT13, el cual consiste en mover los caracteres en rotaciones.

Visualizando el archivo de data.txt, vemos que no se entiende nada.

bandit11@bandit:~$ cat data.txt 
Gur cnffjbeq vf WIAOOSFzMjXXBC0KoSKBbJ8puQm5lIEi

Para decifrara este cifrado de 13 rotaciones podemos buscar el google alguna pagina en google como Decode base64 o usa la terminal.

bandit11@bandit:~$ cat data.txt | tr '[A-Za-z]' '[N-ZA-Mn-za-m]'
The password is JVNBBFSmZwKKOP0XbFXOoW8chDz5yVRv

Tomate un descanso, bien echo.



Capture The Flag Share Tweet +1