为挖洞人写,为挖洞人用 · MIT License · 2024-2026
⚠️ 仅供安全研究使用 · 使用前请确保获得目标授权 · 严禁用于未授权测试或盈利行为
传统 JS 扫描器跑一次主动探测就触发 WAF、被封 IP。DesJsFinder 走完全不同的路 —— 装到浏览器里,安静地等用户正常浏览。扩展在后台静默抓取所有 JS 文件,自动提取 API / 密钥 / 指纹,全程目标无感知。
- 装上扩展后正常浏览目标网站,扩展在后台静默抓取所有加载的 JS 文件
- 自动提取 API endpoint / 密钥 / Token / 内网 URL / 技术指纹
- 跟传统主动扫描不同:被动视角 = 不触发 WAF,不留痕,目标无感知
| 🎬 截图速览 | 🎯 它能干什么 | ✨ 核心特性 |
| 🚀 快速开始 | 📖 使用文档 | 🏗 架构设计 |
| 🧪 检测示例 | 📋 标签准确性说明 | 📝 更新日志 |
| 🆚 同类对比 | 🤝 致谢 | 📜 License |
| 接口采集 | Fuzz 探测 | 指纹 / 实战 |
|---|---|---|
![]() |
![]() |
![]() |
暗色 HUD 风格 · 蓝图网格 · 扫描线 · LED 脉冲 · Phosphor 1.6-stroke SVG 图标
打开目标站,插件自动开始干活——下载 JS、提取 API、识别框架、收集凭据。需要主动挖的时候,按一下 FUZZ,字典 + runtime 参数 + 路径变形一并打过去。
💡 核心理念:被动优先,Fuzz 按需。 90% 的 API 在浏览时就拿到了,Fuzz 只是补全 + 主动验证。
👇 6 大被动能力,零操作全开
| 模块 | 干了啥 |
|---|---|
| JS 资源拦截 | 自动下载所有 JS(含内联、modulepreload、动态 import),6-pattern 正则提取隐藏 API |
| 运行时 API 捕获 | fetch / XMLHttpRequest monkey-patch(MAIN world),抓到响应体再做关键词提取 |
| JS 参数提取 | 集成 ParamX 引擎 — 9 种策略 × 4 类评分,一键构造 POST-JSON / GET 查询串 |
| 动态扫描 | MutationObserver + SPA 路由劫持(pushState / replaceState / popstate / hashchange)+ iframe 监听 |
| 深度扫描 | Webpack chunk 路径自动还原、import/require 递归 |
| 凭据捕获 | 域名 / IP / 手机 / 邮箱 / JWT / 凭据 / GitHub repo / 公司名 / Cookie / localStorage 敏感项 |
👇 同时跑 4 套,去重打分
- 🔬 Wappalyzer 引擎 —
3,774种技术 ×7,925条规则,5 种信号源(scriptSrc / HTML / JS globals / Header / Cookie) - 🎯 内置框架检测 —
40+框架:芋道 / 若依 / Spring Boot / Cloud / ThinkPHP / Laravel / FastAPI / Django / Flask / ASP.NET / Shiro / Vue / React / Next.js / Webpack / Vite / ECharts / jQuery / Node.js / Jenkins / ES / Kibana / Swagger / Docker … - 🪪 HTTP 头指纹 — TideFinger
5,337条关键词 + 16 条内置正则 - 🚨 响应指纹 —
20种漏洞指纹(Actuator / SQL 报错 / Git 泄露 / 凭据泄露 / ThinkPHP 报错 / Debug 模式 / Swagger / CORS / 目录遍历 / Cookie 无 HttpOnly / 500 错误 …)
👇 字典 + 变形 + 参数 + 限速全配齐
- 📚 字典生成 —
16种框架专用模板 + 通用 fuzzdicts 精选 + 已发现路径变形 + runtime 参数 + CRUD 推理 - 🌐 三级降级 — Service Worker fetch → offscreen document(带 Cookie)→ 页面注入(绕过 CORS)
- ⏱️ 速率档位 — 慢 1 并发 / 常 3 并发 / 快 5 并发,避开 WAF 限速
- 🔌 代理联动 — HTTP / SOCKS 代理,配合 Burp Suite
- 👁️ 响应预览 — 点击行展开响应体,JSON 自动格式化
- 🎯 结果筛选 — 非 404 / 2xx / 3xx / 401&403 / 4xx / 5xx 一键过滤
- 🌀 SPA 识别 — 3+ 相同响应体自动标记为 SPA 路由,避免噪音
- 16 类自动标注 — Actuator / 认证鉴权 / 文件上传 / 管理后台 / 交易支付 / 用户管理 / API 文档 / 数据查询 / 写入 / 基础设施 / 第三方对接 / 敏感文件 / 消息发送 / 工作流 / 业务模块,附风险评级(
CRITICAL/HIGH/MEDIUM/INFO) - 框架攻击路径 — 命中 Spring / ThinkPHP / Laravel / Yudao / Ruoyi / FastAPI / Jenkins / ES / Kibana … 时自动弹提示,列出已知 RCE / 未授权端点
# 1. 克隆
git clone https://github.com/Dest1ny-Sec/DesJsFinder.git
# 2. 打开 Chrome 扩展页
# 地址栏输入: chrome://extensions
# 3. 打开「开发者模式」→ 「加载已解压的扩展程序」→ 选项目文件夹📋 需要 Manifest V3 权限:
storage/scripting/activeTab/webRequest/proxy/offscreen/declarativeNetRequestWithHostAccess
1️⃣ 打开目标站 → 插件自动采集 (图标实时显示 API 数量)
2️⃣ 点 FUZZ 按钮 → 字典 + 路径变形 + runtime 参数一并打过去
3️⃣ 点行展开响应体 → 看 JSON / HTML / 错误详情, 一键复制命中
打开目标站 → 插件图标实时显示 API 数量 → 点击图标看详情。全程零操作。
- (可选)顶部输入 Token:
Authorization: Bearer eyJhbGciOi... Cookie: JSESSIONID=abc123 - 选速率档位(慢 / 常 / 快)
- 点 FUZZ 按钮
- 实时滚结果 → 点行展开响应体 → 切筛选器看不同状态码
切到对应 tab,插件把抓到的东西全列出来——域名、IP、邮箱、JWT、凭据、GitHub repo、公司名、ICP 备案、IP 归属。
🔑 ICP / IP 查询需要
cn.apihz.cn密钥,在「设置」里填。
┌─────────────────────────────────────────────────────────┐
│ 目标页面 (Tab) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ injector.js (MAIN world) │ │
│ │ ├─ fetch / XHR monkey-patch → postMessage │ │
│ │ └─ Wappalyzer JS globals 扫描器 (每 5s) │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ content.js (ISOLATED world) │ │
│ │ ├─ 解析 JS URL + 内联脚本 + DOM 属性路径 │ │
│ │ ├─ Wappalyzer 引擎 → 3,774 种技术指纹 │ │
│ │ ├─ 40+ 框架检测 + 配置提取 │ │
│ │ ├─ 域名 / IP / 手机 / 邮箱 / JWT / 凭据 │ │
│ │ ├─ MutationObserver 动态扫描 + SPA 路由劫持 │ │
│ │ └─ 发送到 background │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ background.js (Service Worker) │
│ ├─ 下载 JS → 提取 API → 框架识别 → 指纹 → Badge 计数 │
│ ├─ TideFinger 5,337 条 Header 关键词匹配 │
│ ├─ fuzzURL: fetch → offscreen (带 Cookie) → scripting │
│ ├─ declarativeNetRequest 动态 Header 注入 │
│ └─ chrome.storage.local 跨重启持久化 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ popup.html / popup.js (7 Tab UI) │
│ 接口 / 实时 / 参数 / 凭据 / 指纹 / 设置 / 探测 │
└─────────────────────────────────────────────────────────┘
filters/
├─ wappalyzer-data.json 3,774 种技术 × 1.3MB
├─ wappalyzer-engine.js 检测引擎 (HTML/scriptSrc/JS/Header/Cookie)
├─ api-filter.js 路径提取 + 16 类分类 + HTTP 方法推测
├─ framework-detect.js 40+ 框架 + 配置提取
├─ response-fingerprint.js 20 种响应指纹
└─ param-extract.js 9 种提取策略 × 5 类评分 (ParamX 内核)
src/core/
└─ dict-generator.js 16 种框架字典 + 通用字典 + CRUD 推理
| 目标 | 自动识别 |
|---|---|
| 若依后台 | Ruoyi + Spring Boot + Java + Nginx |
| 芋道系统 | Yudao + Vue.js + Spring Boot + MySQL |
| Laravel 站点 | Laravel + PHP + Nginx + jQuery |
| ThinkPHP 站点 | ThinkPHP + PHP + Apache |
| WordPress 博客 | WordPress + PHP + MySQL + Nginx |
| React SPA | React + Webpack + Node.js + CDN |
| Next.js 站点 | Next.js + React + Webpack + Vercel |
两类标签,两套判定逻辑,分别说清楚:
| 标签 | 出现位置 | 来源 | 准确性 |
|---|---|---|---|
SPA / HTML / JSON / DATA / 需鉴权 |
Fuzz 探测结果 | 真实响应 — Content-Type 头 + 响应体内容 |
✅ 100% 基于实际响应,无猜测 |
认证鉴权 / 管理后台 / Actuator端点 / 文件上传 / CRITICAL / HIGH / MEDIUM |
API 列表(接口tab) | JS 文本里的路径关键词匹配 |
举例:
https://target/api/users/me返回 401 → 显示需鉴权标签(基于响应状态码)https://target/api/users/list返回Content-Type: application/json+ body 含"data":{"list":[...]}→ 显示DATA JSON(基于响应内容)https://target/social/{x,y,z}3+ 个不同路径返回相同 HTML → 全部打SPA标签(基于响应体 hash 比对)- JS 里字符串
/admin/login→ 被打成管理后台+HIGH(基于关键词,可能误报——如果admin是用户名而非路径段)
⚠️ 不要把 API 列表的分类当成定论,它是给红队一个"先看哪里"的优先级;Fuzz 探测结果的标签是基于实际响应的,可以信。
| 类别 | 改动 |
|---|---|
| 🐛 Bug | 静态资源(.avif / .webmanifest / .wasm 等)混入 fuzz 队列,扩展名清单统一化 |
| 🐛 Bug | URL 末尾的 \(JS 字符串残留的转义符)绕过静态过滤,新增 normalizePath() 在所有提取/去重/分类节点归一化 |
| 🐛 Bug | 跨站 fuzz 结果残留:popup 打开新站仍显示旧站结果,引入 lastFuzzUrl 比对 + data.url 变化时清空 |
| 🐛 Bug | 重复 URL(/social/feishu\ vs /social/feishu)未合并,dedup 键改用归一化 URL |
| 🎨 UI | fuzz 行 URL 显示更长:method 列 32→28px、badges 7px + 圆角减半、path 用 flex:1 min-width:0 ellipsis 挤出 8-12 字符 |
| ⚡ 性能 | 渲染前再做一道兜底过滤,静态资源在显示层就被剔除 |
| 🔧 维护 | STATIC_EXTS 常量三处统一(api-filter.js / background.js / popup.js),加新扩展只改一处 |
暗色 HUD 风格、蓝图网格、扫描线、LED 脉冲、Phosphor 风格 SVG 图标全面替换 emoji;增加 Fuzz 速率档位;事件委托优化。
集成 ParamX 引擎,9 种策略 × 4 类评分,一键构造 POST-JSON / GET 查询串。
| 工具 | 被动采集 | 主动 Fuzz | 框架识别 | Cookie 注入 | UI 体验 |
|---|---|---|---|---|---|
| 🛰️ DesJsFinder | ✅ 自动 | ✅ 3 速率 | ✅ Wappalyzer | ✅ offscreen | ✅ 暗色 HUD |
| JSFinder | ✅ | ❌ | ❌ | ❌ | 命令行 |
| FindSomething | ✅ | ❌ | ❌ | ❌ | 浏览器 |
| Packer-Fuzzer | ❌ | ✅ | ❌ | ❌ | 命令行 |
| HaE | ✅ | ❌ | ❌ | ❌ | 浏览器 |
| Burp Suite | ❌ | ✅ | ❌ | ✅ | 桌面 GUI |
本项目站在以下开源巨人肩膀上:
- Wappalyzer — 开源技术指纹库(3,774 种技术)
- ParamX — JS 参数提取引擎(已采纳)
- Phantom — Offscreen document 请求架构
- FindSomething — 浏览器侧被动扫描思路
- SnowEyes — 动态扫描 / HTTP 头指纹
- JSFinder — 早期 URL 提取算法
- TideFinger — 5,337 条 Header 关键词
- github-readme-stats — README 卡片思路
MIT © Dest1ny
🛰️ DesJsFinder · v1.5 · 红队 API 挖掘,从 JS 出发
⭐ 觉得好用?给个 Star 鼓励一下
本工具仅供安全研究与授权测试使用。
- 使用者需自行确保所有测试目标已获得明确授权;
- 严禁用于任何非法活动、未授权测试或盈利行为;
- 使用者应对自身行为及其后果承担全部责任,作者不对任何滥用行为负责。
MIT — 自由使用,欢迎二次开发。



