
Script aggressor di Cobalt Strike per generare, formattare e crittografare il beacon shellcode con supporto per molteplici metodi di uscita, syscall e trasformazioni di codifica/compressione.
Ryan Stephenson (RCStep)
Aggiunge Shellcode - Generatore di Shellcode alla barra dei menu principale di Cobalt Strike

CSSG è un insieme di script aggressor, .NET e Python utilizzati per generare e formattare più facilmente il beacon shellcode
Genera beacon shellcode stageless con metodo di uscita esposto, formattazione aggiuntiva, crittografia, codifica, compressione, output multilinea, ecc.
Le trasformazioni dello shellcode vengono eseguite nell'ordine discendente in cui sono elencate nel menu
Requisiti: L'opzione di crittografia RC4/AES utilizza uno script Python o un assembly .NET nella cartella /assets La crittografia basata su Python dipende dal pacchetto pycryptodome da installare per eseguire la crittografia RC4/AES
Installa pycryptodome con pip a seconda del tuo ambiente Python:
python -m pip install pycryptodome
python3 -m pip install pycryptodome
py -3 -m pip install pycryptodome
py -2 -m pip install pycryptodome
Puoi verificare che pycryptodome sia presente dopo l'installazione con pip con un comando come:
python -m pip list | grep crypto
Il generatore utilizzerà il comando "python" predefinito del tuo host client per avviare lo script di crittografia RC4/AES
Il tuo host client deve essere in grado di eseguire assembly nativi del framework .NET per l'opzione backend RC4/AES .exe
Le opzioni per il generatore di shellcode sono:
Listener: Seleziona un listener valido con il pulsante "...". Lo shellcode verrà generato da questa selezione del listener
Consegna: Stageless (Staged non supportato per il generatore di shellcode)
Metodo di uscita: process - termina l'intero processo in cui è presente Beacon quando il beacon viene chiuso thread - termina solo il thread in cui è in esecuzione Beacon quando il beacon viene chiuso
Metodo Syscalls di Beacon: nessuno diretto indiretto
Libreria HTTP di Beacon: wininet winhttp
Casella di controllo Puntatori Locali: Puoi usare se intendi eseguire lo shellcode da un Beacon esistente Genera un payload shellcode di Beacon che eredita puntatori a funzioni chiave da un Beacon padre con la stessa architettura
Sessione esistente: La sessione Beacon padre da cui lo shellcode recupererà i metadati della sessione Lo shellcode dovrebbe essere eseguito all'interno di questa sessione Beacon
Casella di controllo x86: Seleziona per generare shellcode x86, x64 viene generato per impostazione predefinita
Oppure usa file shellcode: Usa un file shellcode grezzo generato esternamente invece di generare Beacon shellcode Ciò ti consente di utilizzare altri file Beacon esportati o output di altri strumenti (Donut, msfvenom, ecc.)
Formattazione: raw - output shellcode binario grezzo, nessuna formattazione applicata hex - output shellcode formattato in esadecimale 0x90,0x90,0x90 - shellcode formattato in un array di byte stile C# 0x90uy;0x90uy;0x90uy - shellcode formattato in un array di byte stile F# \x90\x90\x90 - shellcode formattato in un array di byte stile C\C++ UUID - shellcode trasformato in stringhe UUID con uno script Python (riempito con \x90 per blocchi di 16 byte) b64 - opzione per codificare in base64 lo shellcode all'inizio del processo di generazione (prima di qualsiasi crittografia)
Casella di controllo Crittografia XOR dello shellcode: Seleziona per crittografare XOR lo shellcode (può essere selezionato un solo tipo di crittografia alla volta)
Chiave/i XOR: Carattere/i della chiave XOR generata casualmente e modificabile da utilizzare per la crittografia Più caratteri comporteranno più round di crittografia XOR (es. ABCDE)
Casella di controllo Crittografia RC4 dello shellcode: Seleziona per crittografare RC4 lo shellcode (può essere selezionato un solo tipo di crittografia alla volta) Utilizza uno script Python o un assembly .NET Framework per eseguire la crittografia RC4
Casella di controllo Crittografia AES dello shellcode: Seleziona per crittografare AES lo shellcode (può essere selezionato un solo tipo di crittografia alla volta) Utilizza uno script Python o un assembly .NET Framework per eseguire la crittografia AES Block Cipher AES-CBC Lo shellcode viene riempito con \0 valori per raggiungere i requisiti di dimensione del blocco Un IV generato casualmente viene anteposto ai dati shellcode crittografati
Casella di controllo Backend RC4/AES: Seleziona per utilizzare un assembly .exe .NET per crittografare il file shellcode Non selezionato utilizza uno script Python per crittografare il file shellcode Le lunghezze in byte della chiave di crittografia accettate per AES sono 16, 24 e 32 Le lunghezze in byte della chiave di crittografia per RC4 sono QUALSIASI quando si utilizza .NET, e un minimo di 5 byte quando si utilizza Python
Strumenti Backend RC4/AES: Uno script Python e un assembly .NET compilato si trovano nella directory assets La cartella sorgente per l'assembly Encryptor è presente anche per l'auto-compilazione se non ti fidi di me (io non lo farei) Entrambi questi strumenti possono crittografare e decrittografare shellcode/file RC4/AES
Utilizzo di encrypt_file.py:
encrypt_file.py [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Utilizzo di Encryptor.exe:
Encryptor.exe [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Chiave RC4 o AES Chiave RC4/AES generata casualmente e modificabile da utilizzare per la crittografia Viene generata una chiave AES di 32 byte, preferita per la forza di crittografia AES a 256 bit Le lunghezze in byte della chiave di crittografia AES accettate sono 16, 24 e 32 La lunghezza della chiave RC4 è minima di 1 byte se si utilizza .NET e minima di 5 byte se si utilizza Python
Codifica/Compressione: none - Nessuna codifica o compressione aggiuntiva viene applicata allo shellcode b64 - codifica base64 dello shellcode gzip poi b64 - comprimi con gzip poi base64 dello shellcode gzip - compressione gzip dello shellcode b64 poi gzip - base64 poi compressione gzip dello shellcode b64 poi 7xgzip - base64 poi compressione gzip dello shellcode 7 volte
Output multilinea: Può essere utilizzato per formati di output non grezzi/binari none - nessuna formattazione multilinea, lo shellcode è una lunga stringa quoted - Lo shellcode è suddiviso in righe racchiuse tra virgolette chunks.push_back - Lo shellcode è suddiviso in righe racchiuse da chunks.push_back(" e ");
Lunghezza multilinea: Numero di caratteri dello shellcode in ogni riga se viene selezionata un'opzione di output multilinea
Pulsante Genera: Seleziona la directory per l'output dello shellcode Il nome file predefinito sarà beacon ma può essere modificato Qualsiasi chiave di crittografia utilizzata verrà visualizzata in un popup e anche scritta nella Console Script di Cobalt Strike La dimensione in byte del beacon shellcode grezzo e del beacon shellcode formattato finale verrà visualizzata in un popup e anche scritta nella Console Script La posizione dei file utilizzati per generare/costruire lo shellcode è tutta impostata nel file scripts/shellcode_generator.cna
Ispirato dal lavoro di molti contributori della sicurezza informatica