
GRAT2 C2
(c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
/ ._. \ / ._. \ / ._. \ / ._. \ / ._. \
\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/
(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
|| G || || R || || A || || T || || 2 ||
_.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._
(.-./`-'\.-.)(.-./`-`\.-.)(.-./`-'\.-.)(.-./`-'\.-.)(.-./`-'\.-.)
`-' `-' `-' `-' `-' `-' `-' `-' `-' `-'
v1.1 beta!
À propos de GRAT2
GRAT2 est un outil de commande et de contrôle (C2) écrit en python3 et le client en .NET 4.5. L'idée principale vient de Georgios Koumettou qui a initié le projet.
Pourquoi avons-nous développé GRAT2 ?
Nous sommes conscients qu'il existe de nombreux outils C2, mais nous avons développé celui-ci par curiosité sur le fonctionnement des C2 et des techniques d'évasion. C'est tout ! ;-)
Fonctionnalités actuelles :
Techniques d'évasion :
- Sandbox (Vérifier si la machine est dans le domaine, sinon quitter).
- Correction de l'enregistrement ETW (Event Tracing for Windows).
- Correction de l'interface AMSI (Antimalware Scan Interface).
- caretrun - Exécuter une commande via cmd.exe dans un format caret (^i^p^c^o^n^f^i^g) en utilisant explorer.exe comme PID parent (Éviter certains AV/EDR).
Communication :
- HTTP et HTTPS
- DNS - Prend actuellement en charge uniquement les enregistrements TXT.
- Communication encodée utilisant XOR et base64.
- Conscient du proxy.
Modules :
- startdns - Démarrer le serveur d'écoute DNS.
- listagents - Lister les agents actuels.
- localip - Obtenir l'adresse IP locale de la machine.
- uac - Tenter de contourner l'UAC en utilisant un nettoyage de disque silencieux avec une technique de falsification du PID parent.
- maketoken - Supprimer le jeton actuel et en créer un nouveau avec les informations d'identification fournies (Domaine ou Local).
- revtoself - Supprimer le jeton actuel.
- stealtoken - Tenter de voler un jeton d'un processus en cours et d'usurper l'identité de l'utilisateur (droits Administrateur requis).
- rportfwd - Tenter de créer un transfert de port inverse.
- whoami - Afficher l'utilisateur actuel.
- hostname - Afficher le nom d'hôte de la machine.
- domain - Afficher le FQDN du domaine.
- screenshot - Prendre une capture d'écran.
- download - Télécharger un fichier.
- upload - Télécharger un fichier.
- cd - Changer de répertoire.
- run - Exécuter une commande via cmd.exe en utilisant explorer.exe comme PID parent.
- caretrun - Exécuter une commande via cmd.exe dans un format caret (^i^p^c^o^n^f^i^g) en utilisant explorer.exe comme PID parent (Éviter certains AV/EDR).
- sleep - Définir un nouveau temps de pause.
- exit - Quitter.
- shell - Exécuter une commande via cmd.exe.
- powershell - Exécuter une commande powershell en utilisant PowerShell non managé.
- powerscript - Exécuter des scripts powershell en utilisant PowerShell non managé.
- executeassembly - Tenter d'exécuter des assemblies .NET en mémoire.
- ps - Afficher les processus en cours.
- pwd - Afficher le répertoire actuel.
- ls - Liste des répertoires.
- pid - Afficher l'ID du processus actuel.
Techniques d'injection de processus :
- dynamic_injectcrt - Tenter d'injecter une shellcode dans un processus en utilisant Dynamic Invoke.
- ppid_processhollow - Tenter d'injecter une shellcode dans un processus en utilisant Process Hollowing et la falsification du PID parent (explorer.exe).
- processhollow - Tenter d'injecter une shellcode dans un processus en utilisant la technique Process Hollowing.
- injectppidapc - Tenter d'injecter une shellcode dans un processus en utilisant QueueUserAPC et la falsification du PID parent (explorer.exe).
- injectapc - Tenter d'injecter une shellcode dans un processus en utilisant la technique QueueUserAPC.
- injectcrt - Tenter d'injecter une shellcode dans un processus distant en utilisant la technique Create Remote Thread.
Référez-vous à GRAT2_Shellcodes pour générer une shellcode indépendante de la position en utilisant Donut.
À FAIRE :
- Écouteur SMB.
- Améliorer l'écouteur DNS en ajoutant d'autres fonctionnalités comme les enregistrements A, passer du DNS à HTTP, etc.
- Ajouter la journalisation.
- Implémenter SOCKS5.
- Corriger les problèmes connus.

Paramètres généraux et écouteur HTTP/s :
-
c2 - Adresse IP ou nom d'hôte de votre serveur GRAT2 (Requis).
-
sandboxEvasion - Si activé (1), GRAT2 s'exécutera uniquement sur un ordinateur joint à un domaine, sinon GRAT2 se terminera. Si désactivé (0), GRAT2 s'exécutera uniquement sur un ordinateur non joint à un domaine, sinon il se terminera (Par défaut : Désactivé).
-
patchEtw - Si activé (1), l'ETW sera corrigé (Par défaut : Activé).
-
patchAmsi - Si activé (1), l'AMSI sera corrigé (Par défaut : Activé).
-
sleep - Définir le temps de pause (Par défaut : 3 secondes).
-
UserAgent - Définir le UserAgent (Par défaut : "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko").
-
initialUrl - Requête HTTP GET initiale de GRAT2 (Par défaut : jquery.js).
-
sendResults - Requête HTTP POST des résultats de GRAT2 (Par défaut : login.aspx).
REMARQUE si vous modifiez la chaîne initialUrl ou sendResults, vous devez mettre à jour la chaîne dans GRAT2_Server/handlers.py aux lignes 49 et 84 respectivement.
Écouteur DNS :
- DNSListener - Activer (1) ou Désactiver (0). Si activé, configurer le serveur GRAT2 en conséquence (voir ci-dessous).
- DNSServer - Votre serveur DNS GRAT2.
- dnsMaxTXT - Longueur maximale des enregistrements TXT (Par défaut : 255).
- maxDNSChar - Taille maximale en caractères pour chaque sous-domaine DNS (Par défaut : 63).

Écouteur HTTP/s et DNS :
- HOST_NAME - Adresse IP ou nom d'hôte de votre serveur GRAT2.
- PORT_NUMBER - Port d'écoute. (80 ou 443)
- server_pem - Emplacement de votre fichier PEM.
- dnsDomainName - Votre serveur DNS GRAT2.
Utilisation :
- Ouvrez le projet client GRAT2 (GRAT2_Client.sln) avec Visual Studio, modifiez la configuration de la solution de Debug à Release, puis générez la solution.
- Installez les deux dépendances (dnslib et termcolor) sur le serveur GRAT2 : pip3 install -r requirements.txt
- Démarrez le serveur GRAT2 :

- Exécutez l'exécutable client GRAT2 - GRAT2_Client\bin\Release\GRAT2_Client.exe
- Interagissez avec l'agent :

Notes de version :
Version 1.0 - 05 sept. 2020
Version 1.1 - 13 déc. 2020
- Ajout de l'écouteur DNS
- Ajout de l'écouteur HTTPS
- Ajout de la fonctionnalité de liste des agents
- Ajout du module localip, permettant d'obtenir l'adresse IP locale de la machine
- Réécriture de PowerShell non managé
- Passage de .NET 4.0 à .NET 4.5
Crédits :
De plus, un remerciement à chaque auteur et le lien de référence est mis en évidence dans le code source.
Avertissement :
Ce projet ne peut être utilisé qu'à des fins de tests autorisés ou éducatives. L'utilisation de ce logiciel contre des systèmes cibles sans autorisation préalable est illégale, et l'auteur décline toute responsabilité en cas de dommages résultant d'une mauvaise utilisation de ce logiciel.