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}