Writeup - Wargame Bandit - Parte 2

bandit

Siguiendo con el post anterior, se mostrará cómo resolver los juegos del wargame Bandit desde el nivel 10 > 11 hasta el 19 > 20.

Solución Bandit 10 > 11

Instrucciones

La password del siguiente reto se encuentra en el archivo data.txt, el cual, contiene datos codificados en base64.

Comandos recomendados a usar

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Solución

Revisamos si el archivo data.txt se encuentra en nuestro directorio home, y leemos el archivo usando cat:

bandit

Como se indicó en las instrucciones, el contenido del archivo es un string en base64. Para estos casos, Linux posee una herramienta para codificar y decodificar la base mencionada.

Si revisamos el manual del comando base64, vemos que tiene una opción -d, que permite decodificar datos:

bandit

Por lo tanto, leemos el archivo con el comando y la opción para obtener la password del siguiente reto:

bandit

Solución Bandit 11 > 12

Instrucciones

La password del siguiente reto se encuentra en el archivo data.txt, donde todas las letras minúsculas (a-z) y mayúsculas (A-Z) se han girado 13 posiciones (ROT13).

Comandos recomendados a usar

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

Solución

Revisamos el archivo data.txt, y encontramos que los datos de este no tienen sentido:

bandit

Siguiendo las instrucciones, vemos que las letras originales fueron reemplazadas por una letra 13 posiciones después del alfabeto.

Como ejemplo, pasaremos la palabra hello a ROT13:

  • Si a la letra H la movemos 13 lugares en el alfabeto inglés, quedaría con la letra U
  • Si hacemos lo mismo con la E, sería R
  • La L sería Y
  • Y la O sería B

Entonces, si pasamos la palabra hello a ROT13, quedaría uryyb.

Ahora que sabemos como usar ROT13, lo que haremos es usar el comando tr, que nos permite traducir o eliminar caracteres. Por lo tanto, usando este método, moveremos la letra A 13 posiciones, quedando en la letra N, y así con cada carácter.

Al usar tr, primero escribimos todos los caracteres a traducir (mayúsculas y minúsculas) 'A-Za-z'. Luego indicamos los caracteres movidos 13 posiciones 'N-ZA-Nn-za-m':

bandit

Solución Bandit 12 > 13

Instrucciones

La password del siguiente reto se encuentra en el archivo data.txt, el cual, es un hexdump de un archivo.

Para trabajar con él, se recomienda crear una carpeta en el directorio /tmp, y copiar el archivo en esta carpeta.

Comandos recomendados a usar

grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd, mkdir, cp, mv, file

Solución

Revisamos el archivo data.txt, y vemos que posee información hexadecimal:

bandit

Siguiendo las instrucciones, creamos la carpeta en el directorio /tmp, y copiamos el archivo:

bandit

Para pasar el hexdump a un archivo normal, usamos el comando xxd. Este tiene la opción -r, que permite convertir un hexdump a un binario:

bandit

Al convertir el archivo, vemos que este se encuentra comprimido con gzip:

bandit

Por lo tanto, le cambiamos el nombre al archivo para que quede con la extensión gz (de gzip), y lo descomprimimos con la opción -d del comando:

bandit

Una vez más, vemos que este se encuentra comprimido; pero esta vez, en formato bzip2. Ahora, cambiamos el nombre al archivo con la extensión bz2, y lo descomprimimos con la opción -d:

bandit

Una vez más el archivo se encuentra comprimido con gzip, por lo tanto, lo volvemos a descomprimir:

bandit

Esta vez, el archivo se encuentra comprimido en tar, el cual, descomprimimos con las opciones x (extraer), v (verbose) y f (indica el archivo):

bandit

Otra vez, este se encuentra en tar:

bandit

Ahora descomprimimos el archivo bzip2:

bandit

Una vez más en tar:

bandit

Y por último, descomprimimos el archivo gzip para obtener el archivo de texto con la password:

bandit

La idea de este reto es aprender a descomprimir diferentes tipos de archivos, pero se puede solucionar usando los siguientes comandos:

  • zcat descomprime una lista de archivos (.gz) en la línea de comando o su standard input y escribe los datos sin comprimir en el standard output
  • bzcat es similar que zcat (descomprime todos los archivos indicados y lo envía standard output), pero de archivos .bz2
  • tar xO, donde x es para extraer, y O es para extraer el archivo a un standard output
  • file - permite ver el formato del archivo descomprimido, donde el nombre de este es reemplazado por el símbolo -

bandit

Solución Bandit 13 > 14

Instrucciones

La password del siguiente reto se encuentra en el directorio /etc/bandit_pass/bandit14, y solo puede ser leído por el usuario bandit14.

Para el siguiente reto, no se obtiene la password, pero se obtiene la llave privada de SSH.

Comandos recomendados a usar

ssh, telnet, nc, openssl, s_client, nmap

Solución

Revisamos que encontramos en el directorio home del usuario bandit13:

bandit

Nos conectamos usando esta llave privada. Para indicar la private key al momento de conectarse por SSH, se usa la opción -i, y nos conectamos al localhost (este se refiere al hostname de la máquina en la cual estamos conectados):

bandit

Ahora revisamos el directorio /etc/bandit_pass/bandit14 para encontrar la password de bandit14:

bandit

Solución Bandit 14 > 15

Instrucciones

La password del siguiente reto se puede encontrar enviando la contraseña actual al puerto 30000 al localhost.

Comandos recomendados a usar

ssh, telnet, nc, openssl, s_client, nmap

Solución

Como es costumbre, revisamos por si el directorio home de este usuario contiene algún archivo:

bandit

Al no encontrar nada, usamos lo indicado por las instrucciones, que es enviar la password del reto actual.

Para realizar una conexión a nosotros mismos, podemos usar el comando netcat (nc); o telnet, donde se indica el hostname localhost, y el puerto 30000:

bandit

Solución Bandit 15 > 16

Instrucciones

La password del siguiente reto se puede encontrar enviando la contraseña actual al puerto 30001 al localhost, usando cifrado SSL.

Comandos recomendados a usar

ssh, telnet, nc, openssl, s_client, nmap

Solución

Inspeccionamos el directorio home de este usuario:

bandit

openssl viene con una herramienta de cliente que puede usar para conectarse a un servidor mediante una conexión segura. La herramienta es similar a telnet o nc, pero este utiliza SSL/TLS para la conexión.

El comando s_client implementa un cliente genérico SSL/TLS que se conecta a un host remoto mediante estos protocolos.

La opción -connect de s_client permite especificar el host y el puerto al cual nos vamos a conectar. El formato de este es host:port.

bandit

Ahora que nos conectamos, enviamos la password del usuario actual para obtener la password del siguiente reto:

bandit

Solución Bandit 16 > 17

Instrucciones

La password del siguiente reto se puede encontrar enviando la contraseña actual al puerto dentro del rango 31000 hasta 32000.

Lo primero es identificar los puertos abiertos dentro de ese rango, y luego debemos comprobar cual trabaja con SSL.

Comandos recomendados a usar

ssh, telnet, nc, openssl, s_client, nmap

Solución

Para identificar los puertos abiertos en el rango mencionado, usamos la herramienta nmap para escanearlos, con las opciones -A (de forma agresiva), -p para indicar los puertos a escanear:

bandit

Cómo realizamos un escaneo agresivo, vemos que en el puerto 31790, nos muestra el mensaje Wrong! Please enter the correct current password, que nos indica que debemos ingresar una password correcta.

Ahora usamos openssl y s_client con la opción -quiet para evitar que muestre la conversación SSL. La password actual la mandamos mediante el comando echo a OpenSSL:

bandit

Para la conexión del siguiente reto la hacemos mediante esta llave privada.

Solución Bandit 17 > 18

Instrucciones

Hay dos archivos en el directorio home (password.old y password.new). La password para el siguiente nivel se encuentra en el archivo password.new, y es la única línea que ha cambiado.

Comandos recomendados a usar

cat, grep, ls, diff

Solución

Al intentar conectarnos, vemos que nos da un error de permisos, informando que esta se encuentra muy permisiva:

bandit

Por lo tanto, le cambiamos los permisos al archivo de la llave privada usando chmod:

bandit

Al conectarnos, revisamos el contenido del directorio home:

bandit

Leemos el archivo password.old:

bandit

Ahora el archivo password.new:

bandit

Para ver las diferencias en ambos documentos, usamos la herramienta diff:

bandit

Solución Bandit 18 > 19

Instrucciones

La password del siguiente reto se encuentra en el archivo readme en el directorio home, pero hay problemas en la conexión SSH debido a que han modificado el archivo .bashrc, el cual, nos desconecta cuando nos intentamos conectar.

Comandos recomendados a usar

ssh, ls, cat

Solución

Intentamos conectarnos vía SSH:

bandit

Pero como se indicaba en las instrucciones, este nos desconecta:

bandit

Realizamos una prueba enviando comandos en el intento de conexión SSH. Para esto enviamos un ls como prueba:

bandit

Como nos trae el output del comando ls, intentamos leer el archivo de la misma forma:

bandit

Solución Bandit 19 > 20

Instrucciones

Para obtener acceso al siguiente nivel, se debe usar el binario setuid que se encuentra en el directorio home. Se recomienda ejecutarlo sin argumentos para descubrir cómo se usa.

La contraseña para este nivel se puede encontrar en /etc/bandit_pass.

Solución

Revisamos en el directorio home si se encuentra el archivo bandit20-do, el cual, es binario setuid, y posee permisos de ejecución:

bandit

Lo ejecutamos sin argumentos para ver cómo se utiliza, y este nos indica que debemos especificar qué comando queremos utilizar, como si fuéramos otro usuario. En este caso, queremos ver la password del usuario bandit20:

bandit