misDIRection es uno de los retos de MISC existentes actualmente en la plataforma de hacking HackTheBox.
Este reto otorga 20 puntos a quién lo resuelve y es de dificultad fácil.
Para la resolución de este reto podemos plantear dos posibles opciones y, en ambos casos nos llevarán al mismo código en base64, el cual incluye la flag necesaria para su resolución.
Opción 1
Extraemos el contenido del fichero .zip:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
$ unzip misDIRection.zip Archive: misDIRection.zip creating: .secret/ creating: .secret/S/ [misDIRection.zip] .secret/S/1 password: extracting: .secret/S/1 creating: .secret/V/ extracting: .secret/V/35 creating: .secret/F/ extracting: .secret/F/2 extracting: .secret/F/19 extracting: .secret/F/27 creating: .secret/o/ creating: .secret/H/ creating: .secret/A/ creating: .secret/f/ creating: .secret/r/ creating: .secret/m/ creating: .secret/B/ extracting: .secret/B/23 creating: .secret/a/ creating: .secret/O/ creating: .secret/h/ creating: .secret/t/ creating: .secret/2/ extracting: .secret/2/34 creating: .secret/7/ creating: .secret/R/ extracting: .secret/R/7 extracting: .secret/R/3 creating: .secret/b/ creating: .secret/z/ extracting: .secret/z/18 creating: .secret/j/ extracting: .secret/j/10 extracting: .secret/j/12 creating: .secret/P/ creating: .secret/y/ creating: .secret/d/ extracting: .secret/d/13 creating: .secret/Y/ creating: .secret/q/ creating: .secret/c/ creating: .secret/6/ creating: .secret/8/ creating: .secret/U/ extracting: .secret/U/9 creating: .secret/p/ extracting: .secret/p/32 creating: .secret/W/ creating: .secret/N/ extracting: .secret/N/25 extracting: .secret/N/11 extracting: .secret/N/31 extracting: .secret/N/33 creating: .secret/g/ creating: .secret/n/ creating: .secret/e/ extracting: .secret/e/5 creating: .secret/1/ extracting: .secret/1/30 extracting: .secret/1/22 creating: .secret/s/ extracting: .secret/s/24 creating: .secret/i/ creating: .secret/3/ creating: .secret/I/ creating: .secret/D/ extracting: .secret/D/26 creating: .secret/X/ extracting: .secret/X/29 extracting: .secret/X/21 extracting: .secret/X/17 creating: .secret/Z/ creating: .secret/4/ creating: .secret/k/ creating: .secret/9/ extracting: .secret/9/36 creating: .secret/J/ extracting: .secret/J/8 creating: .secret/C/ extracting: .secret/C/4 creating: .secret/v/ creating: .secret/M/ creating: .secret/0/ extracting: .secret/0/6 creating: .secret/G/ creating: .secret/E/ extracting: .secret/E/14 creating: .secret/Q/ creating: .secret/K/ creating: .secret/5/ extracting: .secret/5/16 creating: .secret/x/ extracting: .secret/x/15 creating: .secret/l/ creating: .secret/u/ extracting: .secret/u/20 extracting: .secret/u/28 creating: .secret/L/ creating: .secret/T/ creating: .secret/w/ |
Observamos que se ha creado una carpeta .secret y en la cual se encuentran multitud de directorios con los nombres como cada número y letra del alfabeto en la tabla ascii. Si revisamos el contenido de los mismos obtenemos que en muchos casos existen ficheros con tamaño 0.
1 2 |
$ ls -l 0/6 -rw-r--r--. 1 root root 0 may 2 2018 0/6 |
Buscamos entonces los ficheros con tamaño 0 y los ordenamos en función del número de fichero existente en su interior, obteniendo un hash en base64:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
$ find . -size 0 | sort -t/ -k 3,3 -n ./S/1 ./F/2 ./R/3 ./C/4 ./e/5 ./0/6 ./R/7 ./J/8 ./U/9 ./j/10 ./N/11 ./j/12 ./d/13 ./E/14 ./x/15 ./5/16 ./X/17 ./z/18 ./F/19 ./u/20 ./X/21 ./1/22 ./B/23 ./s/24 ./N/25 ./D/26 ./F/27 ./u/28 ./X/29 ./1/30 ./N/31 ./p/32 ./N/33 ./2/34 ./V/35 ./9/36 |
Juntamos las letras y números en el orden indicado y tenemos un texto en base64:
1 |
SFRCe0RJUjNjdEx5XzFuX1BsNDFuX1NpN2V9 |
Opción 2
Esta opción es mucho más rápida que la anterior ya que directamente nos devolverá el código obtenido. Descomprimiremos el fichero a la vez que obtenemos los ficheros y los juntamos obteniendo el código en base64, para ello lanzaremos un for como el siguiente:
1 2 |
$ for i in $(unzip -P hackthebox misDIRection.zip | grep extracting | cut -d ":" -f2 | sort -t/ -k 3,3 -n);do echo $i | cut -d"/" -f2 | xargs echo -n;done SFRCe0RJUjNjdEx5XzFuX1BsNDFuX1NpN2V9 |
Y listo, tenemos el hash.
En ambas opciones hemos obtenido el código en base64, decodificamos el mismo:
1 2 |
$ echo "SFRCe0RJUjNjdEx5XzFuX1BsNDFuX1NpN2V9" | base64 -d HTB{xxxxxxxxxxxxx} |
Y ya tenemos nuestro flag, HTB{xxxxxxxxxxxx}, reto superado.