Fabric Pattern 深度解析:用 extract_ctf_writeup 把 CTF Writeup 一键提炼成结构化安全摘要
【免费下载链接】FabricFabric is an open-source framework for augmenting humans using AI. It provides a modular system for solving specific problems using a crowdsourced set of AI prompts that can be used anywhere.项目地址: https://gitcode.com/GitHub_Trending/fa/Fabric
在渗透测试、漏洞赏金或 CTF 学习中,优质 Writeup 往往很长,通读一遍才能判断是否值得精读。本指南以 Fabric 仓库中的extract_ctf_writeup提示词模式为线索,逐段拆解其角色设定、四段式输出要求与约束规则,并结合仓库源码讲解该模式被 CLI 加载、与用户输入拼接的底层机制。读完你将掌握该模式的设计意图、可直接套用的调用方式,以及如何按需改造成属于自己的 Writeup 速读 Agent。
一、extract_ctf_writeup 是什么
extract_ctf_writeup是 Fabric 内置的一套 AI 提示词(Pattern),仓库源码位于 data/patterns/extract_ctf_writeup/system.md,同目录还附带了模式说明 data/patterns/extract_ctf_writeup/README.md。
从同目录 README 可以确认它的定位与典型场景:它面向“warstory 式”的网络安全实战叙述(即类似讲故事一般的攻击复盘文本),目的是生成一份可快速阅读的 CTF Writeup 摘要,帮助读者快速决定“这则完整 Writeup 值不值得我花时间读/看”。它抽取三方面内容:被利用的漏洞、文中出现的全部引用来源,以及整个 CTF 的攻击时间线。
从目录结构(data/patterns/下每个目录对应一个模式)与 README 中的作者署名(Author: Martin Riedel)可以看出,Fabric 的提示词是众包维护的独立数据资产——每个模式就是一个目录,目录内的system.md是系统提示词主体。这也正是该模式的全部“程序逻辑”:它不写死任何工具调用,而是通过精心设计的指令让通用大模型完成结构化抽取。
二、角色设定:资深安全老兵(IDENTITY and PURPOSE)
system.md的开头定义了模型要扮演的身份与写作使命:
- 身份:一名经验丰富的网络安全老兵(seasoned cyber security veteran)。
- 专长:擅长把复杂的技术攻击讲清楚,让不熟悉相关背景的人也能看懂。
- 写作风格要求:先给出对攻击过程的简短总结,然后提供简洁、分步的讲解。
- 执行策略:要求模型“退后一步”(Take a step back),按下面的步骤逐步思考,以获得最佳结果。
这段角色设定的设计价值在于:CTF Writeup 读者往往兼具“快速决策”与“入门学习”两种诉求,因此摘要既不能过度晦涩术语堆砌,也不能丢失技术细节。角色卡为后文的“先总结、再逐步骤展开”输出风格埋下了伏笔。
三、STEPS:四段式结构化抽取指令
这是该模式的核心骨架。system.md要求模型从输入文本中抽取并组织为四个固定章节,每一节都有明确的产出规格:
1. SUMMARY —— 50 词以内的管理层摘要
- 对全文内容抽取一份少于 50 词的管理摘要。
- 摘要必须包含两部分信息:发现的漏洞(Vulnerabilities)和可借鉴的经验教训(learnings)。
管理摘要服务于时间紧张的读者:他们只想用 10 秒确认“这个 Writeup 关不关我的事”。
2. VULNERABILITIES —— 漏洞清单
- 列出所有被利用(exploited)的漏洞。
- 若原文提到 CVE 编号,必须保留(assigned CVE if they are mentioned)。
- 标注每个漏洞所属的漏洞类别/漏洞类型(class of vulnerability),如注入、越权、反序列化等。
- 同时遵守总则中“不重复漏洞”的要求。
把漏洞抽成独立清单,方便读者按 CVE 或漏洞类别横向检索,也便于日后归档到自己的漏洞知识库。
3. TIMELINE —— 攻击时间线
- 将演示的攻击过程整理成按时间先后排列的列表。
- 时间线应使用嵌套结构:主节点是攻击阶段,子列表是各阶段的具体步骤。
- 必须尽量保留细节,包括使用的工具、文件路径、URL、版本信息等。
这一步是最有实操价值的:时间线把零散的“叙事流”变成可复现的步骤链,读者或新手可以在自己环境里照着验证每一步。
4. REFERENCES —— 全部引用来源
- 提取演讲者/作者提及的所有工具、网站、文章、书籍、参考资料及其它信息来源。
- 只要是文中提到的引用对象都应收录,不遗漏。
这相当于自动生成一份“延伸阅读清单”,帮助想深入研究同一主题的人按图索骥。
四、OUTPUT INSTRUCTIONS:硬性输出约束
除了抽取内容,该模式还用一条命令式的约束清单约束模型输出格式,避免摘要变成杂乱的口水话:
- 只输出 Markdown。
- 不输出警告或备注,只输出要求的章节(对应四个固定节)。
- 一律使用无序列表(bulleted lists),不要用有序列表(numbered lists)。
- 不要重复已经列出的漏洞或引用。
- 不要让各条目以相同开头词起始(避免机械罗列的“第一…第二…第三…”)。
- 必须完整遵循以上所有指令。
从提示词工程的角度,这几条约束分别解决不同问题:“只输出 Markdown”保证后续可被工具继续消费;“禁警告备注”防止模型画蛇添足;“无序列表”与“不重复/不同开头词”则显著提升摘要的扫读效率。这些要求共同保证了:输出是结构化、去冗余、可直接当文档用的 Markdown。
五、INPUT:输入如何进入模式
system.md以一段INPUT:结束,表明接下来输入的原始文本是待分析的素材。实际使用中,你要把某篇 Writeup 的正文(或转录文本)交给它。
结合仓库源码可以看到这条输入路径的真实工作原理:
- 模式内容存放在
data/patterns/<name>/system.md,读取逻辑在 internal/plugins/db/fsdb/patterns.go 的getFromDB中:拼接patterns 目录/<模式名>/system.md后整体读入内存; - 之后进入 internal/plugins/db/fsdb/patterns.go 的
applyVariables/ensureInput:若模式文本中不存在{{input}}占位符,代码会自动把占位符追加到文本末尾,再将你的输入内容替换进去(从源码结构看,最终发给模型的消息 = 完整的 system.md 提示词 + 你的 Writeup 正文)。
也就是说,哪怕你直接复制本文的提示词在任意 LLM 对话框中粘贴,把原 Writeup 文本接在INPUT:后发送,也能复现该模式的完整行为。
六、在 Fabric 中的真实调用方式
Fabric 把这类提示词管理成了标准 CLI 能力。以下用法均可在当前仓库中验证:
1. 查看内置模式是否可用
fabric --listpatterns对应代码为 internal/cli/flags.go 中定义的-l, --listpatterns。
2. 直接读取该模式的完整提示词内容
fabric --readpattern extract_ctf_writeup对应PrintPattern实现(internal/plugins/db/fsdb/patterns.go),会把data/patterns/extract_ctf_writeup/system.md原样打印到终端。
3. 用管道传入 Writeup 文本并让模式处理
cat writeup.md | fabric -p extract_ctf_writeup其中-p, --pattern用于“从可用模式中选择一个”(internal/cli/flags.go)。如果你想用该模式分析 YouTube 上的一则 CTF 讲解视频,也可配合转录类参数先把视频转成文本,再交给本模式抽取。
此外仓库还支持为特定模式指定专属模型:当你在命令行用了--pattern而未显式指定模型时,程序会检查FABRIC_MODEL_<模式名大写且连字符转下划线>这一环境变量(见 internal/cli/chat.go)。例如可设FABRIC_MODEL_EXTRACT_CTF_WRITEUP=openai|gpt-4o,让该模式固定走你偏好的模型。
七、模式的自定义与扩展
Fabric 的模式系统是可扩展的:用户可以把自己的模式放到自定义目录(CustomPatternsDir)中,同名时自定义版本优先覆盖内置版本,相关逻辑见 internal/plugins/db/fsdb/patterns.go。
以extract_ctf_writeup为例,你可以按需派生自己的版本,例如:
- 增加
## 复现难度评估、## 环境搭建要点等章节,前提是同步修改 OUTPUT INSTRUCTIONS 中的章节清单; - 调整 SUMMARY 的字数上限(如 30 词)或语言(要求输出中文);
- 针对“红队报告”而非“CTF 教学 Writeup”改造角色卡,把“learnings”换成“检测与修复建议”;
- 若在测试中发现模型重复漏洞条目,可进一步强化“Do not repeat vulnerabilities”约束。
无论怎样改写,都应保留该模式的经典骨架——角色卡设定清晰的目标读者、STEPS 给出确定的抽取任务、OUTPUT INSTRUCTIONS 锁死输出形态,这正是 Fabric 提示词模式能被众包复用的关键:每个模式都是一份可版本管理、可分享、可被他人直接调用的“提示词即资产”。
八、总结与适用场景
一句话概括extract_ctf_writeup的产出:< 50 词管理摘要 + 带 CVE/类别的漏洞清单 + 保留工具路径与版本号的分步时间线 + 完整引用来源,全部以去重的 Markdown 无序列表呈现。
它最适合以下场景:
- 写作者将长篇 Writeup 压缩为可存档的速读卡片;
- CTF 学习社区把投稿短文统一格式化为“摘要 + 漏洞 + 时间线 + 参考”的规范条目;
- 安全团队用它把一份外部攻击复盘(含工具、URL、版本)快速结构化,用于情报比对或复现决策。
如果你想深入这套模式的机制本身,推荐继续阅读仓库内 internal/plugins/db/fsdb/patterns.go(模式加载与输入拼接)、internal/plugins/db/fsdb/db.go(默认system.md文件名配置),以及 internal/cli/flags.go(与模式相关的全部 CLI 参数),即可把这套“提示词即资产”的思路搬到自己的安全自动化流水线中。
【免费下载链接】FabricFabric is an open-source framework for augmenting humans using AI. It provides a modular system for solving specific problems using a crowdsourced set of AI prompts that can be used anywhere.项目地址: https://gitcode.com/GitHub_Trending/fa/Fabric
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考