[French FCSC] - Find Me

Vous avez accès à un fichier find_me qui semble renfermer un secret bien gardé, qui n’existe peut-être même plus. Retrouvez son contenu !

TL;DR

Cette épreuve consiste à analyser une partition EXT4. Dans cette partition, on trouve une autre partition chiffrée (LUKS). La clé de chiffrement de ce volume a été supprimée, mais à l’aide de testdisk, il est possible de la récupérer. Ainsi, déchiffrer le volume, le monter et accéder au flag.

État des lieux

On commence cette épreuve avec un volume EXT4, système de fichier classique. Pour ce challenge, il existe au moins deux méthodes pour retrouver la clé du volume chiffré.

1
2
➜  file find_me 
find_me: Linux rev 1.0 ext4 filesystem data, UUID=9c0d2dc5-184c-496a-ba8e-477309e521d9, volume name "find_me" (needs journal recovery) (extents) (64bit) (large files) (huge files)

Solution 1 - Testdisk

Le premier réflexe en tant que CTFer est de le passer dans testdisk, d’autant plus que le volume est plutôt léger.

1
2
➜  sudo testdisk find_me
# Entrer -> None -> Advanced -> List

https://i.imgur.com/QrHBHMJ.png

On extrait tous les fichiers et un simple cat de tous les fichiers part** montre une chaine de caractère rigolote:

1
2
3
4
➜  sudo cat part*
TWYtOVkyb01OWm5IWEtzak04cThuUlRUOHgzVWRZ
➜  sudo cat part* | base64 -d
Mf-9Y2oMNZnHXKsjM8q8nRTT8x3UdY

Il semblerait que la clé soit:

Mf-9Y2oMNZnHXKsjM8q8nRTT8x3UdY

Solution 2 - The Sleuth Kit

Cette solution n’utilise pas l’outil testdisk, mais la suite The Sleuth Kit (TSK). Cette suite d’outils est très utilisée dans les investigations numériques. Dans les faits, les outils les plus utilisés de cette suite doivent être:

  • mmls : Permets de lister les partitions d’un volume;
  • fls : Liste les fichiers et répertoires d’un volume;
  • istat : Affiche les méta données d’une structure, comme un inode;
  • icat : Affiche le contenu d’un inode.

Avec la commande fls il est possible de lister aussi les fichiers supprimés:

 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
➜  mkdir a
➜  fls -a -r -m a find_me 
0|a/.|2|d/drwxr-xr-x|0|0|1024|1585770980|1585770852|1585770852|0
0|a/..|2|d/drwxr-xr-x|0|0|1024|1585770980|1585770852|1585770852|0
0|a/lost+found|11|d/drwx------|0|0|12288|1585770852|1585770844|1585770844|0
0|a/lost+found/.|11|d/drwx------|0|0|12288|1585770852|1585770844|1585770844|0
0|a/lost+found/..|2|d/drwxr-xr-x|0|0|1024|1585770980|1585770852|1585770852|0
0|a/unlock_me|12|r/rrw-r--r--|0|0|26214400|1585771103|1585771236|1585771236|0
0|a/pass.b64|13|r/rrw-r--r--|0|0|32|1585770998|1585770852|1585770852|0
0|a/part00 (deleted)|14|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part01 (deleted)|15|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part02 (deleted)|16|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part03 (deleted)|17|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part04 (deleted)|18|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part05 (deleted)|19|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part06 (deleted)|20|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part07 (deleted)|21|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part08 (deleted)|22|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part09 (deleted)|23|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part0a (deleted)|24|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part0b (deleted)|25|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part0c (deleted)|26|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part0d (deleted)|27|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part0e (deleted)|28|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part0f (deleted)|29|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part10 (deleted)|30|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part11 (deleted)|31|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part12 (deleted)|32|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part13 (deleted)|33|r/rr--------|0|0|2|1585770852|1585770852|1585770852|0
0|a/part14 (deleted)|34|r/rr--------|0|0|1|1585770852|1585770852|1585770852|0
0|a/$OrphanFiles|7681|V/V---------|0|0|0|0|0|0|0
0|a/$OrphanFiles/OrphanFile-1921 (deleted)|1921|-/drwxr-xr-x|0|0|0|1585770852|1585770852|1585770852|0

On peut voir qu’il y a plusieurs fichiers supprimés de l’inode 14 à 34.

Récupérer la clé

Avec icat, il est possible d’afficher directement le contenu et décoder la clé:

1
2
for i in $(seq 14 34); do icat find_me $i; done | base64 -d
Mf-9Y2oMNZnHXKsjM8q8nRTT8x3UdY

Mf-9Y2oMNZnHXKsjM8q8nRTT8x3UdY

Déchiffrement et montage du volume LUKS

L’utilitaire cryptsetup permet de déchiffrer un volume:

1
2
3
4
5
6
7
➜  mkdir a
➜  sudo cryptsetup luksOpen unlock_me a 
Saisissez la phrase secrète pour unlock_me : Mf-9Y2oMNZnHXKsjM8q8nRTT8x3UdY
➜  lsblk
NAME                    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop29                    7:29   0    25M  0 loop  
└─a                     253:3    0    23M  0 crypt 

Maintenant que le volume déchiffré a été associé à un mapper, il ne reste qu’à le monter:

1
2
3
4
5
6
➜  sudo mount /dev/mapper/a b 
➜  ls -la b 
total 4
drwxr-xr-x 2 root root   92 avril  1 21:54 .
drwxrwxr-x 4 maki maki 4096 avril 24 16:41 ..
-r-------- 1 root root   70 avril  1 21:54 .you_found_me

Le flag se trouve dans le fichier .you_found_me

Flag

FCSC{750322d61518672328c856ff72fac0a80220835b9864f60451c771ce6f9aeca1}