Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
external_c2_framework — API Python para uso com a especificação External C2 do Cobalt Strike | Kitploit
Ferramentas/GitHubGitHub/truneski/external_c2_framework
Frameworks de Testes de PenetraçãoFrameworks de ExploraçãoPós-ExploraçãoComando e ControleRed TeamingDesenvolvimento de Payloads
GitHubtruneski/external_c2_framework

external_c2_framework

API Python para uso com a especificação External C2 do Cobalt Strike

Ver Repositório
6319há 7 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Framework external_c2

Framework Python para uso com a especificação External C2 do Cobalt Strike, conforme descrito na spec.

O principal objetivo do design é ser uma implementação muito modular da especificação external c2 que forneça abstração suficiente para implementar facilmente canais C2 para o Cobalt Strike. Idealmente, tudo que um usuário precisa fazer é criar um módulo transport, um módulo encoder e preencher um arquivo de configuração para implementar um novo canal.

Configuração do Transporte Dropbox

Você precisará fazer várias alterações de configuração antes de começar. Você precisará:

  1. Criar uma conta Dropbox se ainda não tiver uma (https://www.dropbox.com/)
  2. Gerar um Token de Acesso para sua conta Dropbox (https://www.iperiusbackup.net/en/create-dropbox-app-get-authentication-token/)
  3. Em builds/client/dbox/dbox_client.py, altere token para o gerado no passo 2.
  4. Em builds/server/utils/transports/transport_dbox.py faça as mesmas alterações que no passo 3.
  5. Compile sua DLL com: cd builds/client/dbox && ./compile_dll.sh
  6. Inicie seu servidor Cobalt Strike Team e conecte-se com o cliente Cobalt Strike
  7. Carregue o script start_externalc2.cna do seu cliente CS.
  8. Copie este repositório para seu servidor team e execute o servidor com cd builds/server/ && ./dbox_server.py
  9. Distribua seu executável do passo 6 para o host e execute. Você deverá ver uma conexão de volta do servidor team.

Link para vídeo de demonstração: https://www.youtube.com/watch?v=nTRHSh_uCcA

Arquitetura

Este projeto consiste em três partes principais:

  • Builder (ainda não implementado)
  • Client
  • Server

Builder

O Builder constrói dinamicamente implantações do cliente e do servidor com base na configuração especificada. Idealmente, o cliente poderia ser distribuído como um único arquivo compilado, como um dll ou exe.

Client

O Cliente é essencialmente o payload que é executado no endpoint, referido como third-party client dentro da especificação. A lógica do cliente é principalmente estática:

  1. Executar quaisquer preparações necessárias para utilizar o transport
  2. Receber o stager
  3. Injetar o stager e abrir o handle para o beacon
  4. Obter metadados do beacon
  5. Retransmitir os metadados do beacon para o servidor C2 via transport
  6. Monitorar o transport em busca de novas tarefas
  7. Retransmitir novas tarefas para o beacon
  8. Retransmitir respostas do beacon via transport
  9. Repetir os passos 6-8.

As configurações necessárias para os mecanismos de transporte e codificação são copiadas estaticamente para o cliente. A lógica de funções para os mecanismos de transporte e codificação também são copiadas estaticamente de seus respectivos módulos.

A lógica de injeção de processo é determinada pelo Builder.

Server

O Servidor é a aplicação que intermedia a comunicação entre o client e o c2 server, referido como third-party Client Controller dentro da especificação. A lógica do servidor é principalmente estática, mas suporta saída verbosa e de depuração para auxiliar no desenvolvimento:

  1. Analisar a configuração
  2. Importar o módulo de codificação especificado
  3. Importar o módulo de transporte especificado
  4. Estabelecer uma conexão com o servidor C2
  5. Solicitar um stager do servidor C2
  6. Codificar o stager com o módulo encoder
  7. Transportar o stager com o módulo transport
  8. Aguardar uma resposta de metadados do cliente recebida via transport
  9. Decodificar os metadados com o módulo encoder
  10. Retransmitir os metadados para o servidor C2.
  11. Receber uma nova tarefa do servidor C2.
  12. Codificar a nova tarefa
  13. Retransmitir a nova tarefa para o cliente via transport
  14. Receber uma resposta do cliente recebida via transport
  15. Decodificar a resposta via módulo encoder
  16. Retransmitir a resposta para o servidor C2.
  17. Repetir os passos 11-16

A determinação de qual módulo encoder e transport o servidor importa é determinada a partir dos valores armazenados em config.py.

Nenhuma importação de módulos transport ou encoder não utilizados é realizada.

Funcionalidade compartilhada entre Cliente e módulos

As tabelas a seguir descrevem funções compartilhadas entre os módulos encoding e transport, e o cliente. As funções compartilhadas são essencialmente o mesmo código.

UMA NOTA MUITO IMPORTANTE: Os dados enviados para as funções sendData e recvData do cliente devem ser dados brutos, enquanto os dados enviados para as funções sendData e retrieveData do módulo de transporte devem já estar codificados ou decodificados conforme necessário.

Módulo de Transporte

Função de TransporteFunção do ClienteDescrição
prepTransport

Módulo de Codificação

Função do CodificadorFunção do ClienteDescrição
encodeencodeDefine modificações feitas nos dados brutos para prepará-los para o transporte
decodedecodeDefine modificações feitas nos dados brutos recebidos do transporte para serem retransmitidos ao seu destino

Como usar isso

Primeiro, determine qual módulo de transporte e codificação você gostaria de usar. Usaremos transport_gmail e encoder_b64url para o seguinte exemplo.

Em seguida, modifique server/config.py conforme suas necessidades, garantindo que ENCODER_MODULE e TRANSPORT_MODULE estejam configurados corretamente e apontados para os módulos desejados:

Exemplo de 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

Em seguida, modifique a seção de configuração para o módulo transport e encoder selecionados.

Certifique-se de que a seção de configuração do arquivo client/mechanism/$mechanism_client.py corresponde a quaisquer configurações que você definiu até agora.

Na máquina executando o servidor, execute:

python server.py

Para uma saída mais detalhada, você pode executar:

python server.py -v

Para uma saída mais detalhada e saída adicional útil para depuração, você pode executar:

python server.py -d

Em seguida, execute o cliente no endpoint de destino.

Se tudo funcionou, um novo beacon será registrado no console do Cobalt Strike com o qual você pode interagir.

FAQ

Por que você escreveu isso?: Não havia muitas implementações publicadas da especificação, e das que foram publicadas, ou não estão em uma linguagem que eu conheço ou não têm a modularidade e abstração que eu estava procurando.

Por que Python 2?: Sou preguiçoso e é fácil implementar novos canais de transporte e codificação nela.

Seu código é uma porcaria: Isso não é uma pergunta.

Posso enviar novos módulos de transporte e/ou codificador?: Sim, por favor! Envie um pull request e ficarei feliz em revisar.

Roadmap

  • Abstração e modularidade semelhantes serão implementadas no componente cliente também, para suportar diferentes métodos de injeção de processo para o payload do beacon e outros recursos no roadmap.

  • Atualmente, falta a funcionalidade de builder, que está planejada para construir dinamicamente implantações do cliente e servidor, mas está no roadmap.

Baixar ferramenta
prepTransport
Realiza quaisquer pré-configurações necessárias para utilizar o mecanismo de transporte
sendDatasendDataDefine como os dados são enviados através do mecanismo de transporte
retrieveDatarecvDataDefine como os dados são recebidos através do mecanismo de transporte