Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
convoC2 — Microsoft Teams를 통한 C2 인프라. | Kitploit
도구/GitHubGitHub/cxnturi0n/convoc2
Persistence MechanismsIDS/IPS EvasionData ExfiltrationPost-ExploitationPenetration TestingCommand and ControlRed TeamingRemote Access ToolPayload Development
GitHubcxnturi0n/convoc2

convoC2

Microsoft Teams를 통한 C2 인프라.

7591191년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

convoC2

목차

  • 소개
  • 데모
  • 사용법
  • 요구 사항
  • 영감
  • 기여

소개

Red Teamer가 Microsoft Teams를 통해 침해된 호스트에서 시스템 명령을 실행할 수 있게 해주는 명령 및 제어 인프라입니다.
Microsoft Teams 메시지의 숨겨진 span 태그에 데이터를 삽입하고, Adaptive Cards 이미지 URL로 명령 출력을 유출시켜 C2 서버로 아웃바운드 요청을 트리거합니다.
피해자와 공격자 간의 직접적인 통신이 없다는 점, 그리고 피해자가 Microsoft 서버로만 HTTP 요청을 보내고 안티바이러스가 MS Teams 로그 파일을 들여다보지 않는다는 점이 탐지를 더 어렵게 만듭니다.

convoC2-Architecture

데모

다음 영상은 두 대의 침해된 호스트를 제어하기 위해 서버를 사용하는 방법을 보여줍니다. 하나는 Windows 11에서 새 Teams를 실행 중이고, 다른 하나는 Windows 10에서 구버전 Teams를 실행 중입니다. 첫 번째 경우, 공격자는 피해자와 같은 조직에 속해 있지 않습니다.

https://github.com/user-attachments/assets/d9fcccc1-de73-49cd-aaa7-df53303dbc6a

참고: 첫 번째 경우 피해자는 이미 외부 공격자와의 채팅을 수락한 상태이지만, 공격자가 피해자와 처음으로 채팅을 시작하는 실제 시나리오에서는 피해자가 공격자와의 채팅을 확인해야 합니다(다만 이 경고 메시지는 쉽게 우회할 수 있습니다. 여기를 참조하세요). 이는 문제가 되지 않습니다. 어차피 메시지가 로그 파일에 캐시되기 때문에, 피해자가 아직 채팅을 확인하거나 수락하지 않았더라도 명령은 수신되고 실행됩니다.

사용법

서버

wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_server_amd64.tar.gz
tar -xzvf convoC2_server_amd64.tar.gz --one-top-level
root@convoC2-server-VPS:~# ./convoC2_server_amd64 -h
Usage of convoC2 server:
  -t, --msgTimeout  How much to wait for command output (default 30 s)
  -b, --bindIp      Bind IP address (default 0.0.0.0)

에이전트

wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_agent.tar.gz
tar -xzvf convoC2_agent.tar.gz --one-top-level
C:\Windows>convoC2_agent.exe -h
Usage of convoC2 agent:
  -v, --verbose   Verbose logging (default false)
  -s, --server    C2 server URL (i.e. http://10.11.12.13/)
  -t, --timeout   Teams log file polling timeout [s] (default 1)
  -w, --webhook   Teams Webhook POST URL
  -r, --regex     Regex to match command (default "<span[^>]*aria-label=\"([^\"]*)\"[^>]*></span>")

요구 사항

작동시키려면 몇 가지를 설정해야 합니다:

  • Workflow Incoming Webhook으로 Teams 채널 생성: 출력을 담은 적응형 카드가 수신될 장소입니다. 서버를 사용하는 동안 이 채널을 열어둔 브라우저 창을 유지하는 것이 중요합니다. 그렇지 않으면 서버가 에이전트로부터 메시지를 받지 못합니다.

WebhookChannel

  • Id와 인증 토큰 가져오기: Teams는 본문에 피해자와 공격자의 고유 id를 담아 https://teams.microsoft.com/api/chatsvc/emea/v1/threads로 POST 요청을 보내 채팅을 초기화합니다. 응답에서 threadId는 Location 헤더 url의 경로에 반환됩니다. 동일한 요청의 Bearer 토큰은 메시지 전송 엔드포인트인 https://teams.microsoft.com/api/chatsvc/emea/v1/users/ME/conversations/<threadId>/messages에 인증하는 데 사용됩니다. 따라서 이 세 가지만 확보하면 나머지는 서버가 처리합니다.
  • 포트 80에서 인바운드 HTTP 트래픽을 허용하는 공용 호스트가 있는지 확인하세요.
  • 피해자 호스트에서 Teams가 실행 중이어야 하며, 백그라운드에서 실행 중이어도 괜찮습니다.

서버를 시작한 후에는 인증을 위해 이전에 확보한 데이터를 사용하여 새로운 에이전트를 수신하고 제어할 수 있습니다. 사용 예시는 데모를 확인하세요.

Workflow Incoming Webhook으로 Teams 채널 생성

우선 Teams 채널을 생성해야 합니다.

CreateTeams

세 개의 점을 마우스 오른쪽 버튼으로 클릭한 다음 "Workflows"를 클릭합니다.

CreateTeams_1

검색창에 "Webhook"을 입력하고 "Post to a channel when a webhook request is received"를 클릭합니다.

CreateTeams_5

기본 설정으로 계속 진행한 후 마지막으로 url을 복사합니다.

Create_Teams_6

Id와 인증 토큰 가져오기

먼저 피해자를 찾습니다.

GetOrgIds

웹 프록시가 요청을 가로채는 상태에서 피해자 계정을 선택한 후 더미 메시지를 보낼 수 있습니다.

GetOrgIds_1

api/chatsvc/emea/v1/threads 요청에 있는 두 개의 id를 저장한 다음 요청을 DROP합니다. 인증 토큰은 동일한 요청의 Bearer 토큰입니다.

GetOrgIds_2

영감

이 인프라는 Bobbyrsec이 수행한 Teams GIFShell 연구에서 영감을 받았습니다. 처음에는 이 문제를 재현하는 것이 목적이었지만, 해당 취약점은 부분적으로 수정된 것으로 보였습니다. 이 연구는 Base64로 인코딩된 GIF에 명령을 주입하는 방식을 다루었지만, 이러한 GIF는 더 이상 제대로 표시되지 않았습니다. 대신 채팅에 손상된 이미지 아이콘이 나타나 피해자가 의심하기 시작할 가능성이 있었습니다. 여러 방법을 테스트한 끝에, GIF나 이미지가 아닌 메시지에 직접 명령을 삽입할 수 있다는 것을 발견했습니다. 여러 이미지를 보내는 것이 단순한 메시지를 보내는 것보다 의심을 살 가능성이 더 높지 않을까요? 처음에는 <script>, <meta> 또는 사용자 정의 태그에 명령을 삽입하는 것을 고려했지만 모두 필터링되었습니다. 결국 display:none이 적용된 <span> 태그의 aria-label 속성에 명령을 삽입하는 것이 성공했습니다. 피해자는 메시지만 보게 되지만, 숨겨진 명령이 실제로 Teams 로그 파일을 오염시키게 됩니다.

TeamsLogPoisoning

서버 TUI는 훌륭한 Go BubbleTea 프레임워크를 사용하여 개발되었습니다.

기여

버그를 발견하거나 프로젝트를 개선하고 싶다면 언제든지 풀 리퀘스트를 열어 주세요. 기꺼이 검토하고 변경 사항을 병합하겠습니다. 단기 할 일은 다음과 같습니다:

  • 메시지 AES 암호화
  • 에이전트가 죽었는지 감지하기 위한 keepalive
  • 에이전트의 Powershell 버전
도구 다운로드