Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
external_c2_framework — Python-API für die Verwendung mit der External C2-Spezifikation von cobalt strike | Kitploit
Tools/GitHubGitHub/truneski/external_c2_framework
Penetrationstest-FrameworksExploit-FrameworksPost-ExploitationCommand and ControlRed TeamingPayload-Entwicklung
GitHubtruneski/external_c2_framework

external_c2_framework

Python-API für die Verwendung mit der External C2-Spezifikation von cobalt strike

Repository anzeigen
63195vor 7 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

external_c2-Framework

Python-Framework zur Verwendung mit der External C2-Spezifikation von Cobalt Strike, wie in der Spezifikation beschrieben.

Das primäre Designziel ist eine sehr modulare Implementierung der External-C2-Spezifikation, die genügend Abstraktion bietet, um C2-Kanäle für Cobalt Strike einfach zu implementieren. Idealerweise muss ein Benutzer lediglich ein transport-Modul, ein encoder-Modul erstellen und eine Konfigurationsdatei ausfüllen, um einen neuen Kanal zu implementieren.

Dropbox-Transport-Konfiguration

Sie müssen mehrere Konfigurationsänderungen vornehmen, bevor Sie loslegen können. Sie benötigen:

  1. Erstellen Sie ein Dropbox-Konto, falls Sie noch keines haben (https://www.dropbox.com/)
  2. Generieren Sie ein Zugriffstoken für Ihr Dropbox-Konto (https://www.iperiusbackup.net/en/create-dropbox-app-get-authentication-token/)
  3. Ändern Sie in builds/client/dbox/dbox_client.py das token zu dem in Schritt 2 generierten.
  4. Nehmen Sie in dieselben Änderungen wie in Schritt 3 vor.
builds/server/utils/transports/transport_dbox.py
  • Kompilieren Sie Ihre DLL mit: cd builds/client/dbox && ./compile_dll.sh
  • Starten Sie Ihren Cobalt-Strike-Teamserver und verbinden Sie sich mit dem Cobalt-Strike-Client.
  • Laden Sie das Skript start_externalc2.cna von Ihrem CS-Client.
  • Kopieren Sie dieses Repo auf Ihren Teamserver und führen Sie dann den Server aus mit cd builds/server/ && ./dbox_server.py
  • Verteilen Sie Ihre ausführbare Datei aus Schritt 6 an den Host und führen Sie sie aus. Sie sollten eine Verbindung vom Teamserver zurück sehen.
  • Link zur Videodemo: https://www.youtube.com/watch?v=nTRHSh_uCcA

    Architektur

    Dieses Projekt besteht aus drei Hauptteilen:

    • Builder (noch nicht implementiert)
    • Client
    • Server

    Builder

    Der Builder erstellt dynamisch Client- und Server-Bereitstellungen basierend auf der angegebenen Konfiguration. Idealerweise könnte der Client als einzelne kompilierte Datei wie eine DLL oder EXE verteilt werden.

    Client

    Der Client ist im Wesentlichen die Payload, die auf dem Endpoint läuft und in der Spezifikation als third-party client bezeichnet wird. Die Logik des Clients ist hauptsächlich statisch:

    1. Führen Sie alle Vorbereitungen aus, die zur Nutzung des transport erforderlich sind.
    2. Empfangen Sie den Stager.
    3. Injizieren Sie den Stager und öffnen Sie das Handle zum Beacon.
    4. Beziehen Sie Metadaten vom Beacon.
    5. Leiten Sie die Metadaten vom Beacon über den transport an den C2-Server weiter.
    6. Beobachten Sie den transport auf neue Tasks.
    7. Leiten Sie neue Tasks an den Beacon weiter.
    8. Leiten Sie Antworten vom Beacon über den transport weiter.
    9. Wiederholen Sie die Schritte 6-8.

    Die für den Transport und die Kodierungsmechanismen benötigten Konfigurationen werden statisch in den Client kopiert. Die Funktionslogik für Transport- und Kodierungsmechanismen wird ebenfalls statisch aus den jeweiligen Modulen kopiert.

    Die Logik der Prozessinjektion wird vom Builder bestimmt.

    Server

    Der Server ist die Anwendung, die die Kommunikation zwischen dem client und dem c2 server vermittelt und in der Spezifikation als third-party Client Controller bezeichnet wird. Die Serverlogik ist hauptsächlich statisch, unterstützt jedoch ausführliche und Debug-Ausgaben zur Unterstützung der Entwicklung:

    1. Parsen Sie die Konfiguration.
    2. Importieren Sie das angegebene Kodierungsmodul.
    3. Importieren Sie das angegebene Transportmodul.
    4. Stellen Sie eine Verbindung zum C2-Server her.
    5. Fordern Sie einen Stager vom C2-Server an.
    6. Kodieren Sie den Stager mit dem encoder-Modul.
    7. Übertragen Sie den Stager mit dem transport-Modul.
    8. Warten Sie auf eine Metadatenantwort vom Client, die über den transport empfangen wird.
    9. Dekodieren Sie die Metadaten mit dem encoder-Modul.
    10. Leiten Sie die Metadaten an den C2-Server weiter.
    11. Empfangen Sie einen neuen Task vom C2-Server.
    12. Kodieren Sie den neuen Task.
    13. Leiten Sie den neuen Task über den transport an den Client weiter.
    14. Warten Sie auf eine Antwort vom Client, die über den transport empfangen wird.
    15. Dekodieren Sie die Antwort mit dem encoder-Modul.
    16. Leiten Sie die Antwort an den C2-Server weiter.
    17. Wiederholen Sie die Schritte 11-16.

    Die Bestimmung, welches encoder- und transport-Modul der Server importiert, erfolgt anhand der in config.py gespeicherten Werte.

    Es werden keine Importe ungenutzter transport- oder encoder-Module durchgeführt.

    Gemeinsame Funktionalität von Client und Modulen

    Die folgenden Tabellen beschreiben gemeinsame Funktionen zwischen den encoding- und transport-Modulen und dem Client. Gemeinsame Funktionen sind im Wesentlichen exakt derselbe Code.

    EIN SEHR WICHTIGER HINWEIS: Die Daten, die an die sendData- und recvData-Funktionen des Clients gesendet werden, sollten Rohdaten sein, während Daten, die an die sendData- und retrieveData-Funktionen des Transportmoduls gesendet werden, bereits nach Bedarf kodiert oder dekodiert sein sollten.

    Transportmodul

    TransportfunktionClient-FunktionBeschreibung
    prepTransportprepTransportFührt alle Vorkonfigurationen aus, die zur Nutzung des Transportmechanismus erforderlich sind
    sendDatasendDataDefiniert, wie Daten über den Transportmechanismus gesendet werden
    retrieveDatarecvDataDefiniert, wie Daten über den Transportmechanismus empfangen werden

    Encoder-Modul

    Encoder-FunktionClient-FunktionBeschreibung
    encodeencodeDefiniert Änderungen an Rohdaten, um sie für den Transport vorzubereiten
    decodedecodeDefiniert Änderungen an Rohdaten, die vom Transport empfangen wurden, um sie an ihr Ziel weiterzuleiten

    So verwenden Sie dies

    Bestimmen Sie zunächst, welches Transport- und Kodierungsmodul Sie verwenden möchten. Wir verwenden für das folgende Beispiel transport_gmail und encoder_b64url.

    Ändern Sie als Nächstes server/config.py entsprechend Ihren Anforderungen und stellen Sie sicher, dass ENCODER_MODULE und TRANSPORT_MODULE korrekt konfiguriert und auf Ihre gewünschten Module zeigen:

    Beispiel config.py

    root@kitploit:~
    EXTERNAL_C2_ADDR = "127.0.0.1"
    EXTERNAL_C2_PORT = "2222"
    C2_PIPE_NAME = "foobar"
    C2_BLOCK_TIME = 100
    C2_ARCH = "x86"
    IDLE_TIME = 5
    ENCODER_MODULE = "encoder_b64url"
    TRANSPORT_MODULE = "transport_gmail"
    verbose = False
    debug = False
    

    Ändern Sie als Nächstes den Konfigurationsabschnitt für Ihr ausgewähltes transport- und encoder-Modul.

    Stellen Sie sicher, dass der Konfigurationsabschnitt von client/mechanism/$mechanism_client.py mit allen bisher definierten Konfigurationen übereinstimmt.

    Führen Sie auf dem Rechner, auf dem der Server läuft, Folgendes aus:

    python server.py

    Für eine ausführlichere Ausgabe können Sie Folgendes ausführen:

    python server.py -v

    Für eine ausführlichere Ausgabe und zusätzliche Ausgaben, die für das Debugging nützlich sind, können Sie Folgendes ausführen:

    python server.py -d

    Führen Sie als Nächstes den Client auf dem Ziel-Endpoint aus.

    Wenn alles funktioniert hat, wird ein neuer Beacon in der Cobalt-Strike-Konsole registriert, mit dem Sie interagieren können.

    FAQ

    Warum haben Sie das geschrieben?: Es gab nicht sehr viele veröffentlichte Implementierungen der Spezifikation, und von den veröffentlichten sind sie entweder nicht in einer Sprache, die ich kenne, oder sie besitzen nicht die Modularität und Abstraktion, die ich gesucht habe.

    Warum Python 2?: Ich bin faul und es ist einfach, neue Transport- und Kodierungskanäle darin zu implementieren.

    Dein Code ist Mist: Das ist keine Frage.

    Kann ich neue Transport- und/oder Encoder-Module einreichen?: Ja, bitte! Reichen Sie einen Pull-Request ein, und ich werde ihn gerne überprüfen.

    Roadmap

    • Ähnliche Abstraktion und Modularität werden auch in der Client-Komponente implementiert, um verschiedene Methoden der Prozessinjektion für die Beacon-Payload und andere auf der Roadmap befindliche Funktionen zu unterstützen.

    • Derzeit fehlt die Builder-Funktionalität, die geplant ist, um Client- und Server-Bereitstellungen dynamisch zu erstellen, aber sie steht auf der Roadmap.

    Tool herunterladen