No Place To Hide
3 minutos de lectura
Se nos proporcionan estos archivos de log de una sesión RDP en Windows:
$ file Cache0000.bin
Cache0000.bin: data
$ file bcache24.bmc
bcache24.bmc: empty
$ du -h Cache0000.bin bcache24.bmc
17M Cache0000.bin
0B bcache24.bmc
Y esta es la descripción del reto:
We found evidence of a password spray attack against the Domain Controller, and identified a suspicious RDP session. We’ll provide you with our RDP logs and other files. Can you see what they were up to?
Extracción de bitmap
Buscando herramientas para analizar archivos .bmc
, encontramos bmc_tools
, que es un script de Python que extrae imágenes en bitmap (.bmp
) de los archivos de log que tenemos.
Por el momento, podemos usar la configuración predeterminada:
$ git clone https://github.com/ANSSI-FR/bmc-tools
...
$ python3 bmc-tools/bmc-tools.py -h
usage: bmc-tools.py [-h] -s SRC -d DEST [-c COUNT] [-v] [-o] [-b] [-w WIDTH]
RDP Bitmap Cache parser (v. 3.00, 2022/02/10)
options:
-h, --help show this help message and exit
-s SRC, --src SRC Specify the BMCache file or directory to process.
-d DEST, --dest DEST Specify the directory where to store the extracted bitmaps.
-c COUNT, --count COUNT
Only extract the given number of bitmaps.
-v, --verbose Determine the amount of information displayed.
-o, --old Extract the old bitmap data found in the BMCache file.
-b, --bitmap Provide a big bitmap aggregating all the tiles.
-w WIDTH, --width WIDTH
Specify the number of tiles per line of the aggregated bitmap (default=64).
$ mkdir bitmaps
$ python3 bmc-tools/bmc-tools.py -s . -d bitmaps
[+++] Processing a directory...
[!!!] Unable to retrieve file contents; aborting.
[===] 1162 tiles successfully extracted in the end.
[===] Successfully exported 1162 files.
Con esto conseguimos muchas imágenes .bmp
:
$ ls bitmaps | head
Cache0000.bin_0000.bmp
Cache0000.bin_0001.bmp
Cache0000.bin_0002.bmp
Cache0000.bin_0003.bmp
Cache0000.bin_0004.bmp
Cache0000.bin_0005.bmp
Cache0000.bin_0006.bmp
Cache0000.bin_0007.bmp
Cache0000.bin_0008.bmp
Cache0000.bin_0009.bmp
$ ls bitmaps | wc -l
1162
Conversión de BMP a JPEG
Para ver estas imágenes, debemos convertirlas a formato JPEG o PNG. Para ello, usamos mogrify
de ImageMagick. Para evitar la instalación de estos programas, podemos emplear Docker:
$ docker run --rm -v "${PWD}":/tmp --entrypoint=bash -it dpokidov/imagemagick
root@e1710a97fea6:/imgs# cd /tmp/bitmaps
root@e1710a97fea6:/tmp/bitmaps# mogrify -format jpg *.bmp
root@e1710a97fea6:/tmp/bitmaps# mkdir ../images
root@e1710a97fea6:/tmp# mv *.jpg ../images
Ahora podemos examinar estas imágenes JPEG. Desafortunadamente, su ancho es de 64 píxeles (el predeterminado), por lo que solo muestran una pequeña fracción de la pantalla:
Juntando todas las piezas
Por lo tanto, vamos a poner más opciones a bmc_tools
. Por ejemplo, -b
para juntar todos los trozos:
$ python3 bmc-tools/bmc-tools.py -s . -d bitmaps -b
[+++] Processing a directory...
[!!!] Unable to retrieve file contents; aborting.
[===] 1162 tiles successfully extracted in the end.
[===] Successfully exported 1162 files.
[===] Successfully exported collage file.
$ ls bitmaps | wc -l
1163
$ docker run --rm -v "${PWD}":/tmp --entrypoint=bash -it dpokidov/imagemagick
root@1d683a9c7246:/imgs# cd /tmp/bitmaps/
root@1d683a9c7246:/tmp/bitmaps# mogrify -format jpg Cache0000.bin_collage.bmp
root@1d683a9c7246:/tmp/bitmaps# mv *.jpg ../images/
La herramienta generará un collage con las 1162 piezas. La imagen resultante se ve un poco rara:
No hay una manera automática para unir todas las piezas correctamente, ya que las imágenes provienen de una memoria caché, que podría no estar ordenada.
Flag
Aún así, podemos hacer zoom y visualizar algunos caracteres de la flag y reconstruirla nosotros mismos:
HTB{w47ch_y0ur_c0Nn3C71}