Data Siege

Catégorie: Forensics Difficulté: medium Flag: HTB{c0mmun1c4710n5_h45_b33n_r3570r3d_1n_7h3_h34dqu4r73r5}

Challenge

file-archive
23KB
circle-info

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.exe un exécutable

  • nBISC4YJKs7j4I un 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{c0mmun1c4710n5

  • La seconde dans le fichier credentials.txt qui 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