Cobalt Strike 4.8 Client Docker 部署指南

为解决java环境不兼容问题,将 Cobalt Strike 4.8 汉化版客户端(Java Swing GUI)完整容器化,通过浏览器远程桌面访问。 Github项目链接

📋 前置要求

  • Docker Desktop: 20.10+(含 Compose v2)
  • 内存: 至少 4GB 可用(容器限制 2GB)
  • CPU: 建议 2 核以上

🏗️ 技术架构

┌─────────────────────────────────────────────┐
│           Docker Container (Ubuntu 20.04)    │
│                                              │
│   entrypoint.sh (PID 1 入口)                  │
│     ├─ [启动前] start_vnc.sh 清理残留          │
│     │          (锁文件/socket/孤儿进程/shm)    │
│     └─ exec supervisord                       │
│          ├─ [vncserver] Xvnc :99              │
│          │   └─ 内联再清一次锁后启动 (:5900)   │
│          ├─ [noVNC]     websockify (:6080)    │
│          │   └─ 浏览器 WebSocket→VNC          │
│          └─ [csclient]  start.sh → CS GUI     │
│                         (DISPLAY=:99)         │
└─────────────────────────────────────────────┘
        ↑ port 6080 / 5900
   浏览器 http://localhost:6080

关键设计点:

  • 单一 X server:Xvnc :99 同时充当显示服务器和 VNC 服务,CS GUI 与 VNC 画面天然同步(不再用 Xvfb,避免双 display 不同步问题)。
  • 每次启动自动清理:entrypoint.sh 在拉起 supervisord 前执行 start_vnc.sh,删除上次异常退出残留的 /tmp/.X99-lock、陈旧 socket、孤儿 Xvnc/java 进程和共享内存段;supervisord 的 [program:vncserver] 又内联清一次锁——彻底杜绝重启后 Server is already active for display 99。
  • 免密访问:-SecurityTypes None,连接无需密码。
  • supervisord 作 PID 1:统一管理所有子进程,任一崩溃可自动重启。
  • 中文字体:预装 fonts-wqy-zenhei + fonts-noto-cjk,汉化界面正常显示。

📁 目录结构

CobaltStrike-Docker-Client/
├── Dockerfile                    # 镜像定义 (Java 11 + TigerVNC + noVNC)
├── docker-compose.yml            # 容器编排 (端口/资源/volume)
├── entrypoint.sh                 # 容器入口: 清理 → supervisord
├── start_vnc.sh                  # 启动前自动清理残留锁/socket/进程
├── supervisord.conf              # 进程管理配置 (Xvnc/noVNC/CS)
├── start.sh                      # CS 客户端启动脚本
├── .dockerignore                 # 构建忽略规则
├── README.md                     # 本文件
├── prepare.bat                   # (可选) 从原始目录整理文件
├── deploy.bat                    # Windows 一键 build/up/down/logs
└── cobaltstrike-client/          # ⚠️ volume 挂载源目录
    ├── cobaltstrike-client.jar   # 主客户端包
    ├── cobaltstrike.jar          # 核心库
    ├── uHook.jar                 # Hook 库
    ├── cobaltstrike.auth         # ⚠️ 授权文件(必需!)
    └── plugin/                   # 插件目录 (Erebus/Ladon/TaoWu/XieGongZi...)

🚀 快速开始

项目已包含全部客户端文件,直接构建即可:

cd C:\Users\17856\Desktop\CTF\CobaltStrike-Docker-Client

# 构建镜像(首次约 3-5 分钟,需下载依赖)
docker-compose build --no-cache

# 启动容器
docker-compose up -d

# 查看日志确认各服务就绪
docker-compose logs -f

访问界面

打开浏览器访问 👉 http://localhost:6080 (无需密码)

或用任意 VNC 客户端连接 localhost:5900(无密码)。

dockerps dockerrumtime

🔧 常用命令

docker ps                              # 查看容器状态
docker-compose logs -f                 # 实时日志
docker-compose down                    # 停止并清理
docker-compose restart                 # 重启
docker exec -it cobaltstrike-4.8-client bash   # 进入容器调试
docker-compose up -d --build           # 改文件后重建

⚙️ 自定义配置

修改资源限制(编辑 docker-compose.yml)

mem_limit: 4g        # 最大内存
cpus: 4.0            # CPU 核心数
shm_size: '2g'       # 共享内存

修改 noVNC 端口

ports:
  - "8080:6080"      # 宿主机端口:容器端口

局域网其他机器访问

把端口映射改为 "0.0.0.0:6080:6080",再从其他机器访问 http://<你的IP>:6080。

⚠️ 生产环境务最好加 nginx + WebSocket SSL,并改用带密码的 VNC,切勿裸暴露公网。

📝 注意事项

  1. 合法用途:仅用于获得授权的渗透测试 / CTF / 研究。
  2. 首次启动慢:Java GUI 预热需时间,耐心等 10-20 秒。
  3. 数据持久化:Java 配置经 volume (cs-java-config) 保存。
  4. 更新流程:改客户端文件 → restart;改构建配置 → build --no-cache && up -d。