BBOT Lightfuzz 实战指南:递归扫描器内置的轻量级 Web 漏洞模糊测试框架
BBOT Lightfuzz 实战指南递归扫描器内置的轻量级 Web 漏洞模糊测试框架【免费下载链接】bbotThe recursive internet scanner for hackers. 项目地址: https://gitcode.com/GitHub_Trending/bb/bbotLightfuzz 是 BBOT 内置的轻量级 Web 漏洞扫描器面向低垂果实型漏洞在大规模资产扫描中以极低开销完成 GET/POST 参数的启发式模糊测试。本文基于 docs/modules/lightfuzz.md 及其源码实现完整讲解其设计哲学、8 个检测子模块含 cmdi、sqli、xss、path、crypto、serial、ssti、esi、5 套内置 preset 的选择差异以及从单条命令到自定义子模块组合的完整实战用法读完即可将其接入 BBOT 扫描流水线。注意Lightfuzz 目前仍是一个实验性功能。它必然存在误报同样也存在我们无从知晓的漏报相关子模块正在持续迭代以降低误报率。如果发现误报请携带复现细节提交 issue 协助改进。Lightfuzz 的定位与设计哲学它是什么面向大规模资产的低垂果实扫描器Lightfuzz 是一个构建在 BBOT 事件框架之上的轻量级 Web 漏洞扫描器。它的目标非常明确在没有太多开销的前提下、以大规模并发的方式找出低垂果实low-hanging fruit类型的漏洞。从源码角度看它被实现为一个普通 BBOT 模块bbot/modules/lightfuzz/lightfuzz.py标记了active、aggressive、web-thorough、deadly四个 flag并监听URL与WEB_PARAMETER两类事件产出FINDING与VULNERABILITY两类事件。它不是什么不是 Burp Suite 的替代品Lightfuzz 不是、也不试图成为、未来也不会是完整 Web 应用扫描器的替代品。例如你不应该用它来替代 Burp Suite 的主动扫描——Burp Suite Scanner 总能发现更多问题尽管 Lightfuzz 也能找到一些它发现不了的东西。它同样不会帮你利用漏洞。它的职责是指出漏洞、疑似漏洞或潜在漏洞然后把它们交给你。传统扫描器的大量开销集中在确认阶段和测试利用载荷上而 Lightfuzz 刻意绕开了这一部分。例如Lightfuzz 可能会帮你检测到一个 XSS 漏洞但它不会帮你判断绕过安全过滤需要哪个标签也不会给你最终可用的 payload它只负责告诉你某个 GET 参数的内容被反射了并且未经修改的 HTML 标签可以在响应中渲染。剩下的工作完全由你完成。关于误报False Positives项目在降低误报上投入了大量工作但由于 Lightfuzz 的工作机制基于启发式响应比对误报是无法完全避免的现实——随机网络抖动、奇怪的 WAF 行为都可能触发误报。若你遇到频繁出现或本可轻易避免的误报请提交 issue。核心机制由 WEB_PARAMETER 事件驱动的模糊测试要理解 Lightfuzz 为什么轻量先要理解它的数据流。主模块 lightfuzz.py 的handle_event()是入口收到URL事件时除非开启了force_common_headers否则直接跳过收到WEB_PARAMETER事件时先做一次连通性测试self.helpers.request(url, timeout10)失败则放弃通过连通性测试后遍历enabled_submodules中启用的子模块逐个执行fuzz()若开启try_post_as_get/try_get_as_post还会将 POST 参数按 GET 方式或反之再跑一轮子模块把结果写入results主模块统一封装为FINDING或VULNERABILITY此时附带severity事件发出并附带Envelopes摘要。其中WEB_PARAMETER事件正是由httpx、excavate、paramminer_*等模块从页面中提取参数后产生的。这也是文档反复强调配合爬虫spider与参数挖掘模块使用的根本原因——发现的参数越多Lightfuzz 能测的点就越多。模块级配置项主模块在 lightfuzz.py 中定义了一组选项均可通过-c modules.lightfuzz.keyvalue或自定义 preset 覆盖配置项默认值含义enabled_submodules[sqli, cmdi, xss, path, ssti, crypto, serial, esi]启用的子模块列表空列表表示启用全部disable_postFalse禁止处理 POST 参数避免表单提交最保守的模式try_post_as_getFalse对每个 POSTPARAM 额外按 GET 方式模糊测试try_get_as_postFalse对每个 GETPARAM 额外按 POST 方式模糊测试force_common_headersFalse强制为常见头x-forwarded-for、user-agent发射WEB_PARAMETER即使目标上未观测到avoid_wafsTrue对已确认的 WAF 跳过测试WAF 很可能拦截 Lightfuzz 请求注意enabled_submodules为空列表时含义特殊——启用全部而非禁用全部。此外setup()中会校验每个子模块名能否被importlib正确导入无效子模块名会直接导致模块启动失败并给出提示。_module_threads 4表明每个事件的处理并发度为 4。八个检测子模块详解Lightfuzz 被划分为多个子模块submodules它们通常一起运行但也可以单独或按任意组合配置运行。源码位于 bbot/modules/lightfuzz/submodules/。所有子模块继承自 base.py 中的BaseLightfuzz共享一套基线比对compare_baseline/compare_probe、随机探针值生成、URL 编码与Envelopes针对 hex/base64 包裹参数的内层模糊测试基础设施。cmdiCommand Injection命令注入通过Interactsh检测基于输出的与盲式带外OOB命令注入回声金丝雀检测Echo Canary注入命令分隔符;、、||、、|配合echo canary若响应中出现金丝雀值且不包含 echo 字样说明命令真实执行而非简单反射其中AAAA作为假阳性探针先行校验盲注检测注入nslookup tag.interactsh-domain通过 Interactsh 的 DNS 解析回调确认命令执行cmdi.py。cmdi是唯一一个uses_interactsh True的子模块。主模块setup()中只要存在使用 Interactsh 的子模块且未设置interactsh_disable就会自动注册 Interactsh 会话检测到 OOB 交互时interactsh_callback会直接以CRITICAL严重级别发出VULNERABILITY事件lightfuzz.py。sqliSQL InjectionSQL 注入报错型检测Error-based注入单引号与双单引号并与基线比对响应差异出现时用内置的 10 条 SQL 报错特征串如error in your SQL syntax、Unterminated string literal、Unknown column等做匹配同时通过状态码变化单引号改变状态码、双单引号状态码不同辅助判定sqli.py时间盲注检测Blind time-delay对 PostgreSQLpg_sleep、MySQLSLEEP、OracleDBMS_LOCK.SLEEP未测试、MSSQLWAITFOR DELAY未测试注入延时载荷每个载荷发送 3 次配合统计基线两次正常请求的响应耗时均值做±1.5s 容差判定并兼容语句被拼接两次导致的 2 倍延时情形只有 3 次全部命中才报告以显著降低误报。xssCross-site Scripting跨站脚本覆盖多种 XSS 类型与多种上下文标签之间、标签属性内、JavaScript 内先注入随机字符串确认反射不反射直接放弃再用正则判定反射发生的上下文between_tags标签之间、in_tag_attribute属性内、in_javascriptscript内标签之间测试z、svg、img三种标签能否原样渲染属性内测试引号逃逸含自动加引号 autoquote 场景与javascript:表单动作注入JavaScript 内测试/scriptscript闭合失败时进一步分析单/双引号上下文determine_javascript_quote_context并尝试转义转义字符xss.py由于不构造最终利用载荷往往能穿透 WAF。值得留意的是若参数来自paramminer_getparams且未携带http-reflection标签xss 子模块会直接跳过——没有反射就不可能有反射型 XSS。pathPath Traversal路径穿越支持相对路径穿越与绝对路径两种检测可发现任意文件读取 / 本地文件包含LFI类漏洞相对穿越基于单点穿越容差single-dot traversal tolerance技术同一参数分别注入./a/../原值与../a/../原值若前者响应与基线一致应用仍正常工作而后者的响应发生实质变化非仅响应头变化、非空响应、不含常见 WAF 拒绝提示The requested URL was rejected则说明真实路径被操纵覆盖多种编码变体无编码、URL 编码、双重 URL 编码、...//非递归剥离绕过、前导斜杠、路径起点校验/原路径/./原文件名等 9 类技术path.py绝对路径测试覆盖 Windowsc:\windows\win.ini、Linux/etc/passwd与空字节扩展绕过../../../../../etc/passwd%00.png并以特征串; for 16-bit app support、daemon:x:确认读取成功每次检测需3 次以上确认才报告。cryptoCryptography加密参数探测识别对应用有实际影响的加密参数可识别**填充预言机Padding Oracle与哈希长度扩展Hash Length Extension**漏洞crypto.py对参数值做 hex / base64格式无关解码进行单字节突变、截断、扩展等操纵与基线比对确认该参数是否驱动服务端密码学操作用 YARA 规则匹配 18 条加密报错特征串如invalid mac、padding is invalid、OpenSSL Error等并排除基线中已存在的字符串当值疑似分组密码密文长度是 8/16 的倍数且块数 ≥2时执行裁剪版 padding oracle 验证逐字节比对 254 个填充值响应差异容忍 ≤5 字符级差异与 1/255 首字节巧合确认后以 HIGH 严重级别直接发出VULNERABILITY根据长度识别哈希类型MD5/SHA1/SHA256/SHA384/SHA512并通过联动参数操纵确认是否构成长度扩展攻击面。serialDeserialization反序列化可识别多种平台PHP、Java、.NET、Ruby多种编码base64、hex、PHP 原生下的活跃反序列化serial.py分类型建立基线使用精心构造的非序列化控制载荷诱导出与解码过程无关的错误再注入真实序列化载荷对比若替换为序列化对象后状态码变为 200且排除通用错误串干扰判定错误消解Error Resolution否则检查特征错误串如java.io.optionaldataexception、cannot cast java.lang.string判定差分错误分析Differential Error Analysis仅在参数原值不存在、或原值本身疑似序列化数据base64/hex/PHP 前缀a:、O:等时才会运行。sstiServer-side Template Injection服务端模板注入可发现基础的服务端模板注入ssti.py使用 5 组覆盖常见模板引擎的载荷核心思想是注入1337*1337整数乘法表达式若响应中出现计算结果1787569或1,787,569说明表达式被模板引擎求值即存在 SSTI。esiEdge Side Includes边缘侧包含检测服务端是否处理 ESI 标签esi.py技术来自 PortSwigger 的 active-scan-plus-plus注入AA!--esi--BB!--esx--CC若 ESI 被处理!--esi--会被移除响应中出现AABB!--esx--CC特征串即为命中。说明原文档正文列举了 7 个子模块而当前仓库源码中还包含第 8 个esi子模块它同样出现在各 preset 的默认启用列表中故本文一并收录。Preset 预置方案全解析文档强调除非你对 BBOT 内部机制非常熟悉否则强烈建议直接使用预置 preset。这是因为 Lightfuzz 要正常工作必须改动若干关键的 BBOT 全局设置包括将url_querystring_remove设为FalseBBOT 默认会剥离 URL 查询字符串见 bbot/defaults.yml而模糊测试 GET 参数必须保留它启用若干互补模块hunt与reflected_parameters在WEB_PARAMETER事件产出时同样有用。所有 preset 定义在 bbot/presets/web/ 目录下下面逐一说明差异。-p lightfuzz-light最小化方案仅检查最常见的漏洞对大扫描最安全。对应 lightfuzz-light.yml启用httpx、lightfuzz、portfilter三个模块enabled_submodules: [path, sqli, xss]仅 3 个最常见漏洞类型disable_post: True不发 POST 请求攻击性最低url_querystring_remove: False、url_querystring_collapse: True内置条件检查若web.spider_distance 0未开爬虫会输出警告Lightfuzz 配合 spider 效果更好。-p lightfuzz-medium默认方案推荐起点对应 lightfuzz-medium.yml。它是默认设置include: lightfuzz-light并追加badsecrets、hunt、reflected_parameters模块启用全部Lightfuzz 子模块[cmdi, crypto, path, serial, sqli, ssti, xss, esi]try_post_as_get: True关键限制默认disable_post继承自 light为True即禁用 POST 请求模糊测试——因为 POST 请求最具侵入性最容易引发问题尤其在内部网络中。-p lightfuzz-heavy更激进对应 lightfuzz-heavy.yml相比默认提升一点爬虫spider设置加入Param Miner系列模块通过flags: web-paramminer触发暴力挖掘新参数进行模糊测试追加robots模块辅助参数/路径发现启用 POST 参数模糊测试disable_post: False并同时开启try_post_as_get: True与try_get_as_post: True。-p lightfuzz-superheavy极限方案对应 lightfuzz-superheavy.yml。包含 heavy 的全部内容外加关闭查询字符串折叠url_querystring_collapse: False——默认情况下同一参数的多个实例如foobar和foobar2会被折叠成一个进行测试superheavy 对每个实例单独测试强制常见头force_common_headers: True——即使未在目标上发现也强制模糊x-forwarded-for、user-agent等常见头参数推测 GET 参数excavate.speculate_params: True——从 JSON/XML 响应体中推测参数avoid_wafs: False——不再避开 WAF。这些设置会显著增加扫描耗时通常不是理想选择。-p lightfuzz-xss纯 XSS 专项对应 lightfuzz-xss.yml。这是一个专注于单一子模块的自定义 preset 范例让 XSS 狩猎尽可能快enabled_submodules: [xss]disable_post: True仅 GET 型 XSS包含paramminer_getparams与reflected_parameters帮助发现未文档化的参数url_querystring_remove: False、url_querystring_collapse: False同样带 spider 提醒条件。Spider 预设强烈建议搭配文档特别强调强烈建议配合 spider 运行这会大幅增加被发现的参数数量若不开启会收到配合 spider 效果更好的警告。只需同时叠加spider或spider-intensepreset 即可bbot -p lightfuzz-medium spider -t targets.txt --allow-deadly实战使用命令行与输出解读基本用法有了 preset 之后用法极其简单大多数情况下一条命令即可bbot -p lightfuzz-medium spider -t targets.txt --allow-deadly其中--allow-deadly是必需的安全开关。Lightfuzz 带有deadly标志这是最激进模块的专属标记用于强制额外的确认流程。BBOT 在 bbot/cli.py 中实现该检查若本次扫描启用的模块中含deadly标志如lightfuzz、nuclei、medusa、ffuf等而未指定--allow-deadly会打印大号警告并停止该参数在 args.py 中定义为启用高度激进模块。按需启用特定子模块若只想跑某个子模块可通过modules.lightfuzz.enabled_submodules配置命令行与 preset 皆可。仅 XSSbbot -p lightfuzz-medium -t targets.txt -c modules.lightfuzz.enabled_submodules[xss] --allow-deadlyXSS SQLibbot -p lightfuzz-medium -t targets.txt -c modules.lightfuzz.enabled_submodules[xss,sqli] --allow-deadly同理也可以写进自定义 preset 文件可参考 lightfuzz-xss.yml 的写法用include继承基础 preset 再覆盖modules.lightfuzz.enabled_submodules。输出解读FINDING 为主VULNERABILITY 为辅Lightfuzz 的几乎所有输出都以FINDING事件形式呈现只有少数例外是VULNERABILITY。原因如前所述其发现本质上未经确认需要你自行验证。目前明确的例外包括cmdi的 Interactsh OOB 回调CRITICAL命令注入crypto确认的 padding oracleHIGH。每个 FINDING 的描述都带有结构化元数据例如Parameter: [filename] Parameter Type: [GETPARAM] Original Value: [default.jpg]、Detection Method: [...]等方便你在输出模块JSON、TXT、CSV 等中检索与归档。源码级验证测试用例仓库在 bbot/test/test_step_2/module_tests/test_module_lightfuzz.py共 2300 余行中为各子模块提供了完整的端到端仿真测试。以Test_Lightfuzz_path_singledot为例目标指向本地模拟服务仅启用httpx lightfuzz excavate页面响应中包含/images?filenamedefault.jpg由 excavate 提取为WEB_PARAMETER模拟服务对%2F.%2Fa%2F..%2Fdefault.jpgURL 编码的单点穿越载荷返回与default.jpg相同内容对其他值返回 500测试断言必须产出WEB_PARAMETER事件且最终 FINDING 描述精确匹配POSSIBLE Path Traversal ... Detection Method: [single-dot traversal tolerance (url-encoding, leading slash)]。这类测试验证了从参数提取 → 子模块 fuzz → FINDING 产出的完整链路也是理解每个子模块判定逻辑的最佳入门材料。结语把 Lightfuzz 纳入你的扫描流水线Lightfuzz 的最佳实践画像很清晰它是大规模资产清单上的一台漏网之鱼过滤器——先用httpx spider 摸清 Web 面用 excavate/paramminer 提取海量参数再用 Lightfuzz 以最小开销筛出值得人工深挖的疑似漏洞点而确认与利用则交由你或 Burp Suite 等完整扫描器完成。从-p lightfuzz-medium起步叠加spider预设依据目标风险承受度逐步升级到lightfuzz-heavy/lightfuzz-superheavy即可在扫描开销与发现能力之间找到适合你的平衡点。【免费下载链接】bbotThe recursive internet scanner for hackers. 项目地址: https://gitcode.com/GitHub_Trending/bb/bbot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考