Fake Boost

Catégorie: Forensics Difficulté: easy Flag: HTB{fr33_N17r0G3n_3xp053d!_b3W4r3_0f_T00_g00d_2_b3_7ru3_0ff3r5}

Challenge

file-archive
20MB
circle-info

Description


In the shadow of The Fray, a new test called "Fake Boost" whispers promises of free Discord Nitro perks. It's a trap, set in a world where nothing comes without a cost. As factions clash and alliances shift, the truth behind Fake Boost could be the key to survival or downfall. Will your faction see through the deception? KORP™ challenges you to discern reality from illusion in this cunning trial.

Analyse du réseau

On a une capture du traffic, en regardant dans les objets échangés en HTTP on en trouve 2 (le troisième ne contient rien) :

  • freediscordnitro

  • rj1893rj1joijdkajwda

Analyse de freediscordnitro

On a un fichier qui est clairement un script powershell. On va commencer par renommer quelques variables pour le rendre plus explicit :

Maintenant on comprend assez rapidemment le code, par ligne ça donne :

  1. On commence par un très long payload “chiffré”

  2. On déchiffre ce payload chiffré en le lisant à l’envers, ce résultat est en fait un payload encodé en base64

  3. On décode la base64

  4. On fait un trick pour appeler Invoke-Expression, qui fait en gros un eval du payload décodé

Déchiffrement du payload

On va simplement inverser le payload de base puis le décoder :

On se retrouve alors avec :

Sous la banner du programme, on trouve $part1 = "SFRCe2ZyMzNfTjE3cjBHM25fM3hwMDUzZCFf" qui est donc la première partie du flag, il suffit de décoder la base64

Concernant la suite du code, on voit que le script récupère des données sur la machine, les chiffres avec AES et les envoie sur l’URL http://192.168.116.135:8080/rj1893rj1joijdkajwda


Fichier rj1893rj1joijdkajwda

Analyse

On vient de découvrir à quoi correspondait notre second fichier. Il faut maintenant le déchiffer.

Dans le script d’avant, on voit que ce qui est envoyé est le résultat de Encrypt-String avec la clé Y1dwaHJOVGs5d2dXWjkzdDE5amF5cW5sYUR1SWVGS2k=

Encrypt-String appelle par la suite la fonction Create-AesManagedObject avec cette clé (et le texte à chiffrer forcément) qui créé un objet System.Security.Cryptography.AesManaged

circle-info

En allant voir la doc de celui-ci ou en créant un en powershell, on voit qu’un IV et une clé aléatoire sont définies de base.

Ensuite notre fonction Create-AesManagedObject vient forcer la clé passé en argument dans ce nouvel et le retourner

Encrypt-String chiffre avec celui-ci et renvoie le résultat précédé de l’IV utilisé.

Déchiffrement

Donc pour récupérer le message envoyé, on récupère l’IV au début du fichier (16 bytes) puis on déchiffre le reste avec le couple clé/IV :

La seconde partie du flag se trouve dans le champ Email en base64

Mis à jour