1. 为什么我们需要Packer-Fuzzer?
每次遇到用Webpack打包的网站,我都忍不住想吐槽:这玩意儿生成的JS文件怎么这么多?随便打开一个现代前端项目,动辄几十个JS文件,代码量轻松破万行。上周我测试一个电商平台,光vendor.js就有2万多行,手工翻找API简直像大海捞针。
这时候Packer-Fuzzer就成了救命稻草。它专门对付这种现代前端打包工具(Webpack、Rollup等)构建的网站,能自动完成三件事:
- API挖掘:从海量JS代码中提取所有API端点
- 参数提取:分析出每个API需要的请求参数
- 漏洞检测:对发现的API进行常见Web漏洞扫描
我去年用这个工具测过一个政府网站,2小时就发现了3个高危漏洞,效率比手工测试高了至少10倍。最惊艳的是它能自动识别API参数结构,连嵌套的JSON参数都能正确解析,这对模糊测试来说简直是开挂。
2. 环境搭建避坑指南
2.1 Python环境配置
建议直接用Python 3.8+版本,我在Python 3.10上遇到过兼容性问题。安装完记得检查pip版本:
python3 -m pip install --upgrade pip2.2 NodeJS的那些坑
官方文档说装NodeJS就行,但实际使用中有几个隐藏坑:
- 版本问题:NodeJS 18+可能导致
node_vm2报错,推荐用NodeJS 16 LTS版 - 环境变量:Windows用户经常遇到
node命令不可用的问题。安装时务必勾选"Add to PATH"选项 - 权限问题:Linux/Mac用户记得加sudo权限:
sudo chmod -R 777 /usr/local/lib/node_modules2.3 依赖安装的玄学
执行pip3 install -r requirements.txt时可能会卡在PyExecJS。这时候需要先装好NodeJS再重试。如果还报错,试试这个组合拳:
pip3 uninstall pyexecjs pip3 install pyexecjs npm install -g @babel/core @babel/cli3. 实战扫描技巧
3.1 基础扫描模式
最简单的启动命令:
python3 PackerFuzzer.py -u https://target.com但这样会漏掉很多内容。我常用的完整参数组合:
python3 PackerFuzzer.py -u https://target.com \ -c "sessionid=xxxx" \ -t adv \ -r html,pdf \ --ct "application/json" \ --pd '{"test":1}'关键参数解析:
-c:带上登录态cookie,能扫描更多权限接口-t adv:启用高级模式,会检测SQL注入等漏洞--ct:设置Content-Type为JSON,适合现代REST API--pd:自定义POST数据模板,避免默认参数被WAF拦截
3.2 处理特殊场景
案例1:API域名分离的情况
--ah https://api.target.com当前端和API不在同个域名时特别有用,比如Vue+SpringBoot的常见架构
案例2:隐藏的API扩展名
--fe .do遇到Struts2这类框架时,不加.do后缀会404
4. 报告分析与漏洞验证
扫描完成后会在/tmp生成报告,但直接看HTML报告可能遗漏重点。我总结了三步分析法:
- 优先关注红色高危项:特别是SQL注入和文件上传漏洞
- 检查越权漏洞:对比带cookie和不带cookie的扫描结果
- 验证误报:所有漏洞都要手工复测,工具可能有30%左右的误报率
上周发现的一个真实案例:
- 工具报告存在SQL注入 → 手工测试确认是时间盲注
- 工具漏报了水平越权 → 通过对比用户ID参数发现
- 文件上传绕过漏报 → 工具只检测了前端校验
5. 高级技巧:插件开发
工具自带的ext/demo.py是个宝藏。我开发过几个实用插件:
密码爆破插件:
def check(password): resp = requests.post(api, json={"pwd":password}) return resp.status_code == 200JWT破解插件:
import jwt for secret in secrets: try: jwt.decode(token, secret, algorithms=["HS256"]) return secret except: continue插件开发注意三点:
- 文件名必须以
plugin_开头 - 通过
-e on参数启用 - 插件输出会整合到最终报告
6. 常见问题排查
问题1:运行时报ModuleNotFoundError
- 解决方案:手动安装缺失模块,特别是
pyExecJS和node_vm2
问题2:扫描中途卡住
- 可能原因:目标API响应慢或存在防护
- 解决方案:添加
--timeout 10参数延长超时时间
问题3:报告为空
- 检查点:
- 目标是否使用Webpack打包(查看源码是否有
webpackJsonp) - 是否使用了
-t adv参数 - 网络是否通畅,特别是HTTPS站点
- 目标是否使用Webpack打包(查看源码是否有
最后提醒下,扫描前最好获取书面授权。我有次在测试环境扫出漏洞太兴奋,直接跑到生产环境复测,结果触发告警被封了IP。真实场景中建议先用--st GET参数做只读扫描,确认没问题再用POST模式。