Skip to main content

go-pentest-workbench-ops

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

Quellinformationen

Repository
Kur1sulab/blackbox
Letzte Quellaktivität
23. September 2026 um 16:40
Erkannte Sprache von SKILL.md
Chinesisch
Sterne
3
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
4 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
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 查库
Auf GitHub ansehen