Writeup - Wargame Bandit - Parte 2
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
:
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:
Por lo tanto, leemos el archivo con el comando y la opción para obtener la password del siguiente reto:
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:
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 letraU
- Si hacemos lo mismo con la
E
, seríaR
- La
L
seríaY
- Y la
O
seríaB
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'
:
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:
Siguiendo las instrucciones, creamos la carpeta en el directorio /tmp
, y copiamos el archivo:
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:
Al convertir el archivo, vemos que este se encuentra comprimido con gzip
:
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:
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
:
Una vez más el archivo se encuentra comprimido con gzip
, por lo tanto, lo volvemos a descomprimir:
Esta vez, el archivo se encuentra comprimido en tar
, el cual, descomprimimos con las opciones x
(extraer), v
(verbose) y f
(indica el archivo):
Otra vez, este se encuentra en tar
:
Ahora descomprimimos el archivo bzip2
:
Una vez más en tar
:
Y por último, descomprimimos el archivo gzip
para obtener el archivo de texto con la password:
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 sustandard input
y escribe los datos sin comprimir en elstandard output
bzcat
es similar que zcat (descomprime todos los archivos indicados y lo envíastandard output
), pero de archivos.bz2
tar xO
, dondex
es para extraer, yO
es para extraer el archivo a unstandard output
file -
permite ver el formato del archivo descomprimido, donde el nombre de este es reemplazado por el símbolo-
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
:
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):
Ahora revisamos el directorio /etc/bandit_pass/bandit14
para encontrar la password de bandit14
:
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:
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
:
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:
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
.
Ahora que nos conectamos, enviamos la password del usuario actual para obtener la password del siguiente reto:
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:
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:
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:
Por lo tanto, le cambiamos los permisos al archivo de la llave privada usando chmod
:
Al conectarnos, revisamos el contenido del directorio home
:
Leemos el archivo password.old
:
Ahora el archivo password.new
:
Para ver las diferencias en ambos documentos, usamos la herramienta diff
:
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:
Pero como se indicaba en las instrucciones, este nos desconecta:
Realizamos una prueba enviando comandos en el intento de conexión SSH. Para esto enviamos un ls
como prueba:
Como nos trae el output del comando ls
, intentamos leer el archivo de la misma forma:
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:
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
: