<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/feeds/atom-style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://liushenwuzhu-alpaca.github.io/</id>
    <title>Liushenwuzhu-Alpaca 的 Blog</title>
    <updated>2026-09-07T06:42:55.197Z</updated>
    <generator>Astro-Theme-Retypeset with Feed for Node.js</generator>
    <author>
        <name>Liushenwuzhu-Alpaca</name>
        <uri>https://liushenwuzhu-alpaca.github.io/</uri>
    </author>
    <link rel="alternate" href="https://liushenwuzhu-alpaca.github.io/"/>
    <link rel="self" href="https://liushenwuzhu-alpaca.github.io/atom.xml"/>
    <subtitle>Liushenwuzhu-Alpaca 的个人博客，记录计算机专业学习、项目实践与日常思考。</subtitle>
    <rights>Copyright © 2026 Liushenwuzhu-Alpaca</rights>
    <entry>
        <title type="html"><![CDATA[从 Kali 沙箱、OMP 和多代理编排到一套自用渗透工作台]]></title>
        <id>https://liushenwuzhu-alpaca.github.io/posts/ai-pentest-box/</id>
        <link href="https://liushenwuzhu-alpaca.github.io/posts/ai-pentest-box/"/>
        <updated>2026-08-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[暑期实习时我搭建了这一个自用渗透工作台，缝合了挺多的东西，但十分有效。一开始我寻求开源社区的“渗透Agent”现成方案，但却不尽如我意。我尝...]]></summary>
        <content type="html"><![CDATA[<h2>1. 背景</h2>
<p>暑期实习时我搭建了这一个自用渗透工作台，缝合了挺多的东西，但十分有效。</p>
<p>一开始我寻求开源社区的“渗透Agent”现成方案，但却不尽如我意。我尝试了<strong>Strix</strong>，它的架构不错，但是Python写的，运行起来实在太卡了，而且缺少很多Agent应有的功能（比方说不能主动压缩导致非常烧Token，打断也比较麻烦），我喜欢它的思路，但它的架构让微调实在太麻烦了。</p>
<p>于是我搭了 <a href="https://github.com/Liushenwuzhu-Alpaca/pentest-box">pentest-box</a>：以 Kali 攻击工具链为执行层，以 OMP 为驾驶舱，再叠一层多专家子代理与黑板协调，并使用开源社区搜罗的各种渗透技能。</p>
<hr />
<h2>2. 总体架构</h2>
<pre><code>flowchart TB
  subgraph Host["宿主"]
    Chrome["有头 Chrome + CDP"]
    Proxy["系统代理"]
    OMPAgent["~/.omp/agent&lt;br/&gt;LLM 配置与登录态"]
  end

  subgraph Box["pentest-box 容器"]
    OMP["OMP 驾驶舱"]
    CSO["cso 主会话&lt;br/&gt;定界 / 派工 / 评审"]
    Experts["cae / cie / cpe / cre / cce"]
    Skills[".omp/skills/"]
    BB["blackboard.json"]
  end

  subgraph Out["产出"]
    Eng["engagements/目标/"]
    Scans["scans/"]
    Reports["reports/"]
  end

  Chrome --&gt; OMP
  Proxy --&gt; Box
  OMPAgent --&gt; OMP
  OMP --&gt; CSO
  CSO --&gt; Experts
  Experts --&gt; Skills
  Experts --&gt; BB
  Experts --&gt; Eng
  Eng --&gt; Scans
  Eng --&gt; Reports
</code></pre>
<p>三层分工：</p>
<table>
<thead>
<tr>
<th>层</th>
<th>职责</th>
<th>形态</th>
</tr>
</thead>
<tbody>
<tr>
<td>执行层</td>
<td>跑 nmap / httpx / sqlmap / nuclei 等</td>
<td>Kali 系容器 + 工具链</td>
</tr>
<tr>
<td>驾驶舱</td>
<td>会话、子代理、技能加载、浏览器工具</td>
<td>OMP</td>
</tr>
<tr>
<td>编排层</td>
<td>角色分域、黑板、评审门、覆盖治理</td>
<td><code>AGENTS.md</code> + agents + skills + 黑板 CLI</td>
</tr>
</tbody>
</table>
<p>渗透产出统一进 <code>engagements/&lt;目标&gt;/</code>：<code>scans/</code> 放大体积原始输出，<code>reports/</code> 放可交付报告，黑板状态与 engagement 同目录。</p>
<hr />
<h2>3. 容器基座：把「能跑」做成「能长期用」</h2>
<p>镜像以攻击工具链为基座，工作目录挂载到 <code>/work</code>。真正决定能不能天天用的，是几条工程决策。</p>
<h3>3.1 非 root 运行</h3>
<p>容器默认用户是 <code>pentester</code>（uid 1000，与常见宿主用户对齐），sudo 免密。写入 <code>/work</code> 的文件在主机上属于当前用户，如果默认root用户则跑完会在主机上出现一地必须用root权限才能操作的垃圾。</p>
<p>需要原始套接字的操作（如 <code>nmap -sS</code>、masscan、抓包）显式加 <code>sudo</code>，边界清晰。</p>
<h3>3.2 <code>run-box.sh</code>：代理透传</h3>
<p>宿主若设了 <code>http_proxy</code> / <code>https_proxy</code> / <code>all_proxy</code>，脚本会：</p>
<ol>
<li>把 URL 里的 <code>127.0.0.1</code> / <code>localhost</code> 改写成 <code>host.docker.internal</code>；</li>
<li>以 <code>-e</code> 注入容器；</li>
<li>给 <code>no_proxy</code> 自动补上 <code>host.docker.internal</code> 等。</li>
</ol>
<h3>3.3 <code>browser-host.sh</code>：宿主有头浏览器附着</h3>
<p>容器内 OMP 的 browser 工具通过项目级配置附着宿主 Chrome 的 CDP 端口。登录态、JS 渲染、验证码人工点一下，都还能用真实浏览器。</p>
<h3>3.4 单实例约束</h3>
<p><code>~/.omp/agent</code> 挂进容器是为了复用主机的 LLM 配置与登录态。<strong>尽量不要同时跑两个挂载同一 agent 目录的 omp 实例</strong>（sqlite 会话库并发写风险）。容器里跑 omp 时，主机上的最好先退出。</p>
<hr />
<h2>4. 技能库：可触发的方法论，不是提示词堆</h2>
<p>技能目录里有上百个专项。来源大致两类：</p>
<ol>
<li><strong>公开精选与迁移</strong>：网络安全公开技能集、以及从 Strix 体系迁移过来的 <code>strix-*</code> 技能（SQLi、XSS、SSRF、IDOR、工具语法等）。</li>
<li><strong>按实战补的增强技能</strong>：国内 OA / 国际 CMS 定向验证、备份与敏感路径发现、证据包固化、独立结果核验、业务逻辑与越权知识库、进阶 Web 绕过笔记、收尾与 preflight 等。</li>
</ol>
<p>设计原则只有几条，但很硬：</p>
<ul>
<li><strong>先指纹再定向</strong>，禁止无版本盲打；</li>
<li>技能带 <code>SKILL.md</code> + <code>references/</code>，能对照、能回源；</li>
<li>工具缺失<strong>先上报、再安装</strong>，不静默改环境；</li>
<li>试错型向量（SQLi / XSS / SSRF 等）优先脚本批量喷洒，再挑异常做人工验证。</li>
</ul>
<p>技能多不等于能用。中间做过一轮<strong>质量治理</strong>：把不可执行的文稿重写成通顺、可落地的方法论文档，清掉死引用和卫生问题。对外交付的是「能照着做」的技能，不是「看起来很长」的 markdown。</p>
<hr />
<h2>5. 多代理编排：cso 不亲自打洞</h2>
<p>来自<a href="https://github.com/guaidao2/XuanMu-RedTeam-Agent">玄幕</a>的角色迁移。</p>
<p>主会话扮演 <strong>cso（编排者）</strong>：读范围、拆目标、按域派专家、过评审门、维护覆盖、汇总报告。需要触碰目标就派子代理；主会话自己不跑扫描器、不发注入 payload。</p>
<table>
<thead>
<tr>
<th>代号</th>
<th>职责</th>
<th>典型触发</th>
</tr>
</thead>
<tbody>
<tr>
<td>cae</td>
<td>代码审计、SAST、认证/注入溯源</td>
<td>有源码或要追根</td>
</tr>
<tr>
<td>cie</td>
<td>OSINT、资产与指纹、关系扩展</td>
<td>新目标建攻击面</td>
</tr>
<tr>
<td>cpe</td>
<td>活体测试、PoC 证实/证伪</td>
<td>有可访问服务</td>
</tr>
<tr>
<td>cre</td>
<td>二进制 / 固件 / 协议逆向</td>
<td>样本与伪代码</td>
</tr>
<tr>
<td>cce</td>
<td>密码、协议、密钥与签名</td>
<td>加密 blob、JWT、PKI</td>
</tr>
</tbody>
</table>
<p>纪律：</p>
<ul>
<li><strong>一代理一任务</strong>，子代理不要多任务一起做导致注意力涣散；</li>
<li><strong>任务书自包含</strong>，子代理看不到主会话，范围、非目标、已有线索、产出路径都要写进任务书；</li>
<li><strong>动作风险分级 T0–T3</strong>：被动情报可以直接派；利用尝试必须有明确意图；后渗透与高影响动作证据标准更严，且要独立验证。</li>
</ul>
<p>漏洞工作流固定走三段链：</p>
<pre><code>发现代理 → 独立验证代理（发现者不得自证）→ 报告代理
</code></pre>
<p>Critical / RCE 一类结论，再过结果核验门。合法结局有三种：<strong>无发现</strong>、<strong>验证失败（误报排除）</strong>、<strong>确认漏洞</strong>——前两种同样要记，不硬报。</p>
<hr />
<h2>6. 黑板：多代理并行时的唯一协调面</h2>
<p>并行时不能靠「大家都记得聊天里说过什么」。黑板是跨代理的共享推理图，节点三类：</p>
<ul>
<li><strong>Intent</strong>：打算探什么方向；</li>
<li><strong>Fact</strong>：已经确认的发现（必须挂到促成它的 Intent）；</li>
<li><strong>Hint</strong>：人工指导，创建后不流转。</li>
</ul>
<p>状态机：<code>proposed → in_progress → confirmed | rejected | superseded</code>。死路应该标 rejected。</p>
<p>每个目标一份 <code>engagements/&lt;目标&gt;/blackboard.json</code>，写操作走 CLI（文件锁 + 原子替换），禁止手改 JSON。</p>
<hr />
<h2>7. 覆盖治理</h2>
<p>「扫过了」和「覆盖完了」不是一回事。每个范围内资产只能处于一种状态，例如：</p>
<p><code>covered / active / queued / blocked / deferred / thin / out of scope</code></p>
<p>其中 <strong>thin</strong> 很关键：只抽了常见口、深扫和 HTTP 认领还没做，<strong>不得当 covered</strong>。禁止用「下线」代替 blocked/thin；只有全端口（或已触发的深扫）加多路径证据一致无 listener，才能结「无 Web 面」。</p>
<p>评审门是 <strong>failure-seeking</strong> 的：每次子代理返回后，对照用户要求逐项标 satisfied / incomplete / blocked……证据薄、仅抽样、未验证的，一律 incomplete。端口覆盖是硬项：范围内每个 IP 有没有扫口证据？常见口全失败有没有触发深扫？每个 open 口有没有 HTTP(S) 认领？任一否就继续派，不收场。</p>
<p>新线索出现时做关联：凭据/token 触发访问复测，端点/对象 id 触发越权复测，版本号触发已知面审查。专家说「blocked until X」，就把 X 存成复测触发器——X 出现就定向跟进，而不是让旧失败沉底。</p>
<hr />
<h2>8. 一条最小工程闭环</h2>
<p>搭完骨架后，一次干净任务大致是：</p>
<ol>
<li>定界：目标、授权、明确非目标；</li>
<li><code>engagements/&lt;目标&gt;/</code> 建工作区，初始化黑板；</li>
<li>cie 建攻击面（资产、端口、指纹），结果写 Fact；</li>
<li>cpe 按优先级验证（IDOR / SQLi / SSRF / XSS …），独立验证代理复现；</li>
<li>确认项固化证据目录（请求/响应 raw、meta、必要时截图）；</li>
<li>wrap-up：自包含报告、覆盖板收口、残留面与风险定性。</li>
</ol>
<hr />
<h2>9. 边界：做什么，不做什么</h2>
<p><strong>做：</strong></p>
<ul>
<li>授权范围内的侦察、验证、留证、收尾；</li>
<li>多工具交叉，扫描器结论必须 PoC 复现；</li>
<li>白盒场景尽量给到代码级修复建议。</li>
</ul>
<p><strong>不做：</strong></p>
<ul>
<li>无授权扫描与范围外扩展；</li>
<li>把模型幻觉或扫描器输出直接当结论；</li>
<li>为了「自动化」牺牲独立验证与覆盖治理。</li>
</ul>
<p>已知限制也如实说：部分工具镜像里没有，按需安装；上游方法论文档更新后要手动同步；容器默认 <code>--rm</code>，装过的工具用完即丢——要长期用就进 Dockerfile 重建。</p>
<hr />
<h2>附录</h2>
<table>
<thead>
<tr>
<th>路径</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>.omp/AGENTS.md</code></td>
<td>编排者操作手册</td>
</tr>
<tr>
<td><code>.omp/agents/</code></td>
<td>五个专家子代理定义</td>
</tr>
<tr>
<td><code>.omp/skills/</code></td>
<td>渗透技能与黑板协议</td>
</tr>
<tr>
<td><code>engagements/&lt;目标&gt;/</code></td>
<td>单次任务工作区</td>
</tr>
<tr>
<td><code>run-box.sh</code> / <code>browser-host.sh</code></td>
<td>容器启动与宿主浏览器管理</td>
</tr>
</tbody>
</table>
<p>仓库：<a href="https://github.com/Liushenwuzhu-Alpaca/pentest-box">github.com/Liushenwuzhu-Alpaca/pentest-box</a></p>
]]></content>
        <author>
            <name>Liushenwuzhu-Alpaca</name>
            <uri>https://liushenwuzhu-alpaca.github.io/</uri>
        </author>
        <published>2026-08-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[这个博客是怎么搭起来的：一次与 AI 协作的实录]]></title>
        <id>https://liushenwuzhu-alpaca.github.io/posts/building-this-blog-with-ai/</id>
        <link href="https://liushenwuzhu-alpaca.github.io/posts/building-this-blog-with-ai/"/>
        <updated>2026-07-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[从一份设计稿到上线的全过程,以及多智能体并行开发里的真实经验——包括翻车的部分。]]></summary>
        <content type="html"><![CDATA[<p>这个博客从构思想法到上线，用了一天。</p>
<h2>起点</h2>
<p>起因是想尝尝最新上线的Kimi-K3模型，看看它的前端能力怎么样。</p>
<p>一开始只是和它说搭一个博客，顺利搭建后发现只是去拉了一个模板，审美风格我并不满意，于是后面我又尝试重构了。</p>
<h2>设计稿与审美风格</h2>
<p>我比较青睐Anthropic式的审美风格，于是先和模型对话、让它尝试解析风格，并做出了一个网页给我呈现。通过网页呈现和细化描述，我和模型最终敲定了一个设计稿。</p>
<p>设计稿定了几条原则：纸面质感、发丝线、衬线、克制。技术栈是 Astro + 一套主题骨架，部署到 GitHub Pages，另备一个 Docker 镜像以后上服务器。</p>
<p>第一天晚上线了基础站点和第一批功能：文章导航、相关文章、友链页、页脚的朱砂印章和「已书写 N 字」统计、Konami 码解锁的隐藏主题。第二天上了清单一到三档的剩余功能：阅读进度条、项目页 GitHub 同步、系列文章、此刻流、相册、生长状态、修订次数、节气日期、暗色问候、随便看看，外加 Giscus 评论和 Umami 统计。</p>
<h2>并行智能体：快，但要看住</h2>
<p>为了速度，功能被拆成互不重叠的文件块，派给多个子代理并行实现。两轮下来，教训比代码多。</p>
<p><strong>代理会跑题，而且理直气壮。</strong> 让它做「GitHub 仓库同步」，它交回来一个没人要求的统计页，还顺手改了导航；让它做「印章与统计」，它去改了别人的文章页。两个跑题的代理，失败模式一模一样：不做被指派的，做自己想到的。对策只有一个——文件所有权写死在任务书里，完工后用 <code>git status</code> 对账，越界一律回退。</p>
<p><strong>代理的报告不可全信。</strong> 有代理弄坏了页面模板（两个 div 没闭合），报告里写「构建通过」；有代理把真实的编译错误称为「历史遗留问题」。所以每一条代理汇报都要对着磁盘验证：diff、构建、浏览器实测，一个不能少。</p>
<p><strong>验证要针对功能，不只是构建。</strong> 「随便看看」按钮在代理环境里一直静默降级到归档页——因为它拿生产域名的 atom.xml 和本地预览比同源，全部丢弃。构建是绿的，功能是坏的。这类 bug 只有真的点一次才能发现。</p>
<h2>数据诚实</h2>
<p>书单、相册、装备这些页，上线时都是空态——「清单整理中，照片还在冲洗」。这是故意的。代理曾经「贴心」地在装备页写了我没说过的东西（KDE Plasma 桌面），被发现后删掉了。个人站点的每一行个人事实都必须是真的，空着比编的好。</p>
<h2>人也干了活</h2>
<p>不是一切都交给 AI。身份改名、印章字样是自己在间隙里改完直接提交的；使用说明书也是自己先写了一版——AI 不知情，又写了一份覆盖上去，发现后恢复了人的版本，只把新信息补进去。网络抖动时推送也是手动完成的。</p>
<p>协作里最舒服的分工大概是：人负责审美判断、事实和最终拍板，AI 负责体力活和全量验证。</p>
<h2>现在的样子</h2>
<p>打开首页能看到纸面和印章；文章页顶部有进度发丝线，日期旁有节气或 🌱；底部有上一篇下一篇、相关文章和评论区；页脚能「随便看看」，暗色模式下多一句问候。输任意页面上 ↑↑↓↓←→←→BA，会解锁第四套配色。</p>
<p>剩下的没做完：Newsletter 需要外部账号，书单和相册等我慢慢填。清单在仓库里，做完一项勾一项。</p>
<h2>方法论小结</h2>
<ul>
<li>拆任务按文件所有权拆，不按「聪明程度」拆</li>
<li>代理汇报一律对账磁盘，构建绿不等于功能对</li>
<li>空态优于编造，回退优于报错</li>
<li>人保留审美和事实的最终决定权</li>
</ul>
]]></content>
        <author>
            <name>Liushenwuzhu-Alpaca</name>
            <uri>https://liushenwuzhu-alpaca.github.io/</uri>
        </author>
        <published>2026-07-18T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[博客开张了]]></title>
        <id>https://liushenwuzhu-alpaca.github.io/posts/first-post/</id>
        <link href="https://liushenwuzhu-alpaca.github.io/posts/first-post/"/>
        <updated>2026-07-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[用 Astro 与 Retypeset 搭建个人博客的第一篇记录。]]></summary>
        <content type="html"><![CDATA[<p>这是这个博客的第一篇文章。</p>
<p>它基于 Astro 和 Retypeset 构建，托管在 GitHub Pages。之后会在这里记录计算机学习笔记、项目实践和一些值得留存的想法。</p>
<h2>写作原则</h2>
<p>尽量写清楚问题、过程和结论。把当下不完全的理解留下来，等未来有新的认识再修订它。</p>
]]></content>
        <author>
            <name>Liushenwuzhu-Alpaca</name>
            <uri>https://liushenwuzhu-alpaca.github.io/</uri>
        </author>
        <published>2026-07-17T00:00:00.000Z</published>
    </entry>
</feed>