
Script agressor do Cobalt Strike para gerar, formatar e criptografar shellcode de beacon com suporte para múltiplos métodos de saída, syscalls e transformações de codificação/compressão.
Ryan Stephenson (RCStep)
Adiciona Shellcode - Gerador de Shellcode ao menu superior da barra de menus do Cobalt Strike

CSSG são scripts aggressor, .NET e Python usados para gerar e formatar shellcode de beacon de forma mais fácil
Gera shellcode beacon sem estágio com método de saída exposto, formatação adicional, criptografia, codificação, compressão, saída multilinha, etc
As transformações do shellcode são feitas na ordem decrescente em que aparecem no menu
Requisitos:
A opção de criptografia RC4/AES usa um script Python ou assembly .NET na pasta /assets
A criptografia baseada em Python depende do pacote pycryptodome estar instalado para realizar a criptografia RC4/AES
Instale o pycryptodome com pip de acordo com seu ambiente Python:
python -m pip install pycryptodome
python3 -m pip install pycryptodome
py -3 -m pip install pycryptodome
py -2 -m pip install pycryptodome
Você pode verificar se o pycryptodome está presente após a instalação com pip usando um comando como:
python -m pip list | grep crypto
O gerador usará o comando "python" padrão do seu host cliente para executar o script de criptografia RC4/AES
Seu host cliente precisa ser capaz de executar assemblies nativos do .NET Framework para a opção de backend .exe RC4/AES
Opções do gerador de shellcode:
Listener:
Selecione um listener válido com o botão "...". O shellcode será gerado a partir desta seleção de listener
Delivery:
Sem estágio (Staged não é suportado para o gerador de shellcode)
Método de Saída:
process - encerra todo o processo em que o Beacon está presente quando o beacon é fechado
thread - encerra apenas a thread na qual o Beacon está sendo executado quando o beacon é fechado
Método de Syscalls do Beacon:
none
direct
indirect
Biblioteca HTTP do Beacon:
wininet
winhttp
Caixa de Seleção de Ponteiros Locais:
Pode ser usado se você for executar o shellcode a partir de um Beacon existente
Gera um payload de shellcode Beacon que herda ponteiros de função chave de um Beacon pai de mesma arquitetura
Sessão Existente:
A sessão Beacon pai de onde o shellcode puxará os metadados da sessão
O shellcode deve ser executado dentro desta sessão Beacon
Caixa de Seleção x86:
Marque para gerar shellcode x86; x64 é gerado por padrão
Ou Usar Arquivo de Shellcode:
Use um arquivo de shellcode bruto gerado externamente em vez de gerar shellcode Beacon
Isso permite usar outros arquivos Beacon exportados ou saída de outras ferramentas (Donut, msfvenom, etc)
Formatação:
raw - saída de shellcode binário bruto, sem formatação aplicada
hex - saída de shellcode formatado em hexadecimal
0x90,0x90,0x90 - shellcode formatado em um array de bytes estilo C#
0x90uy;0x90uy;0x90uy - shellcode formatado em um array de bytes estilo F#
\x90\x90\x90 - shellcode formatado em um array de bytes estilo C\C++
UUID - shellcode transformado em strings UUID com um script Python (preenchido com \x90s para chunks de 16 bytes)
b64 - opção para codificar o shellcode em base64 no início do processo de geração (antes de qualquer criptografia)
Caixa de Seleção de Criptografia XOR do Shellcode:
Marque para criptografar o shellcode com XOR (apenas um tipo de criptografia pode ser selecionado por vez)
Chave(s) XOR:
Caractere(s) de chave XOR gerados aleatoriamente e editáveis para uso na criptografia
Vários caracteres resultarão em várias rodadas de criptografia XOR (ex: ABCDE)
Caixa de Seleção de Criptografia RC4 do Shellcode:
Marque para criptografar o shellcode com RC4 (apenas um tipo de criptografia pode ser selecionado por vez)
Usa um script Python ou assembly .NET Framework para realizar a criptografia RC4
Caixa de Seleção de Criptografia AES do Shellcode:
Marque para criptografar o shellcode com AES (apenas um tipo de criptografia pode ser selecionado por vez)
Usa um script Python ou assembly .NET Framework para realizar a criptografia de bloco AES AES-CBC
O shellcode é preenchido com valores \0 para atingir os requisitos de tamanho de bloco
Um IV gerado aleatoriamente é anexado ao início dos dados do shellcode criptografado
Caixa de Seleção de Backend RC4/AES:
Marque para usar um assembly .exe .NET para criptografar seu arquivo de shellcode
Desmarcado usa um script Python para criptografar seu arquivo de shellcode
Os tamanhos de chave de criptografia aceitos para AES são 16, 24 e 32
Os tamanhos de chave de criptografia para RC4 são QUALQUER tamanho ao usar .NET, e no mínimo 5 bytes ao usar Python
Ferramentas de Backend RC4/AES:
Um script Python e um assembly .NET compilado estão no diretório assets
A pasta de origem do assembly Encryptor também está lá para compilação própria se você não confiar em mim (eu não confiaria)
Ambas as ferramentas podem criptografar e descriptografar shellcode/arquivos RC4/AES
Uso do encrypt_file.py:
encrypt_file.py [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Uso do Encryptor.exe:
Encryptor.exe [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Chave RC4 ou AES
Chave RC4/AES gerada aleatoriamente e editável para uso na criptografia
Chave AES de 32 bytes é gerada e preferida para força de criptografia AES de 256 bits
Os tamanhos de chave de criptografia AES aceitos são 16, 24 e 32
O comprimento da chave RC4 é no mínimo 1 byte se usando .NET e no mínimo 5 bytes se usando Python
Codificação/Compressão:
none - Nenhuma codificação ou compressão adicional é feita no shellcode
b64 - codifica o shellcode em base64
gzip then b64 - comprime com gzip e depois codifica em base64
gzip - comprime o shellcode com gzip
b64 then gzip - codifica em base64 e depois comprime com gzip
b64 then 7xgzip - codifica em base64 e depois comprime com gzip 7 vezes
Saída Multilinha:
Pode ser usado para formatos de saída que não sejam raw/binário
none - sem formatação multilinha, o shellcode é uma string longa
quoted - O shellcode é dividido em linhas cercadas por aspas
chunks.push_back - O shellcode é dividido em linhas cercadas por chunks.push_back(" e ");
Comprimento da Multilinha:
Número de caracteres do shellcode em cada linha se uma opção de saída multilinha for selecionada
Botão Gerar:
Selecione o diretório para a saída do shellcode
O nome de arquivo padrão será beacon, mas pode ser alterado
Qualquer chave de criptografia usada será exibida em um popup e também escrita no Console de Scripts do Cobalt Strike
O tamanho em bytes do shellcode beacon bruto e do shellcode beacon final formatado será exibido em um popup e também escrito no Console de Scripts
A localização dos arquivos usados para gerar/construir o shellcode está toda definida no arquivo scripts/shellcode_generator.cna
Inspirado pelo trabalho de muitos contribuidores de infosec