La suite de ce challenge nous donne une capture réseau en plus du dump de l'étape précédente.
Pour cela, revenons sur nos pas et essayons de reverse le spyware lancé sur la machine. Une fois le binaire extrait du dump mémoire, nous allons l'envoyer sur DogBolt pour voir rapidement ce qu'il fait :
Ghidra reverse code
Nous voyons rapidement qu'il chiffre les données avant l'envoi des données vers sont serveur distant. Nous allons donc devoir comprendre comment elles ont été chiffrées dans un premier temps, puis retrouver ces données (chiffrées) et enfin les déchiffrer (ouais y a de la réflexion là :p).
Dans le binaire de tout à l'heure, il était évoqué un fichier SSLKEYLOGFILE, qui contient très probablement les clés pour déchiffrer le flux SSL/TLS de la trame Wireshark.
Mais en même temps, le binaire est bien fait car il efface ce fichier à la fin de son exécution :
Nous allons donc devoir procéder autrement, et tout comme dans la première partie du challenge, nous allons utiliser les strings du dump, car elles contiendront très certainement ces données.
En regardant sur internet et sur d'anciens WU nous voyons que le fichier SSLKEY contient toujours un SERVER_HANDSHAKE_TRAFFIC_SECRET, nous allons donc chercher ça dans les strings.
Grâce à cela, nous trouvons tout le contenu que nous cherchions :
Nous essayons donc d'importer un fichier sslkeys.log dans les paramètres de Wireshark afin de déchiffrer le flux SSL. Mais malheureusement, ça ne fonctionne pas, bizarre cette histoire...
Arrivé à cette étape, je suis resté bloqué plusieurs jours, jusqu'à revenir sur une info donnée dans l'énoncé : "certaines informations soient tronquées dans la capture de la mémoire vive".
J'ai donc fait attention à ces fameuses valeurs que nous venons de trouver et là quelle surprise :
Notre CLIENT_HANDSHAKE_TRAFFIC_SECRET est incomplet et il lui manque 2 caractères hexa...
Je suis donc parti à la recherche de ces fameux 2 caractères manquants, et tester 162 possibilités a donc été la merveilleuse solution que j'ai trouvé et choisi...
Comble du hasard, c'est la valeur fb (l'une des toutes dernières) qui m'a permis d'avancer en déchiffrant le flux SSL/TLS :
Pour retrouver ces données, allons voir la capture réseau pour des données qui ont été envoyées (POST)
Nous avons donc retrouver ces données, et malheureusement, elles sont bien chiffrées 😂
Maintenant, nous allons créer un petit script Python qui reprends les éléments du binaire ainsi que les données chiffrées afin de le retrouver en clair :
Quel miracle, nous avons toutes les valeurs du keylogger en clair. Il suffit simplement de faire un peu le ménage en enlevant les _CTRL_, _HAUT_, _MAJ_, _RETOUR_, _ALTGR_...
Une fois le nettoyage fait, nous avons le flag en clair 🎉