Game Invitation

Catégorie: Forensics Difficulté: hard Flag: HTB{m4ld0cs_4r3_g3tt1ng_Tr1cki13r}

Challenge

file-archive
140KB
circle-info

Description


In the bustling city of KORP™, where factions vie in The Fray, a mysterious game emerges. As a seasoned faction member, you feel the tension growing by the minute. Whispers spread of a new challenge, piquing both curiosity and wariness. Then, an email arrives: "Join The Fray: Embrace the Challenge." But lurking beneath the excitement is a nagging doubt. Could this invitation hide something more sinister within its innocent attachment?

Analyse de invitation.docm

On a un docm c’est à dire un fichier Office qui contient des macros. Pour les extraires j’utilise oledump.py

$ oledump.py invitation.docm
A: word/vbaProject.bin
 A1:       424 'PROJECT'
 A2:        71 'PROJECTwm'
 A3: M    5580 'VBA/NewMacros'
 A4: m     938 'VBA/ThisDocument'
 A5:      3354 'VBA/_VBA_PROJECT'
 A6:       572 'VBA/dir'

On voit que le 3ème stream sont des macros, on les extraits avec la commande oledump.py -s 3 --vbadecompressskipattributes invitation.docm > macro.vba

Voici le code VBA que l’on en ressort après avoir remis un peu d’ordre dans ces variables pour mieux comprendre ce que l’on voit :

Ce que fait le script en gros :

  1. Si la variable d’environnement est GAMEMASTERS.local alors le script s’arrête là

  2. Le script récupère le contenu du fichier .docm actuel

  3. Il recherche ensuite une chaîne de caractères dedans et récupère les 13082 bytes après

  4. Le contenu récupéré est déchiffré avec la fonction decrypt

  5. Le déchiffré est enregistré dans le fichier %APPDATA%/mailform.js

  6. Le fichier est exécuté avec comme argument vF8rdgMHKBrvCoCp0ulm

On va donc rechercher cette chaîne et la déchiffrer en python :


Analyse de mailform.js

On se retrouve avec un fichier Javascript :

On va pas s’embêter à tout reverse, on va simplement faire un console.log à la place de l’eval de la ligne 6

Il faut simplement remplacer les deux premières ligne pour mettre const DASz = "vF8rdgMHKBrvCoCp0ulm" (c’est l’argument passé par le vba). Et on obtient :

Dans le code on trouve : S47T.SETREQUESTHEADER("Cookie:", "flag=SFRCe200bGQwY3NfNHIzX2czdHQxbmdfVHIxY2tpMTNyfQo=");

Il s’agit simplement de base64, ce qui nous donne le flag

Mis à jour