Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
external_c2_framework — API Python per l'utilizzo con la specifica External C2 di Cobalt Strike | Kitploit
Strumenti/GitHubGitHub/truneski/external_c2_framework
Frameworks per Penetration TestingFramework di ExploitPost-ExploitCommand and ControlRed TeamingSviluppo Payload
GitHubtruneski/external_c2_framework

external_c2_framework

API Python per l'utilizzo con la specifica External C2 di Cobalt Strike

Vedi Repository
63197 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

external_c2 framework

Framework Python per l'utilizzo con la specifica External C2 di Cobalt Strike come descritto nella specifica.

L'obiettivo progettuale principale è essere un'implementazione molto modulare della specifica external c2 che fornisca un'astrazione sufficiente per implementare facilmente canali C2 per Cobalt Strike. Idealmente, tutto ciò che un utente deve fare è creare un modulo transport, un modulo encoder e compilare un file di configurazione per implementare un nuovo canale.

Configurazione del trasporto Dropbox

Dovrai apportare diverse modifiche alla configurazione prima di iniziare. Dovrai:

  1. Creare un account Dropbox se non lo hai già (https://www.dropbox.com/)
  2. Generare un token di accesso per il tuo account Dropbox (https://www.iperiusbackup.net/en/create-dropbox-app-get-authentication-token/)
  3. In builds/client/dbox/dbox_client.py, cambia token con quello generato al punto 2.
  4. In builds/server/utils/transports/transport_dbox.py apporta le stesse modifiche fatte al punto 3.
  5. Compila la tua DLL con: cd builds/client/dbox && ./compile_dll.sh
  6. Avvia il Team Server di Cobalt Strike e connettiti con il Client di Cobalt Strike
  7. Carica lo script start_externalc2.cna dal tuo client CS.
  8. Copia questo repository sul tuo Team Server, quindi esegui il server con cd builds/server/ && ./dbox_server.py
  9. Distribuisci il tuo eseguibile dal punto 6 all'host ed eseguilo. Dovresti vedere una connessione di ritorno dal Team Server.

Link al video demo: https://www.youtube.com/watch?v=nTRHSh_uCcA

Architettura

Questo progetto è composto da tre parti principali:

  • Builder (non ancora implementato)
  • Client
  • Server

Builder

Il builder costruisce dinamicamente le distribuzioni client e server in base alla configurazione specificata. Idealmente, il client dovrebbe poter essere distribuito come un singolo file compilato, come una DLL o un EXE.

Client

Il client è essenzialmente il payload che viene eseguito sull'endpoint, indicato come third-party client nella specifica. La logica del client è principalmente statica:

  1. Eseguire le preparazioni necessarie per utilizzare il transport
  2. Ricevere lo stager
  3. Iniettare lo stager e aprire l'handle al beacon
  4. Ottenere i metadati dal beacon
  5. Inoltrare i metadati dal beacon al server C2 tramite il transport
  6. Monitorare il transport per nuovi task
  7. Inoltrare i nuovi task al beacon
  8. Inoltrare le risposte dal beacon tramite il transport
  9. Ripetere i passaggi 6-8.

Le configurazioni necessarie per i meccanismi di trasporto e codifica vengono copiate staticamente nel client. Anche la logica delle funzioni per i meccanismi di trasporto e codifica viene copiata staticamente dai rispettivi moduli.

La logica dell'iniezione di processo è determinata dal builder.

Server

Il server è l'applicazione che fa da intermediario nella comunicazione tra il client e il c2 server, indicato come third-party Client Controller nella specifica. La logica del server è principalmente statica, ma supporta output verbose e di debug per assistere nello sviluppo:

  1. Analizzare la configurazione
  2. Importare il modulo di codifica specificato
  3. Importare il modulo di trasporto specificato
  4. Stabilire una connessione con il server c2
  5. Richiedere uno stager al server c2
  6. Codificare lo stager con il modulo encoder
  7. Trasportare lo stager con il modulo transport
  8. Attendere una risposta con i metadati dal client ricevuta tramite il transport
  9. Decodificare i metadati con il modulo encoder
  10. Inoltrare i metadati al server c2.
  11. Ricevere un nuovo task dal server c2.
  12. Codificare il nuovo task
  13. Inoltrare il nuovo task al client tramite il transport
  14. Ricevere una risposta dal client tramite il transport
  15. Decodificare la risposta tramite il modulo encoder
  16. Inoltrare la risposta al server c2.
  17. Ripetere i passaggi 11-16

La scelta di quali moduli encoder e transport il server importi è determinata dai valori presenti in config.py.

Non viene eseguito alcun import di moduli transport o encoder non utilizzati.

Funzionalità condivise tra client e moduli

Le tabelle seguenti descrivono le funzioni condivise tra i moduli encoding e transport e il client. Le funzioni condivise sono essenzialmente lo stesso identico codice.

NOTA MOLTO IMPORTANTE: I dati inviati alle funzioni sendData e recvData del client devono essere dati grezzi, mentre i dati inviati alle funzioni sendData e retrieveData del modulo di trasporto devono essere già codificati o decodificati come necessario.

Modulo di trasporto

Funzione di trasportoFunzione ClientDescrizione

Modulo encoder

Funzione encoderFunzione ClientDescrizione
encodeencodeDefinisce le modifiche apportate ai dati grezzi per prepararli al trasporto
decodedecodeDefinisce le modifiche apportate ai dati grezzi ricevuti dal trasporto per essere inoltrati alla loro destinazione

Come usare questo

Per prima cosa, determina quale modulo di trasporto e di codifica desideri utilizzare. Per l'esempio seguente useremo transport_gmail e encoder_b64url.

Successivamente, modifica server/config.py in base alle tue esigenze, assicurandoti che ENCODER_MODULE e TRANSPORT_MODULE siano configurati correttamente e puntino ai moduli desiderati:

Esempio di 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

Successivamente, modifica la sezione di configurazione per i moduli transport e encoder selezionati.

Assicurati che la sezione di configurazione di client/mechanism/$mechanism_client.py corrisponda a tutte le configurazioni che hai definito finora.

Sulla macchina che esegue il server, esegui:

python server.py

Per un output più verbose, puoi eseguire:

python server.py -v

Per un output più verbose e ulteriori informazioni utili per il debug, puoi eseguire:

python server.py -d

Successivamente, esegui il client sull'endpoint di destinazione.

Se tutto ha funzionato, un nuovo beacon verrà registrato nella console di Cobalt Strike con cui potrai interagire.

FAQ

Perché hai scritto questo?: Non c'erano molte implementazioni rilasciate della specifica e, tra quelle rilasciate, o non sono in un linguaggio che conosco oppure non hanno la modularità e l'astrazione che cercavo.

Perché Python 2?: Sono pigro ed è facile implementare nuovi canali di trasporto e codifica.

Il tuo codice fa schifo: Questa non è una domanda.

Posso inviare nuovi moduli di trasporto e/o codifica?: Sì, per favore! Invia una pull request e sarò felice di esaminarla.

Roadmap

  • Astrazione e modularità simili verranno implementate anche nel componente client, per supportare diversi metodi di iniezione di processo per il payload del beacon e altre funzionalità in programma.

  • Attualmente manca la funzionalità del builder, che dovrebbe costruire dinamicamente le distribuzioni client e server, ma è nella roadmap.

Scarica lo strumento
prepTransport
prepTransport
Esegue tutte le preconfigurazioni necessarie per utilizzare il meccanismo di trasporto
sendDatasendDataDefinisce come i dati vengono inviati tramite il meccanismo di trasporto
retrieveDatarecvDataDefinisce come i dati vengono ricevuti tramite il meccanismo di trasporto