bp_JsFuzz 被动扫描插件
在 ai 辅助下开发的一个小工具,主要功能就是从 js 中正则匹配 url 路径并进行 fuzz 测试
链接:https://github.com/ALe1293528/bp_JsFuzz
功能测试:
![]()
![]()
官方的api接口说明地址:
https://portswigger.github.io/burp-extensions-montoya-api/javadoc/index.html
在新版本的 api 中加入了 MontoyaApi ,这极大简化了插件开发的过程
burp.api.montoya
包含两个类
BurpExtension:所有插件必须实现该接口,内置有Burp插件初始化方法
Burp 会自动检测并加载所有继承了BurpExtension的类
MontoyaApi:Burp通过该接口传给插件一些可以在Burp中执行的方法,内置有访问Burp各个模块的方法
代码结构
1 | JsFuzzExtension ← 插件入口(Montoya BurpExtension) |
JsFuzzExension
作为入口类,主要功能为创建 ui 和扫描器
core 接口发现
JsLinkFinder
在这个类中主要就是实现的 https://github.com/InitRoot/BurpJSLinkFinder 的功能
一部分通过 LinkFinder 中的正则匹配
1 | private static final Pattern LINKFINDER = Pattern.compile( |
另外又加入了一些正则
1 | - FETCH → fetch('...'),方法 GET |
PassiveJsScanner
被动扫描钩子,实现 Montoya ScanCheck
- 过滤:只处理 URL 含 .js、且不在排除列表里的响应
- ui.linkFinder().recordSite(url) 把这个 JS 站点登记到左侧列表
- finder.extractAll(body) 提取所有链接
- 对每条链接:
- 用 UrlNormalizer 补全成绝对 URL
- 分别加进 UI 的 Paths 框和 Files 框(addFilename 从链接里截文件名)
- 若是 http(s) 接口 → 构造 ApiEndpoint,security.submit(ep, …) 丢进安全流水线,回调里刷新 UI 行
- consolidateIssues 同名同 URL 的 issue 只保留一个,避免重复刷屏
security
ApiSecurityManager
主要负责线程管理和去重
ApiAliveChecker
存活检测,先发 HEAD;若失败或返回 405(很多服务器拒绝 HEAD)则回退 GET。然后按 classify() 分类:200–399=Alive / 404=Dead / 其余=Unknown
UnauthorizedScanner
- 未授权:去掉 Authorization/Cookie/JWT 等认证头重发。查看返回包状态码和大小是否有差别
- IDOR / 越权:URL 里若有 uid/userId/id=数字,尝试 原值+1 / -1 / 一个哈希随机值
- 敏感数据:响应包里若出现 token/password/secret/apikey/admin 等关键字则在 fuzz 摘要中标出
Fuzz
所有策略:
| # | 策略 | 内容 |
|---|---|---|
| 1 | HTTP 方法 | 换 GET / POST / PUT / DELETE / OPTIONS / HEAD |
| 2/3/4 | 边界参数 | 数字边界 0 / -1 / 2147483647,字符串 '、"、../、AAAA...,空参数 |
| 5/6 | JSON 体 | {"id":null}、{"admin":true}、{"isAdmin":true} |
| 7 | 参数污染 | id=1&id=2 |
| 8 | 伪造 IP 头 | X-Forwarded-For: 127.0.0.1 等 |
| 9 | Content-Type 切换 | application/json / application/x-www-form-urlencoded / multipart/form-data / text/plain |
| 10 | 401/403 绕过 | 仅当基线请求被拦截时触发 |
model
重要的就是 RiskLevel 枚举权重
ui
ui 用 ai 写的,也没什么好说的
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
