Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
external_c2_framework — Cobalt Strike의 External C2 사양 사용을 위한 Python API | Kitploit
도구/GitHubGitHub/truneski/external_c2_framework
Penetration Testing FrameworksExploit FrameworksPost-ExploitationCommand and ControlRed TeamingPayload Development
GitHubtruneski/external_c2_framework

external_c2_framework

Cobalt Strike의 External C2 사양 사용을 위한 Python API

저장소 보기
63197년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

external_c2 framework

Cobalt Strike의 External C2 사양(사양 참조)과 함께 사용하기 위한 Python 프레임워크입니다.

주요 설계 목표는 Cobalt Strike용 C2 채널을 쉽게 구현할 수 있을 만큼 충분한 추상화를 제공하는, 외부 C2 사양의 매우 모듈식 구현체를 만드는 것입니다. 이상적으로, 사용자는 새 채널을 구현하기 위해 transport 모듈, encoder 모듈을 만들고 구성 파일을 채우기만 하면 됩니다.

Dropbox Transport 구성

실행하기 전에 몇 가지 구성 변경을 수행해야 합니다. 다음을 수행해야 합니다:

  1. 아직 Dropbox 계정이 없다면 만듭니다 (https://www.dropbox.com/)
  2. Dropbox 계정에 대한 액세스 토큰을 생성합니다 (https://www.iperiusbackup.net/en/create-dropbox-app-get-authentication-token/)
  3. builds/client/dbox/dbox_client.py에서 token을 2단계에서 생성된 토큰으로 변경합니다.
  4. builds/server/utils/transports/transport_dbox.py에서 3단계와 동일하게 변경합니다.
  5. DLL을 컴파일합니다: cd builds/client/dbox && ./compile_dll.sh
  6. Cobalt Strike 팀 서버를 시작하고 Cobalt Strike 클라이언트로 연결합니다.
  7. CS 클라이언트에서 start_externalc2.cna 스크립트를 로드합니다.
  8. 이 저장소를 팀 서버에 복사한 다음 cd builds/server/ && ./dbox_server.py로 서버를 실행합니다.
  9. 6단계의 실행 파일을 대상 호스트에 배포하고 실행합니다. 팀 서버에서 연결이 돌아오는 것을 확인할 수 있습니다.

비디오 데모 링크: https://www.youtube.com/watch?v=nTRHSh_uCcA

아키텍처

이 프로젝트는 세 가지 주요 부분으로 구성됩니다:

  • 빌더(Builder) (아직 구현되지 않음)
  • 클라이언트(Client)
  • 서버(Server)

빌더

빌더는 지정된 구성에 따라 클라이언트 및 서버 배포판을 동적으로 빌드합니다. 이상적으로, 클라이언트는 dll이나 exe와 같은 단일 컴파일 파일로 배포될 수 있어야 합니다.

클라이언트

클라이언트는 본질적으로 엔드포인트에서 실행되는 페이로드로, 사양 내에서 third-party client라고 합니다. 클라이언트의 로직은 주로 정적입니다:

  1. transport를 활용하기 위해 필요한 준비 작업을 실행합니다.
  2. 스테이저(stager)를 수신합니다.
  3. 스테이저를 주입하고 비콘(beacon)에 대한 핸들을 엽니다.
  4. 비콘에서 메타데이터를 얻습니다.
  5. transport를 통해 비콘의 메타데이터를 C2 서버로 전달합니다.
  6. transport에서 새 작업을 확인합니다.
  7. 새 작업을 비콘에 전달합니다.
  8. transport를 통해 비콘의 응답을 전달합니다.
  9. 6~8단계를 반복합니다.

전송 및 인코딩 메커니즘에 필요한 구성은 클라이언트에 정적으로 복사됩니다. 전송 및 인코딩 메커니즘의 함수 로직도 각각의 모듈에서 정적으로 복사됩니다.

프로세스 인젝션 로직은 빌더에 의해 결정됩니다.

서버

서버는 client와 c2 server 간의 통신을 중개하는 애플리케이션으로, 사양 내에서 third-party Client Controller라고 합니다. 서버 로직은 주로 정적이지만, 개발을 돕기 위해 상세 및 디버그 출력을 지원합니다:

  1. 구성을 파싱합니다.
  2. 지정된 인코딩 모듈을 가져옵니다.
  3. 지정된 전송 모듈을 가져옵니다.
  4. c2 서버에 대한 연결을 설정합니다.
  5. c2 서버에서 스테이저를 요청합니다.
  6. encoder 모듈로 스테이저를 인코딩합니다.
  7. transport 모듈로 스테이저를 전송합니다.
  8. transport를 통해 수신된 클라이언트의 메타데이터 응답을 기다립니다.
  9. encoder 모듈로 메타데이터를 디코딩합니다.
  10. 메타데이터를 c2 서버에 전달합니다.
  11. c2 서버에서 새 작업을 수신합니다.
  12. 새 작업을 인코딩합니다.
  13. transport를 통해 새 작업을 클라이언트에 전달합니다.
  14. transport를 통해 수신된 클라이언트의 응답을 기다립니다.
  15. encoder 모듈로 응답을 디코딩합니다.
  16. 응답을 c2 서버에 전달합니다.
  17. 11~16단계를 반복합니다.

서버가 가져올 encoder 및 transport 모듈의 결정은 config.py에 저장된 값에서 결정됩니다.

사용되지 않는 transport 또는 encoder 모듈은 가져오지 않습니다.

클라이언트 및 모듈 공유 기능

다음 표는 encoding 및 transport 모듈과 클라이언트 간의 공유 함수를 설명합니다. 공유 함수는 본질적으로 완전히 동일한 코드입니다.

매우 중요한 참고 사항: 클라이언트의 sendData 및 recvData 함수로 전송되는 데이터는 원시 데이터(raw data) 여야 하며, transport 모듈의 sendData 및 retrieveData 함수로 전송되는 데이터는 필요에 따라 이미 인코딩 또는 디코딩된 상태여야 합니다.

Transport 모듈

Transport 함수Client 함수설명
prepTransportprepTransport전송 메커니즘을 활용하는 데 필요한 사전 구성을 수행합니다.

Encoder 모듈

Encoder 함수Client 함수설명
encodeencode전송을 준비하기 위해 원시 데이터에 적용되는 수정 사항을 정의합니다.
decodedecode전송에서 수신된 원시 데이터에 적용되어 목적지로 전달되는 수정 사항을 정의합니다.

사용 방법

먼저 사용할 transport 및 encoding 모듈을 결정합니다. 다음 예제에서는 transport_gmail과 encoder_b64url을 사용하겠습니다.

그런 다음 필요에 맞게 server/config.py를 수정하고, ENCODER_MODULE 및 TRANSPORT_MODULE이 올바르게 구성되어 원하는 모듈을 가리키도록 합니다:

샘플 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

다음으로, 선택한 transport 및 encoder 모듈의 구성 섹션을 수정합니다.

client/mechanism/$mechanism_client.py의 구성 섹션이 지금까지 정의한 구성과 일치하는지 확인합니다.

서버를 실행하는 머신에서 다음을 실행합니다:

python server.py

더 자세한 출력이 필요하면 다음을 실행할 수 있습니다:

python server.py -v

디버깅에 유용한 추가 출력과 더 자세한 출력이 필요하면 다음을 실행할 수 있습니다:

python server.py -d

다음으로, 대상 엔드포인트에서 클라이언트를 실행합니다.

모든 것이 정상적으로 작동했다면, Cobalt Strike 콘솔에 새 비콘이 등록되어 상호 작용할 수 있습니다.

FAQ

왜 이것을 작성했나요?: 이 사양의 구현체가 많이 공개되지 않았고, 공개된 것들 중에서도 제가 익숙한 언어로 작성되지 않았거나 제가 찾던 모듈성과 추상화를 갖추지 못한 경우가 많았습니다.

왜 Python 2인가요?: 게으르고 새 transport 및 encoding 채널을 구현하기 쉽기 때문입니다.

코드가 형편없습니다: 그건 질문이 아니네요.

새 transport 및/또는 encoder 모듈을 제출할 수 있나요?: 네, 부탁드립니다! 풀 리퀘스트를 제출해 주시면 기꺼이 검토하겠습니다.

로드맵

  • 클라이언트 구성 요소에도 유사한 추상화와 모듈성을 구현하여 비콘 페이로드에 대한 다양한 프로세스 인젝션 방법과 로드맵의 다른 기능을 지원할 예정입니다.

  • 현재 빌더 기능이 빠져 있으며, 이는 클라이언트 및 서버 배포판을 동적으로 빌드하도록 계획되어 있지만 로드맵에 있습니다.

도구 다운로드
sendDatasendData전송 메커니즘을 통해 데이터가 전송되는 방식을 정의합니다.
retrieveDatarecvData전송 메커니즘을 통해 데이터가 수신되는 방식을 정의합니다.