Data Siege
Catégorie: Forensics Difficulté: medium Flag: HTB{c0mmun1c4710n5_h45_b33n_r3570r3d_1n_7h3_h34dqu4r73r5}
Challenge
Description
It was a tranquil night in the Phreaks headquarters, when the entire district erupted in chaos. Unknown assailants, rumored to be a rogue foreign faction, have infiltrated the city's messaging system and critical infrastructure. Garbled transmissions crackle through the airwaves, spewing misinformation and disrupting communication channels. We need to understand which data has been obtained from this attack to reclaim control of the communication backbone. Note: Flag is split into three parts.
Analyse
Fichier .pcap
Nous avons une capture du traffic réseau, dedans on peut aller voir les différents fichiers échangés avec le protocol HTTP

Il y a 3 fichiers (dont 2 identiques donc que 2 fichiers intéressants) :
aQ4caZ.exeun exécutablenBISC4YJKs7j4Iun fichier sans extension
Fichier nBISC4YJKs7j4I
En l’ouvrant dans un éditeur de texte, on voit qu’il s’agit d’XML et que c’est ce fichier qui est respnsable du téléchargement de l’exécutable.

Ligne 7 on voit que le powershell va cherche l’exécutable et le lance ensuite
Fichier aQ4caZ.exe
Pré-analyse
Un coup de file dessus permet de voir qu’il s’agit d’un PE en .NET. On peut donc utiliser DotPeek pour le décompiler.

Etude du code
Il contient 4 namespaces : EZRATClient / EZRATClientCore / EZRATClient.Forms / EZRATCient.Utils
Dans EZRATClient on y trouve la classe Program
Celle-ci permet visiblement de créer une recevoir une connexion TCP puis de recevoir et envoyer des commandes.
Mais comme on peut le voir à la ligne 9 de sa fonction SendCommand , tout le traffic est chiffré avant l’envoie :
On trouve la également la fonction Decrypt qui prend en paramètre simplement le chiffré
Cette fonction est intéressante parce qu’on voit qu’elle déchiffre de l’AES et que pour générer la clé, elle utilise une dérivation de clé rfc2898DeriveBytes
Cette fonction de dérivation prend 2 paramètres selon la doc de microsoft : un mot de passe et un salt.
Concernant le deuxième, le salt est écrit en dur : [86, 101, 114, 121, 95, 83, 51, 99, 114, 51, 116, 95, 83]
En ASCII ça se traduit par : Very_S3cr3t_S
Concernant la clé, on voit qu’elle vient de Constantes.EncryptKey et donc on peut la récupérer en se baladant dans la classe Constants
On peut également trouver l’ip / port de l’attaquant ainsi que la clé de chiffrement utilisée
Récupération des échanges
On connait donc l’adresse de l’attaquant, sa méthode de chiffrement et surtout comme la déchiffrer
Filtrage du réseau
Sachant que l’on cherche de la base64, on voit rapidemment des échanges qui y ressemblent dans le stream n°5. On va donc filtrer le traffic et déchiffrer ces messages
Pour le déchiffrement :
Pour le filtrage du traffic :
Script complet
En sortie on a alors :
On trouve la première partie du flag dans la commande
echo ssh-rsa:HTB{c0mmun1c4710n5La seconde dans le fichier
credentials.txtqui est affiché :_h45_b33n_r357
La troisième partie se trouve dans le fichier upload sur la victime, c’est à dire le paquet que l’on a pas pu déchiffrer puisqu’il n’était pas chiffré. Il s’agit du fichier 4AcFrqA.ps1 qui contient du powershell en base64, il suffit donc de le décoder

Mis à jour