项目起因

某天,某位同学在群里扔了一个PoC的github仓库,里面有很多PoC的markdown文档,我顺手就收藏了。最近向量数据库构建知识库很方便,于是我就想,为什么不直接使用AnythingLLM这种工具,直接构造知识库呢?AnythingLLM竟然还支持直接从github仓库创建文档。

效果如下: 某某OA漏洞有哪些? 回答:

**PAC名称:** oa-l329158  
**漏洞描述:**  
该漏洞利用Java Encoder库进行文件隐藏和恶意编码的攻击。当用户上传一个特定类型的文件时, attacker 可以生成一个带有恶意代码的文件来触发DoS攻击。

省略 很多内容

这个确实能达到一部分效果,但是大部分的时候,我查找这个文档,是希望直接给我PoC的。于是,干脆自己做一个吧。

系统设计思路

核心功能设计

智能搜索:基于向量相似度的语义搜索,不再局限于关键词匹配 AI辅助PoC生成:输入漏洞描述,AI帮助生成初版PoC代码,有了文档,那么PoC生成是肯定要有的。 知识图谱:建立漏洞、技术、工具之间的关联关系 多平台支持:支持Nuclei、Pocsuite3、Python等多种PoC格式

技术选型

考虑到开发效率和维护成本,我们选择了相对成熟的技术栈: 后端架构:

  • FastAPI:构建REST API,集成AI模型调用。主要是python方便
  • PostgreSQL + pgvector:存储数据并支持向量检索。因为pg存万物。😂
  • Redis:缓存热点数据。

前端界面:

  • Vue3 + Taildwind CSS:构建用户界面
  • ECharts:数据可视化,
  • 前端都是AI生成的。

AI能力:

  • 本地LLM:本地部署的ollama,主要用的模型如下:
    • large-bge: 用来向量化,支持1024维的向量,据说效果不错吧
    • gtp-oss: 用来根据文档生成向量,其实qwen的效果都还不错。

系统架构概览

整体设计

graph TB subgraph "用户界面" UI1[Web界面] UI2[PoC编辑器] UI3[搜索功能] end subgraph "API层" API[FastAPI后端] AUTH[认证模块] NucleiTemplate[yaml模版] end subgraph "AI处理层" LLM[大语言模型] EMBED[向量化模型] SEARCH[向量搜索] end subgraph "数据存储" PG[PostgreSQL+pgvector] REDIS[Redis缓存] end UI1 --> API UI2 --> API UI3 --> API API --> AUTH API --> LLM API --> NucleiTemplate API --> EMBED EMBED --> SEARCH SEARCH --> PG NucleiTemplate --> PG API --> REDIS LLM --> PG

1. 漏洞管理

  • 支持Markdown格式的漏洞文档导入
  • 自动提取漏洞关键信息(CVE编号、CVSS评分等)
  • 支持标签分类和关联关系管理
  • 支持各种python脚本、Lua脚本等
  • 当然nuclei的脚本也支持。

2. 智能搜索

  • 基于向量相似度的语义搜索
  • 支持自然语言查询
  • 相关漏洞推荐
  • 支持关键字搜索

3. AI辅助PoC生成

  • 根据漏洞描述生成初版PoC代码
  • 支持多种格式:Nuclei YAML、Python脚本、Pocsuite3等
  • 代码质量评估和优化建议

1. 向量化语义搜索

不同于传统的关键词搜索,我们使用向量相似度进行语义搜索。比如搜索"SQL注入"时,也能找到相关的"数据库攻击"、“参数化查询绕过"等内容。

2. AI辅助PoC生成

这是系统的核心亮点。用户输入漏洞的Markdown描述后,AI会:

  • 分析漏洞类型和攻击向量
  • 检索相似的历史PoC
  • 生成适合的PoC代码框架
  • 提供代码优化建议

3. 多格式支持

系统支持生成多种格式的PoC:

  • Nuclei YAML:用于批量扫描
  • Python脚本:用于自定义验证
  • Pocsuite3:集成到现有框架
  • Metasploit模块:用于渗透测试

技术实现亮点

1. 向量数据库优化

使用PostgreSQL的pgvector扩展,针对安全领域的文本特点进行了索引优化。相比传统的全文搜索,向量搜索能够理解语义相关性,比如"缓冲区溢出"和"栈溢出"会被识别为相关概念。

2. AI模型集成

集成了多个AI模型来处理不同任务:

  • 文本理解:使用GPT等大语言模型理解漏洞描述
  • 代码生成:基于Code Llama等代码生成模型
  • 向量化:使用Sentence Transformers进行文本嵌入

3. 渐进式PoC生成

AI生成PoC的过程是渐进式的:

  1. 首先生成基本的检测逻辑
  2. 然后添加具体的攻击载荷
  3. 最后优化代码结构和异常处理
  4. 提供代码质量评估和改进建议

4. 实时反馈学习

系统会收集用户对AI生成PoC的反馈,用于:

  • 优化生成质量
  • 调整推荐算法
  • 改进搜索结果排序

未来规划

  1. 增强AI能力
  • 训练专门的安全领域模型
  • 支持更多编程语言和框架
  • 提升代码生成质量
  • 结合一些成熟工具,比如langgraph等相关工具
  1. 扩展功能
  • 集成更多安全工具
  • 添加漏洞趋势分析
  • 支持自动化测试

关于搜索

一开始的时候,打算用向量搜索,但是向量搜索也存在很多问题,并不能解决所有的问题。向量数据库(LanceDB / Chroma / Milvus / Pinecone 等)的核心任务是:

  • 把文本/数据 → 向量化 → 用余弦相似度等算法搜索。
  • 不保证结果的结构化(比如返回的“第几条 PoC”)。

如果你把 PoC 代码直接当作文本分块向量化,如果你想做一些精确搜索就比较难:

  • 搜索时可能会命中代码,但上下文会不完整。
  • 很难保证你搜索 “CVE-2023-xxxx” 时,能带出该漏洞对应的 PoC。

一个好的解决方案是混合检索(Hybrid Search):

  • 全文检索(FTS) → 保证关键词、编号、术语、代码片段等能精确命中
  • 向量检索(Vector Search) → 补充语义相似度搜索,帮助发现相关内容

总结

构建这个智能化攻防知识库是一次很有意义的实践。通过引入AI技术,我们不仅解决了传统知识管理的痛点,还为安全研究工作带来了新的可能性。

虽然系统还在不断完善中,但已经在实际工作中发挥了重要作用。希望这次分享能给有类似需求的朋友一些参考和启发。 如果你对这个项目感兴趣,欢迎交流讨论。我们也计划在适当的时候开源部分代码,与社区一起推动安全技术的发展。


文章首发于安全技术博客,转载请注明出处。