
Générateur de macros Excel 4.0 (XLM) pour injecter des DLL et des EXE en mémoire.
| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| par @JoeLeonJr (@FortyNorthSec)
EXCELntDonut est un générateur de macros XLM (Excel 4.0). Commencez avec du code source C# (EXE) et obtenez une macro XLM (Excel 4.0) qui exécutera votre code en mémoire. Les macros XLM (Excel 4.0) peuvent être enregistrées dans des fichiers .XLS.
chmod +x install.sh
./install.sh
Qu'est-ce qui est installé ?
Si vous préférez exécuter EXCELntDonut simplement comme un script Python, vous devrez configurer un environnement virtuel avec deux packages "pandas" et "donut-shellcode". De plus, vous devrez installer mono-complete via apt-get et appeler le script drive.py avec python3. Nous recommandons d'utiliser simplement le script bash ./install.sh, mais libre à vous.
Usage:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Flags:
(obligatoire)
-f chemin vers le fichier contenant votre code source C# (exe uniquement)
-r Références nécessaires pour compiler votre code C# (les mêmes que celles utilisées avec mcs pour compiler sous Linux)
(ex: -r 'System.Management')
(optionnel)
-o nom du fichier de sortie
--sandbox
Effectue des vérifications basiques de sandbox. Cette fonction sera mise à jour au fur et à mesure de la découverte de nouvelles approches.
--obfuscate
Effectue une obfuscation basique de la macro.
Vous fournissez un fichier C# contenant votre charge utile (comme un EXE avec une méthode main qui exécute une charge utile Cobalt Strike Beacon). Ce fichier C# est compilé avec MCS en deux assemblies .NET : x86 et x64. Après compilation, les excellents outils Donut (pour x86) et CLRvoyance (pour x64) convertissent chaque assembly en shellcode indépendant de la position. Ensuite, tous les octets nuls sont supprimés, car les macros XLM (Excel 4.0) ne gèrent pas bien les octets nuls, et la charge utile est découpée en lignes ne dépassant pas 255 caractères (pour x86) ou 10 caractères (pour x64).
Une fois le shellcode préparé, il est combiné avec des fonctions d'injection de processus de base (VirtualAlloc, WriteProcessMemory et CreateThread) ainsi qu'une fonction de vérification d'architecture pour déterminer quelle charge utile (x86 ou x64) exécuter sur le système cible. Si vous choisissez d'effectuer des vérifications de sandbox ou une obfuscation basique, ces fonctions mettront à jour votre macro. Enfin, la sortie est placée dans un fichier CSV (enregistré sous .txt).
Une fois que vous avez le fichier de sortie d'EXCELntDonut, ouvrez le fichier de sortie dans un éditeur de texte et copiez son contenu intégralement (Ctrl-A, Ctrl-S). Ouvrez Excel sur une VM Windows, faites un clic droit sur "Feuil1" et sélectionnez "Insérer". Choisissez "Macro MS Excel 4.0". Allez dans la cellule A1 et collez la sortie d'EXCELntDonut. Toutes les données seront probablement collées dans une seule colonne. Les données sont séparées par des points-virgules ";". Allez dans l'onglet "Données" puis cliquez sur "Convertir". Sélectionnez "Délimité" et sur l'écran suivant, choisissez "Point-virgule" puis cliquez sur "Terminer". La macro se répartira sur les colonnes et lignes appropriées.
(Note : si vous avez sélectionné le drapeau "--obfuscate", vous devrez faire défiler horizontalement pas mal pour trouver votre code réel, car une partie de la logique d'obfuscation déplace la macro dans une section aléatoire de la feuille de calcul).
Nous recommandons deux choses à ce stade :
Enregistrez le fichier (.xls) et essayez de l'ouvrir. Il devrait exécuter automatiquement votre charge utile.
Ces vérifications sont basées sur ce que les acteurs malveillants réels utilisent dans leurs logiciels malveillants.
=FORMULE(D3&D23&D54&D23&D44;E45)
La fonction FORMULE nous permet de placer une formule, qui peut ensuite être exécutée, dans une autre cellule. Ainsi, dans ce cas, nous plaçons les instructions d'injection de processus, puis utilisons la fonction FORMULE pour placer la fonction réelle dans une autre cellule à exécuter. Cela évite que les défenseurs effectuant une analyse statique voient des choses comme "VirtualAlloc".
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
par @JoeLeonJr (@FortyNorthSec)
[i] Génération de votre assembly .NET x86.
warning CS8001: Le chemin SDK n'a pas pu être résolu
test.cs(2,14): erreur CS0234: Le type ou le nom d'espace de noms « Management » n'existe pas dans l'espace de noms « System ». Référence d'assembly manquante ?
Cette erreur signifie très probablement qu'il manque un assembly de référence lors de la compilation avec mono. Pour la corriger, il suffit de passer l'espace de noms mentionné dans le drapeau -r. Dans ce cas, nous ajouterions -r 'System.Management' à la ligne de commande. La nouvelle commande serait :