ce jeudi avait lieu le CTF du Security Day 2016 de l'ESGI Paris et auquel notre team sec0d participait enfin du moins ceux qui étaient là :P.
Durant ce CTF nombre de challz ont été poncés mais un en particulier sur lequel j'ai passé un moment me donne envie d'écrire ce write-up car j'avoue l'avoir pas mal apprécié (merci@Sug4r7 de l'avoir concocté).
Allez, allons-y et arrêtons de "blablater" !
Le début du chall débute par la récupération de 2 archives tar.gz.
L'une contenant le chall et l'autre son checksum md5 pour valider de son intégrité, l'objectif pour valider ce chall étant de récupérer un flag ainsi qu'une adresse mail, allez, on se lance!!
Ces fichiers downloadés on check le md5 puis on extract le contenu de l'archive et faisons un "file" dessus afin de déterminer ce à quoi nous avons affaire:
# cat CTF_security_day_2016.tar.gz.md5L'archive extraitre révèle un format appelé EWF (Expert Witness Compression Format) généré par certains tools de dump de media et/ou partitions tel que ewfacquire sous linux.
2b5dfdabf403b309c35d72b455a96201:CTF_security_day_2016.tar.gz
# md5sum CTF_security_day_2016.tar.gz
2b5dfdabf403b309c35d72b455a96201
Ayant pu identifier la facilité de certains challs présent je tente un "string"
dessus et jouant avec "grep" afin de voir si j'en ressort quelques chose mais .. ce chall n'est pas aussi facile, poursuivons.
Kali Linux possède nativement nombre de tools pour jouer avec les dumps ewf alors je teste ewfinfo dans une première approche de collecte d'info et, une fois le fichier renommé avec l'extension (.s01) qui va bien, j'obtiens déjà quelques résultat:
ewfinfo CTF_security_day_2016.s01
ewfinfo 20140608
Acquiry information
Case number: 1
Description: Security Day ESGI 2016 - Level: easy
Examiner name: IT Forensic investigator
Evidence number: 1
Notes: 578589-646712-118349-156013-637549-351670-297187-312191
Acquisition date: Thu Mar 3 03:17:59 2016
System date: Thu Mar 3 03:17:59 2016
Operating system used: Linux
Software version used: 20130416
Password: N/A
Model: DataBar USB2.0
EWF information
File format: EnCase 6
Sectors per chunk: 64
Error granularity: 64
Compression method: deflate
Compression level: best compression
Set identifier: 6e1ec0c6-715f-f848-9119-e59a9b00dcc0
Media information
Media type: removable disk
Is physical: yes
Bytes per sector: 512
Number of sectors: 2015232
Media size: 984 MiB (1031798784 bytes)
Digest hash information
MD5: fff71a85859a1af7ede437178d701809
SHA1: cf0b504bd9ea6e1b7183c9652ed3a402f12b4551
Ok, première info intéréssante, pour la suite nous allons donc extraire le contenu du dump vers un format plus standard à l'aide de l'outils ewfexport
L'outil une fois lancé demande vers quel format l'extraire etc.. il suffit de laisser cela par défaut puis de donner un nom de fichier une fois qu'il le demander.
Il s'appelera donc "CTF2.raw" pour la suite.
De là je me dis que peut-être serait-il possible de récupérer quelque chose via un peu de file carving, je lance donc un "foremost", hélas son output nous ramène à la raison: non ce ne sera pas aussi simple malgrès le "easy" ci-dessus!!
Foremost started at Fri Mar 4 01:19:56 2016
Invocation: foremost CTF2.raw
Output directory: /root/Bureau/CTF/ESGI/foren/output
Configuration file: /etc/foremost.conf
------------------------------------------------------------------
File: CTF2.raw
Start: Fri Mar 4 01:19:56 2016
Length: 984 MB (1031798784 bytes)
Num Name (bs=512) Size File Offset Comment
Finish: Fri Mar 4 01:20:12 2016
0 FILES EXTRACTED
------------------------------------------------------------------
Foremost finished at Fri Mar 4 01:20:12 2016
Okay okay ... voyons donc voir la table de partition présente sur ce dump grâce à l'outils mmls.
mmls CTF2.raw
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors
Slot Start End Length Description
000: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
001: ------- 0000000000 0000002047 0000002048 Unallocated
002: 000:000 0000002048 0002015231 0002013184 NTFS / exFAT (0x07)
Une partition windows semble bien présente, un simple "file" dessus indique même "DOS/MBR Boot Sector" ce qui indique donc que ce serait probablement bootable.Après quelque manipulations foireuses et bricolages en tout genre, je découvre un tools appelé mbr_parser.py permettant de parser ce type de fichier et d'en remonter certaines infos ce qui permet donc d'affirmer que non, pas bootable :-/
===== Partition Table #1 =====
Boot flag: 0x0
Partition type: 0x7 (NTFS)
Starting Sector (LBA): 0x800 (2048)
Starting CHS: Cylinder: 0 Head: 32 Sector: 33
Ending CHS: Cylinder: 125 Head: 112 Sector: 51
Size in sectors: 0x1eb800 (2013184)
===== Partition Table #2 =====
Boot flag: 0x0
Partition type: 0x0 (Empty)
Starting Sector (LBA): 0x0 (0)
Starting CHS: Cylinder: 0 Head: 0 Sector: 0
Ending CHS: Cylinder: 0 Head: 0 Sector: 0
Size in sectors: 0x0 (0)
===== Partition Table #3 =====
Boot flag: 0x0
Partition type: 0x0 (Empty)
Starting Sector (LBA): 0x0 (0)
Starting CHS: Cylinder: 0 Head: 0 Sector: 0
Ending CHS: Cylinder: 0 Head: 0 Sector: 0
Size in sectors: 0x0 (0)
===== Partition Table #4 =====
Boot flag: 0x0
Partition type: 0x0 (Empty)
Starting Sector (LBA): 0x0 (0)
Starting CHS: Cylinder: 0 Head: 0 Sector: 0
Ending CHS: Cylinder: 0 Head: 0 Sector: 0
Size in sectors: 0x0 (0)
Valid Signature (0xaa55): True => (0xaa55)
Nous savons alors que ce ne sera pas bootable en l'état, ok, j'ai donc pratiqué à l'extraction de chacune des partition à l'aide de dd en espérant que la bonne partition pourra être montée et que ce sera alors la fin de ce chall.
Nous avions donc obtenu la liste des partitions et pouvions à préent les extraire de ce dump:
dd if=CTF2.raw of=CTF2_0.bin bs=512 skip=0 count=1 dd if=CTF2.raw of=CTF2_1.bin bs=512 skip=2048 count=2015231 file *.bin CTF2_0.bin: DOS/MBR boot sector; partition 1 : ID=0x7, start-CHS (snip) CTF2_1.bin: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "-FVE-FS-" (snip)
en revanche lors de divers essais, il s'est avéré impossible de monter le volume souhaité sur ma linux, cette partition n'étant visiblement pas "standard".
A partir de la, changement de stratégie.
Le mount ne passant toujours pas en vfat via dd ainsi qu'avec l'outils ewfmount sur le premier dump ewf de l'archive, nous comprenons qu'il faut essayer autre chose.
dd if=CTF2.raw of=new.img count=1 bs=1000MiB
file new.img
new.img: DOS/MBR boot sector; partition 1 (snip)
L'idée sera donc la suivante:- prendre le fichier new.img et le convertir en vmdk via qemu
- rattacher ce vmdk à une machine virtuelle Windows et essayer de monter le volume
La converion via Qemu faite
:
/qemu-img convert -f raw -O vmdk /Volumes/xxx/new.img /Volumes/xxx/new.vmdk
Un volume Bitlocker!
Voici donc la raison du temps perdu à tenter de le monter en vain sur ma Kali :/.
Ok, à partir de la comment faire pour monter ce volume sans la clef?
Et bien compliqué mais Orikata se rappellant qu'il est possible de monter le container via la clef de récupération via l'onglet "j'ai oublié mon mot de passe"
et que cette dernière est de la forme 8 x 6 chars séparés par des "-".
Nous nous replongeons dans la collecte d'info faites en amont et remarquons quelques chose d'étrange.
Il s'agit d'une note contenue dans les métadata du dump initial ewf et qui n'est sûrement pas le fruit du hasard rappellez-vous de cela:
ewfinfo CTF_security_day_2016.s01
ewfinfo 20140608
Acquiry information
Case number: 1
Description: Security Day ESGI 2016 - Level: easy
Examiner name: IT Forensic investigator
Evidence number: 1
Notes: 578589-646712-118349-156013- 637549-351670-297187-312191
Acquisition date: Thu Mar 3 03:17:59 2016
System date: Thu Mar 3 03:17:59 2016
Operating system used: Linux
Software version used: 20130416
Password: N/A
Model: DataBar USB2.0
Le container nous offre deux fichiers: le 1er contenant juste un peu de texte rappellant les obectifs du challenges, le second quant à lui étant un .psd que l'on s'empresse d'ouvrir sous Gimp ce qui nous permet d'identifier des claques présent cachant un flag dans la bouche d'un espèce de dinosaure.
Image de base avec la bonne promo pour la boite de notre ami @Sug4r7 qui a créer ce chall:
Le filtre "code_ctf" attire immédiatement notre attention mais hélas se trouve illisible:
Afin de gagner du temps, je décide donc de lire les métadata du fichier image de base via exiftool et obtient entre autre alors le fameux flag tant désiré.
ExifTool Version Number : 10.11 File Name : CTF_1.info Directory : . File Size : 22 MB File Modification Date/Time : 2016:03:03 01:42:37+01:00 File Access Date/Time : 2016:03:05 15:45:08+01:00 File Inode Change Date/Time : 2016:03:04 04:33:39+01:00 File Permissions : rwxrwxrwx File Type : PSD File Type Extension : psd MIME Type : application/vnd.adobe.photoshop Num Channels : 3 Image Height : 1600 Image Width : 2560 Bit Depth : 8 Current IPTC Digest : cdcffa7da8c7be09057076aeaf05c34e Coded Character Set : UTF8 Application Record Version : 0 IPTC Digest : cdcffa7da8c7be09057076aeaf05c34e XMP Toolkit : Adobe XMP Core 5.5-c021 79.155772, 2014/01/13-19:44:00 Document ID : adobe:docid:photoshop:8e502fea-e0d3-11e5-88dd-8346bba80fd1 Instance ID : xmp.iid:a366f090-0622-9343-b206-ee4e314c205f Original Document ID : 54597A271ED407F91E4348F2B8D7EDD3 History Action : saved, converted, derived, saved, saved History Instance ID : xmp.iid:4e124a83-f328-dd45-bc25-d93c357610c7, xmp.iid:229920ec-c5e4-f34c-84f6-4a06983a49ff, xmp.iid:a366f090-0622-9343-b206-ee4e314c205f History When : 2016:03:03 01:05:46+01:00, 2016:03:03 01:05:46+01:00, 2016:03:03 01:42:37+01:00 History Software Agent : Adobe Photoshop CC 2014 (Windows), Adobe Photoshop CC 2014 (Windows), Adobe Photoshop CC 2014 (Windows) History Changed : /, /, / History Parameters : from image/jpeg to application/vnd.adobe.photoshop, converted from image/jpeg to application/vnd.adobe.photoshop Derived From Instance ID : xmp.iid:4e124a83-f328-dd45-bc25-d93c357610c7 Derived From Document ID : 54597A271ED407F91E4348F2B8D7EDD3 Derived From Original Document ID: 54597A271ED407F91E4348F2B8D7EDD3 Format : application/vnd.adobe.photoshop Color Mode : RGB Text Layer Name : code_ctf Text Layer Text : CODE CTF: 20160303_A27R425 Document Ancestors : 54597A271ED407F91E4348F2B8D7EDD3 Create Date : 2016:03:03 00:59:27+01:00 Metadata Date : 2016:03:03 01:42:37+01:00 X Resolution : 72 Displayed Units X : inches Y Resolution : 72 Displayed Units Y : inches Global Angle : 30 Global Altitude : 30 Photoshop Thumbnail : (Binary data 4789 bytes, use -b option to extract) Has Real Merged Data : No Writer Name : Adobe Photoshop Reader Name : Adobe Photoshop CC 2014 Exif Byte Order : Big-endian (Motorola, MM) Bits Per Sample : 8 8 8 Photometric Interpretation : RGB Orientation : Horizontal (normal) Samples Per Pixel : 3 Resolution Unit : inches Software : Adobe Photoshop CC 2014 (Windows) Modify Date : 2016:03:03 01:42:37 Exif Version : 0221 Color Space : Uncalibrated Exif Image Width : 2560 Exif Image Height : 1600 Compression : JPEG (old-style) Thumbnail Offset : 386 Thumbnail Length : 0 Image Size : 2560x1600 Megapixels : 4.1