Skip to main content

go-pentest-workbench-ops

构建/运维 Go+Docker Kali+Ollama 多模型渗透工作台。

インストールへ移動

ソース情報

リポジトリ
Kur1sulab/blackbox
ソースの最終更新活動
2026年9月23日 16:40
検出された SKILL.md の言語
中国語
スター
3
フォーク
1

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
4 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
go-pentest-workbench-ops
description
构建/运维 Go+Docker Kali+Ollama 多模型渗透工作台。
# Go 渗透工作台构建与运维 构建基于 **Go 后端(net/http + goroutine)+ Docker Kali 工具容器 + 本地 Ollama 多模型** 的渗透测试 Web 平台。沉淀自 Kur1sulab-soul 项目的完整实战经验(Flask→Go 迁移、性能优化、多模型分工、安全加固)。 ## 架构总览 ``` ┌──────────────────────────────────────┐ │ Go 后端 (单 exe, ~8.4MB) │ │ net/http + sync.Mutex + goroutine │ │ Web/API/任务调度/报告导出 │ └──────────┬──────────────┬────────────┘ │ docker exec │ HTTP :11434 ┌──────────▼──────┐ ┌─────▼───────────┐ │ Kali 工具容器 │ │ Ollama 本地模型 │ │ (--entrypoint │ │ vext/nexus/ │ │ sleep infinity) │ │ antares/kali │ └─────────────────┘ └─────────────────┘ ``` ## 为什么用 Go 而不是 Flask(迁移决策) | 指标 | Python Flask | Go net/http | |------|-------------|-------------| | API 响应 | ~150-300ms | <10ms | | 工具任务创建 | ~300ms | 7ms | | 并发 | GIL 限制 | goroutine 100+ | | 部署 | 依赖 Python 环境 | 单 exe | 项目分层:`cmd/server/main.go`(入口)+ `internal/api/`(路由+handler)+ `internal/exec/`(docker exec 执行层)+ `internal/tools/`(工具定义+命令渲染)。工具数据用 JSON 数组,格式 `{n,cat,d,ic,cmd,params}`。 ## 坑位(按踩坑频率排序) ### 1. ⚠️ Go 前端 HTML 内存缓存 —— 改前端必须重启服务 `loadIndex` 一次性读入内存(`if len(idxHTML)>0 && idxPath==webDir` 直接返回缓存),改 `web/index.html` 后**必须重启 Go 进程**才生效。分辨新旧: ```bash curl -s http://localhost:8080/ | grep -c "新函数名" # 1=已生效 0=旧缓存 ``` 浏览器会进一步缓存 —— 验证用 `?v=N` 参数绕开。 ### 2. 端口占用 / 僵尸进程(Windows) `taskkill //F //IM xxx.exe`(双斜杠)在 git-bash 会报"无效参数" → 用 `taskkill /F /PID <pid>` 或 PowerShell `Stop-Process -Id <pid> -Force`。定位:`netstat -ano | grep ":8080" | grep LISTEN`。 ### 3. Docker Desktop daemon 常挂 工具全部失败时看报错 `dockerDesktopLinuxEngine` pipe 不存在。冷启动: ```bash powershell -Command "Start-Process 'C:\Program Files\Docker\Docker\Docker Desktop.exe'" # 轮询直到 docker ps 通(5s*14 次),然后 docker start hexagent-kali-tools ``` ### 4. Kali 纯工具容器模式 镜像默认 CMD 跑 Flask Web 会占 8080 端口 → 用 `--entrypoint sleep` 起纯工具容器: ```bash docker run -d --name hexagent-kali-tools --entrypoint sleep hexagent-hexagent:latest infinity ``` Go 通过 `docker exec hexagent-kali-tools bash -c "CMD"` 调工具(连接复用、无冷启动)。 ### 5. 工具命令模板注入防护(安全必修) 目标值直接替换进 shell 命令会命令注入(`x;id` 会被执行)。必须单引号包裹 + 转义: ```go safeTarget := "'" + strings.ReplaceAll(target, "'", "'\\''") + "'" ``` 前端 JS 的命令预览要同步做同样转义,否则预览和实际执行不一致。 ### 6. Kali 镜像国内源 Dockerfile 内 apt 用 `--allow-insecure-repositories` + `--allow-unauthenticated`(阿里云源 SSL 证书问题);pip 用 `--break-system-packages`。清华源常被墙不通,USTC/阿里云 HTTP 可用。 ### 7. ⚠️ Kali 容器内装工具集:apt 连环坑(本类任务最高频失败点) 在 `docker exec` 里给 Kali 容器批量装工具,反复遇到几类坑,**按此顺序排查**: **坑 A —— 官方源残留导致 apt 卡死/失败**(最常见根因): 基础镜像自带 `/etc/apt/sources.list.d/kali.sources`(deb822 格式),它**不会被** `echo > /etc/apt/sources.list` 覆盖!apt 会同时用官方源 + 你的阿里云源,而官方源 `http.kali.org` 常 502。修复:**两个都清掉**: ```dockerfile RUN rm -f /etc/apt/sources.list.d/kali.sources /etc/apt/sources.list.d/*.sources; \ echo "deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib" > /etc/apt/sources.list ``` **坑 B —— apt-get 卡死症状**:CPU 0-15% 空转、deb 缓存数不涨、dpkg.log 停在同一行。诊断顺序: ```bash ps aux | grep apt-get | grep -v grep # 进程还活着但 CPU 低 = 卡住 ls /var/cache/apt/archives/*.deb | wc -l # 等 5s 再数,不涨 = 停滞 tail -1 /var/log/dpkg.log # 时间戳不动 = 没在配置 netstat -tn | grep ESTABLISHED # 空 = 没在下载 ``` 卡死原因多是**多次中断后的 dpkg 状态损坏 + 僵尸进程占锁**。清锁重试(`rm -f /var/lib/dpkg/lock*` + `dpkg --configure -a`)可能有效,但反复卡就**别在带病容器里挣扎**——直接 `docker commit` 备份 + 重建镜像(Dockerfile 一次性装全)。 **坑 C —— 大依赖包致命**:`--no-install-recommends` 必须加(wpscan 会拉 chromium ~100MB 大包断连);hashcat 的 OpenCL 依赖 `libpocl2t64` 在阿里云镜像缺失(4 次连接全失败)→ **把这类包从装机清单移出**,别硬装。 **坑 D —— 下载不稳**:装大工具集(20+ 包)时中途断连常见。对策:**拆小批**(4-6 组小 RUN,每个带 `|| apt-get install ...` 重试一次),失败重试代价小。已下载的 deb 缓存在 `/var/cache/apt/archives/` 会复用。 **推荐姿势(一口气装全)**: ```dockerfile RUN apt-get update --allow-insecure-repositories \ && (apt-get install -y --allow-unauthenticated --no-install-recommends nmap masscan subfinder whatweb gobuster nikto amass ffuf dirsearch dnsutils \ || apt-get install -y --allow-unauthenticated --no-install-recommends nmap masscan subfinder whatweb gobuster nikto amass ffuf dirsearch dnsutils) \ && rm -rf /var/lib/apt/lists/* ``` 详见 `references/kali-container-apt-tooling.md`。 ## 扫描流水线并行化(速度提升关键) 自动扫描流水线(recon→scanning→exploitation)**同阶段内工具必须并行**,否则串行跑 nmap→subfinder→whatweb 单工具 90s 累计 100s+。Go 实现模式: - goroutine + WaitGroup 每工具一个,channel 收集结果 - 结果按 `phase.ToolIDs` 顺序排序后输出(保持日志可读) - 每个 goroutine 内独立 `exec.Run(ctx, cmd, 240s)`(含超时) - 实测:recon 4 工具并行 27s(subfinder 26.5s 为瓶颈),vs 串行 100s+,**提速 5 倍** - 注意:callback 闭包捕获循环变量要显式传参(`go func(toolID string, tool tools.Tool){...}(toolID, tool)`) ## Ollama 多模型分工(12GB 显卡实测) ⚠️ **用户硬性规定(2026-08-20 会话纠正过)**:①「每一个地方只用一个 AI」——每角色固定绑一个模型,不搞多模型下拉选择;②「千问 27b 不要放进去」——大模型(>6GB)从审计/建议模型列表过滤;③「实时建议 ≠ kali-terminus」——kali-terminus 只做 Kali 命令生成,实时建议是渗透小模型 nexus-security。做错被纠正过,勿再犯。 4 个 AI 各专职一个模型: | 角色 | 模型 | 说明 | |------|------|------| | 代码审计 | antares-audit (1B) | 白盒审计,165 tok/s,识别 CWE-89/78/79 | | 实时建议 | nexus-security (1.5B) | 实时总结探测结果+可进攻方向 | | Kali 命令 | kali-terminus (270M) | 生成/调用 Kali 工具命令 | | 渗透主模型 | vext (Qwen2.5-7B+LoRA) | 给渗透方案(步骤+命令)供选择 | ⚠️ **小模型首载 50-60s**(12GB 显存 + Ollama 冷加载),必须「预挂载驻留」才快: ```bash curl -s http://localhost:11434/api/generate -d '{"model":"nexus-security:latest","prompt":"ping","stream":false}' >/dev/null # 驻留后实时建议 3.5s;未驻留 60s+ ``` - 主模型 vext 会抢占显存导致小模型卡顿 → 串联调用而非同时全驻留(4 模型合计 ~9.5GB 超 12GB 上限) - 显存查看:`ollama ps` / `nvidia-smi --query-gpu=memory.used --format=csv,noheader` - 大模型(>6GB,如 qwen 27b)应从工具/审计模型列表过滤掉,仅作深度推理按需加载 ## UI 重构偏好(用户硬性要求,2026-08-21 三次纠正) ⚠️ 哥哥对 UI 有明确审美要求,踩过的坑不许再犯: 1. **「不要这种 UI,上网搜索下前端 ui 设计运用下」**——默认浅色 Apple 风(白底+蓝)被否。正解:加载 `popular-web-designs` 技能(54 套真实设计系统),渗透平台选 **VoltAgent**(碳黑+翡翠绿+终端原生)或 Sentry;**先查设计系统再动手**,不要自己拍脑袋配颜色。 2. **「我要浅色风格的」**——深色 VoltAgent 又被否。最终落地:**浅色 VoltAgent 变体** = 保留布局/组件结构(HUD 卡、链路大屏、卡片语义色),只换色板:暖白底 `#f7f6f3` + 白卡 `#ffffff` + 暖灰边框 `#e4e2dd` + 翡翠绿 `#0a9d67` 强调 + 终端/代码块保留深色(专业工具惯例)。**哥哥要浅色 → 布局可深色派,色板必须浅**。 3. **「将功能都融合进一个界面」**——多页面切换被否。正解:**单界面模式** = 所有 `.page` 全显示(`display:block` 而非 `display:none` 切换),导航 `go()` 改 `scrollIntoView({behavior:'smooth'})` 锚点滚动,各区块加 `.sec-title` 统一标题(图标+名称+功能徽章),终端/编辑器高度从 `calc(100vh-xxx)` 改固定值(420px/300px),定时刷新改全区块常驻(`setInterval(()=>{loadDash();loadTools();...},10000)`)。 UI 迭代全史 + 设计令牌细节见 `references/pentest-chain-graph-and-ui.md`。 ## 渗透链路知识图谱(dsh-pentest 六表模型) 渗透平台不应只是工具+发现平铺——参考 [howmp/dsh-pentest](https://github.com/howmp/dsh-pentest) 的**探索链路模型**,把渗透过程结构化记录为知识图谱: - **六表**:`goals`(目标+授权)/ `intents`(攻击意图)/ `facts`(侦察事实,带来源)/ `findings`(漏洞结论,**可复现步骤必填**)/ `assets`(资产树,parent 关系)/ `edges`(关系边) - **关系边词汇**:`spawns`(goal→intent) / `yields`(intent→fact) / `proves`(intent→finding) / `parent`(asset→asset),自动去重 - **确定性 id**:`<kind>-<n>`(goal-1/intent-2...)按类计数,便于前端引用 - **前端四/五列分层流**:目标→意图→事实→发现→资产,卡片彩色左边框(绿目标/灰意图/蓝资产/红发现按严重度) - **报告生成**:目标→意图→漏洞(CVSS+复现步骤+影响资产)→资产树→漏洞汇总表 - 六表模型 + API 实现模式 + 前端布局代码见 `references/pentest-chain-graph-and-ui.md` ## 数据持久化(服务重启不丢状态) Go 单 exe 渗透平台默认全内存态,重启即丢任务/链路/设置。落地模式: - **JSON 快照落盘**:`persistData{Tasks,Settings,Proxies,HTTPHistory,Pentest,Scripts}` → `os.WriteFile(tmp)` + `os.Rename(tmp, file)`(原子写防写一半断电) - **自动保存**:`StartAutoPersist()` 后台 goroutine 每 15s `SavePersist()` - **关键操作即时保存**:任务 create/run 之后 `go s.SavePersist()`(异步不阻塞响应) - **优雅退出**:`signal.Notify(ch, os.Interrupt)` → Ctrl+C 时先保存再 exit - **恢复语义**:running 任务恢复为 idle(进程已不在,状态诚实);pentest 图的 seq 计数要还原(防 id 冲突) ## 工具装了但检测显示「未装」——binMap 命令名映射 武器库可用性检测用 `command -v` 找**二进制名**,但工具的 cmd 模板第一个 token 常与实际二进制不同 → **装了却显示未装**。修复:建立 `binMap`(工具名→实际二进制名): ``` pspy→pspy(cmd 是 ./pspy64) / ligolo→ligolo-mp / xsstrike→xsstrike bloodhound→bloodhound(不是 bloodhound-python 采集器) / frp→frpc linpeas→linpeas.sh(/opt/privesc/ 脚本要 ln -sf 到 /usr/local/bin/ 才在 PATH) ``` impacket 是特例:`GetUserSPNs.py/GetNPUsers.py` 装在 `/usr/share/doc/python3-impacket/examples/` 没进 PATH → `ln -sf ... /usr/bin/impacket-GetUserSPNs`。检测不到先查 binMap 再查 PATH,别急着判「没装」。 ## 运维已编译好的工作台二进制(CyberStrikeAI 类) 不总是从源码构建——很多时候平台已有编译产物(`xxx.exe`),运维 = 「拉起来 + 找管理员凭证 + 验证」。本类目通用模式: - **启动**:从项目目录跑 `./xxx.exe --http`;`--http` 强制明文(config 里可能有 TLS,不带会走 HTTPS 要证书)。主站点默认 8080,MCP 类端口看 config。 - **凭证坑**:管理员密码存 `data/conversations.db`(SQLite)`rbac_users` 表 `password_hash`,**bcrypt 哈希不可反推**。一次性默认密码只在首次 `ADMIN SETUP REQUIRED` 打印进 `server.log`,**改过后默认密码就废**(登录 401 `{"error":"密码错误"}`)。找回两条路:用户知道当前密码,或 `./xxx.exe --reset-admin-password`(交互式隐藏读密码 ≥8 字符,须先停服务避免 DB 锁)。 - **验证链**:① `netstat -ano | grep LISTENING | grep :8080`(别被到远端 8080 的 ESTABLISHED 扫描出站连接骗了);② curl 根路径看 `<title>`;③ POST `/api/auth/login`(GET 会 404)带 JSON 验凭证,200+token=对,401=错。 - **查库**:Windows git-bash 无 sqlite3 CLI → 用 Python sqlite3 模块读 `rbac_users`。 CyberStrikeAI 具体路径/端口/表结构/编译回顾见 `references/cyberstrikeai-ops.md`。 ## 性能验证基准 ```bash time curl -s http://localhost:8080/api/dashboard # 应 <50ms(docker 状态要缓存,勿每次 docker inspect) curl -s -X POST /api/task/create -d '{"name":"t","target":"scanme.nmap.org","tool":"nmap_fast"}' # 7ms ``` Docker 状态用 30s 周期 goroutine 刷新缓存,避免每次 API 调用 `docker inspect`(~300ms 开销)。 ## 上线前审计清单 - [ ] 命令注入:BuildCmd 目标单引号包裹(`'x;id'` 变字面量) - [ ] 全部 API 端点 200(逐个 curl 探活) - [ ] 任务状态流转 idle→running→done(真实工具跑通) - [ ] 前端 XSS:esc() 覆盖所有动态输出 - [ ] panic recover + 日志截断(4000 行)+ 命令超时控制 - [ ] Docker daemon 健康 + Kali 工具容器在跑 - [ ] 报告导出 JSON + Markdown(渗透平台标配) ## 支持文件 - `references/kurisulab-soul-architecture.md` — Kur1sulab-soul 具体实现(项目结构、API 路由清单、AI 分工代码位点) - `references/kali-container-apt-tooling.md` — Kali 容器内批量装工具集的 apt 连环坑排查手册(官方源残留/kali.sources/dpkg 锁卡死/阿里云缺包/拆批重试) - `references/pentest-chain-graph-and-ui.md` — dsh-pentest 六表链路模型 + UI 重构三版迭代全史(浅色 Apple→深色 VoltAgent→浅色 VoltAgent→单界面融合)+ 执行纪律坑(execute_code 落盘/端口占用静默失败) - `references/cyberstrikeai-ops.md` — CyberStrikeAI(Go 单二进制作编平台)运维:`--http` 启动、admin 凭证(SQLite rbac_users bcrypt 不可反推 / 一次性密码改后即废 / --reset-admin-password)、验证链、Python sqlite3 查库
GitHubで見る