Après vérification du type de fichier, nous le décompréssons :
[root@Lexsek:~/home/lexsek/Bureau/NDH16/]$ 7z x whereismypurse.7z
Après décompression du fichier whereismypurse.7z, nous obtenons deux fichiers :
À partir de là je vais donc importer le .vdi dans virtualbox :
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 :
[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
[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 :
[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 :
[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 !
[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 :
[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 :
[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 :
Je me dirige donc dans le dossier de l'utilisateur SatNak et obtiens d'autre infos :
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 des infos dans une conf dans :
C:\Users\SatNak\AppData\Local\Dcrwallet\mainnet\dcrwallet.conf username=SatNakpassword=atuG8t+Qlbggpm9+FUbmnu12DqAlk7wj
Je récupère le wallet.db pour l'analyser et voir comment cela pourrait être chiffré.
[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 ? ;)