Outils d'utilisateurs

Outils du Site


ndhquals2018:where-is-my-purse

Ceci est une ancienne révision du document !


where-is-my-purse

  • Titre : Where Is My Purse ?
  • Description : Helps an important person to find the content of his numeric purse.
  • Points : 200
  • Catégorie : Forensic
  • Validations : 48/851 (5.64%)
  • Fichier : whereismypurse.7z
  • Taille : 2.74GB
  • Condensat (SHA-256) : 83cf33c0cb86457c929237a1b1d8763fad1a28734b987c0f69b9d9f6b66e85db

Après vérification du type de fichier, nous le décompréssons :

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ 7z x whereismypurse.7z

Après décompression du fichier whereismypurse.7z, nous obtenons deux fichiers :

  • whereismypurse.raw: ELF 64-bit LSB core file x86-64, version 1 (SYSV)
  • whereismypurse.vdi: VirtualBox Disk Image, major 1, minor 1 («< Oracle VM VirtualBox Disk Image »>), 26843545600 bytes

À partir de là je vais donc importer le .vdi dans virtualbox :

  1. Créer une machine virtuelle
  2. Nom : NDH
  3. Mémoire : 4Gb (Soyons fou)
  4. Utiliser un fichier de disque dur virtuel existant : whereismypurse.vdi

Après un strings sur le whereismypurse.raw, je comprends vite que c'est une image volatility qui a été dumpée par le créateur du challenge avec la fameuse commande : “vboxmanage debugvm “nom_de_la_vm” dumpvmcore –filename whereismypurse.raw”

Je décide donc de la redécouper proprement :

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ objdump -h whereismypurse.raw|egrep -w "(Idx|load1)"
Idx Nom           Taille    VMA               LMA               Fich off  Algn
  1 load1         20000000  0000000000000000  0000000000000000  00002598  2**0
Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ size=0x20000000;off=0x2598;head -c $(($size+$off)) whereismypurse.raw|tail -c +$(($off+1)) > volatility.raw

Entre temps, ma VM vient de finir de boot, elle s'arrête sur une session verouillée appartenant à l'utilisateur “SatNak”. (C'est un Windows7)

Pour avoir l'indice du mot de passe Windows, je fais exprès de rentrer n'importe quoi :

  Indice du mot de passe : bitcoin

Je sors donc le Volatility et lance un certain nombre de commandes dont les outputs me seront utiles plus tard.

Récupération du mot de passe de la VM pour pouvoir la déverouiller :

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ python /SOFT/volatility/vol.py --plugins=/SOFT/volatility/volatility/plugins -f volatility.raw --profile=Win7SP1x64 mimikatz
Module   User             Domain           Password
wdigest  SatNak           SatNak-PC        satoshinakamoto
wdigest  SATNAK-PC$       WORKGROUP

Cool ! satoshinakamoto ⇒ https://fr.wikipedia.org/wiki/Satoshi_Nakamoto (Pseudo du créateur du bitcoin). Effectivement, l'indice ne mentait pas !

Récupération de la liste des process :

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ python /SOFT/volatility/vol.py --plugins=/SOFT/volatility/volatility/plugins -f volatility.raw --profile=Win7SP1x64 pslist
Offset(V)          Name                    PID   PPID   ...
...                ...                    ...    ...    ...
0xfffffa800084e060 KeePassX.exe           2212   1804   ...
...                ...                    ...    ...    ...

Intéréssant, un KeePassX.exe, je vais surement devoir retrouver le mot de passe en mémoire. Je décide donc de dumper la mémoire du processus !

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ python /SOFT/volatility/vol.py --plugins=/SOFT/volatility/volatility/plugins -f volatility.raw --profile=Win7SP1x64 memdump -p 2212 --dump-dir memdumps
Writing KeePassX.exe [  2212] to 2212.dmp

Problème : Après différents strings / grep / egrep, je n'arrive pas à trouver le mot de passe.

Je tente le clipboard, sans succès :

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ python /SOFT/volatility/vol.py --plugins=/SOFT/volatility/volatility/plugins -f volatility.raw --profile=Win7SP1x64 clipboard

Tant pis je reviendrai sûrement dessus plus tard !

Je récupère également la liste des fichiers toujours ouvert en mémoire :

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ python /SOFT/volatility/vol.py --plugins=/SOFT/volatility/volatility/plugins -f volatility.raw --profile=Win7SP1x64 filescan  > filescan.txt

Après plusieurs grep / egrep intéréssants, j'obtiens des infos sur certains fichiers :

  • Users\SatNak\Documents\mykeepass.kdb
  • Users\SatNak\Downloads\KeePassX-0.4.4-win32\KeePassX\KeePassX.exe

Je me dirige donc dans le dossier de l'utilisateur SatNak et obtiens d'autre infos :

  • Users\SatNak\Documents\mykeepass.kdb.lock
  • Users\SatNak\Documents\Confidentiel
  • Users\SatNak\decred\decred-windows-amd64-v1.1.2\dcrctl.exe
  • Users\SatNak\decred\decred-windows-amd64-v1.1.2\dcrd.exe
  • Users\SatNak\decred\decred-windows-amd64-v1.1.2\dcrwallet.exe
  • Users\SatNak\decred\decred-windows-amd64-v1.1.2\promptsecret.exe
  • Users\SatNak\decred\decred-windows-amd64-v1.1.2\sample-dcrctl.conf
  • Users\SatNak\decred\decred-windows-amd64-v1.1.2\sample-dcrd.conf
  • Users\SatNak\decred\decred-windows-amd64-v1.1.2\sample-dcrwallet.conf
  mykeypass.kdb.lock me confirme que le keypass.kdb est bien ouvert, j'ai dû mal lire la mémoire du process dumpé...
  Confidentiel contient un petit "not here ;)"
  Le mot de passe satoshinakamoto ne fonctionne pas sur le .kdb
  Les confs ne contiennent pas d'infos pertinentes
  

Après une recherche google sur la localisation du wallet de decred, je vois qu'il se situe dans :

  C:\Users\SatNak\AppData\Local\Dcrwallet\mainnet\wallet.db
  C:\Users\SatNak\AppData\Local\Dcrwallet\mainnet\wallet.db.lock
  

Je récupère le wallet.db pour l'analyser et voir comment cela pourrait être chiffré.

Terminal
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ xxd wallet.db|less
00000000: 0000 0000 0000 0000 0400 0000 0000 0000  ................
...
00000040: 0400 0000 0000 0000 e39c 4420 3e97 39ba  ..........D >.9.
...
00001030: 0c00 0000 0000 0000 0d00 0000 0000 0000  ................
...
000020d0: 0100 0000 ed02 0000 0200 0000 2000 0000  ............ ...
...
000021e0: 0064 6174 6500 0000 005a 3d3f a968 0000  .date....Z=?.h..
...
000042b0: 0000 666c 6167 7b74 6878 5f79 6f75 5f66  ..flag{thx_you_f
000042c0: 6f75 6e64 5f6d 795f 7761 6c6c 6574 7dff  ound_my_wallet}.

Et on trouve le flag en clair ?!

12:14 PM ⇒ 200 points pour Zenk-Security !

Sur le moment j'ai scroll autant car je ne comprennais pas comment c'était possible qu'il n'y ait que des 0 et aucune data. Puis en arrivant sur de la data je suis tombé sur le flag.

PS : Si je n'avais pas trouvé le flag si vite, je serai retourné sur le dump mémoire du keypass pour me permettre de déchiffrer le wallet ? Serais-ce une vuln ? ;)

ndhquals2018/where-is-my-purse.1522596388.txt.gz · Dernière modification: 2018/04/01 17:26 par Lexsek