🕵️ JSS — 史上最全的 AI 驱动 JavaScript 漏洞挖掘 Skill

把 katana + waymore + jsluice + hae 四大顶级工具链编排成一条 AI 流水线, 让 Claude Code / ZCode 等 AI Agent 真正会做 JS 侦察。

License: MIT Python 3.8+ Platform Tools

中文 · English

仅用于已授权的渗透测试 / SRC 漏洞挖掘 / 安全研究。


📖 这是什么

一句话:一个自包含、解压即用的 AI Agent Skill,把"JS 侦察"从人肉拼工具升级为 AI 流水线。

传统做法里,你需要自己跑 katana 爬、自己跑 waymore 收存档、自己跑 jsluice 提取, 再把结果一点点喂给 AI,让它在一个塞满压缩混淆代码的上下文窗口里"暴力阅读"—— 读不完、读不准、还死贵。

JSS 把这一切变成一条命令。 工具层做广度(爬取、收集、批量提取、规则匹配), AI 层做深度(语义分析、优先级排序、回源核实、攻击链构建)。 AI 拿到的不是几百 MB 的原始 JS,而是一份几 KB 的结构化简报 ai_brief.md—— 每个端点带 file:line 出处,每条密钥命中带上下文,可直接跟进验证。

🔍 生态空白实证(2026-08 调研):GitHub 搜索 "AI agent javascript recon bug bounty" 结果为 0claude-skillsllm-security 两大话题下的热门项目里,没有任何一个专注 JS 侦察方向的 skill。 而本项目编排的上游工具——katana(17k+ stars)、waymore(2.7k+ stars)、jsluice(1.9k+ stars)—— 合计超过 22k stars,全部是各自赛道公认的最强单兵。 把这些武器装进一个 AI skill 里,JSS 是第一个。


🗺 拓扑架构

全景流水线

                        ┌─────────────────────────────────────────────┐
                        │              用 户 输 入(全场景)              │
                        │                                             │
                        │   URL / 域名      本地目录(小程序反编译/dist)   │
                        │   HAR 文件        Yakit / 浏览器 MCP 抓包 JSON  │
                        └──────────────────────┬──────────────────────┘
                                               │
              ┌────────────────────────────────┼────────────────────────────────┐
              │                     收 集 层(工具做广度)                        │
              │                                │                                │
              ▼                                ▼                                ▼
   ┌─────────────────────┐        ┌─────────────────────┐        ┌─────────────────────┐
   │  ② Yakit 流量导入    │        │  ③ katana 主动爬取   │        │  ④ waymore 被动存档  │
   │     ingest          │        │     collect         │        │     passive         │
   │                     │        │                     │        │                     │
   │  登录态 JS + API 响应 │        │  JS/map URL 发现     │        │  Wayback/CC/OTX 等  │
   │  体 + 真实调用端点    │        │  + 礼貌下载(限速)    │        │  7 大历史存档源      │
   │  ⚡ 对目标站 0 请求   │        │  🐢 2 req/s 硬限速  │        │  ⚡ 对目标站 0 请求   │
   └──────────┬──────────┘        └──────────┬──────────┘        └──────────┬──────────┘
              │                              │                              │
              └──────────────────────────────┼──────────────────────────────┘
                                             ▼
                        ┌─────────────────────────────────────────────┐
                        │           收 集 产 物 落 盘(work/<目标>/)      │
                        │                                             │
                        │   js/  ·  waymore_responses/                │
                        │   manifest.json  ·  flows_endpoints.txt     │
                        └──────────────────────┬──────────────────────┘
                                               │
              ┌────────────────────────────────┼────────────────────────────────┐
              │                     提 取 层(⑤ analyze,双引擎 + 1)             │
              │                                │                                │
              ▼                                ▼                                ▼
   ┌─────────────────────┐        ┌─────────────────────┐        ┌─────────────────────┐
   │    jsluice AST 引擎  │        │      正则端点引擎     │        │     hae 规则引擎     │
   │   (tree-sitter 语法树)│        │  (URL/路径全量扫描)  │        │ (密钥/云AK/指纹/中文) │
   │   拼接参数也能解出来   │        │   确定性·零幻觉      │        │   敏感信息命中        │
   └──────────┬──────────┘        └──────────┬──────────┘        └──────────┬──────────┘
              │                              │                              │
              └──────────────────────────────┼──────────────────────────────┘
                                             ▼
                        ┌─────────────────────────────────────────────┐
                        │        📄 report/ai_brief.md(AI 简报)        │
                        │                                             │
                        │  端点按 admin/internal/auth/upload/api 分组   │
                        │  sourcemap 引用 · 登录态 API · 密钥命中        │
                        │  小程序场景标记(自动识别 appid)              │
                        └──────────────────────┬──────────────────────┘
                                               │
                                               ▼
                        ┌─────────────────────────────────────────────┐
                        │         ⑥ AI 语义分析层(AI 做深度)           │
                        │                                             │
                        │  敏感信息回源核实(排除占位符/测试数据)          │
                        │  admin/internal 端点鉴权验证(401/403 标记)   │
                        │  sourcemap 还原原始源码 → 重跑 analyze         │
                        │  密钥×端点交叉 → 攻击链构建 → 优先级排序        │
                        │  工具短板 AI 补位(漏爬的 JS 自己 curl 补)      │
                        └─────────────────────────────────────────────┘

交互视图(Mermaid,GitHub 原生渲染)

flowchart TD
    A["🎯 用户输入<br/>URL · 本地目录 · HAR · Yakit 抓包"] --> B{输入类型判定}

    B -->|URL / 域名| C1["② Yakit 登录态流量<br/>(MCP 在线即自动查)"]
    B -->|URL / 域名| C2["③ katana 主动爬取<br/>(限速 2 req/s 防风控)"]
    B -->|URL / 域名| C3["④ waymore 被动存档<br/>(目标站 0 请求)"]
    B -->|本地目录 / 小程序| D
    B -->|HAR / 抓包 JSON| C4["har / ingest 导入<br/>(登录态·0 请求)"]

    C1 --> D["📦 收集产物落盘<br/>work/&lt;目标&gt;/"]
    C2 --> D
    C3 --> D
    C4 --> D

    D --> E1["🌳 jsluice AST 引擎"]
    D --> E2["🔤 正则端点引擎"]
    D --> E3["🔑 hae 规则引擎<br/>(自动探测联动)"]

    E1 --> F["📄 ai_brief.md 简报"]
    E2 --> F
    E3 --> F

    F --> G["🧠 AI 语义分析<br/>回源核实 · 鉴权验证 · 攻击链构建"]
    G --> H["📊 漏洞挖掘报告<br/>(file:line 证据链)"]

    style A fill:#e1f5fe
    style D fill:#fff3e0
    style F fill:#e8f5e9
    style G fill:#f3e5f5
    style H fill:#fce4ec

分层哲学:工具做广度,AI 做深度

mindmap
  root((JSS 设计哲学))
    工具层做广度
      爬取 katana
      存档 waymore
      提取 jsluice AST
      规则 hae
      机械劳动 · 确定性 · 零 token
    AI 层做深度
      语义分析
      优先级排序
      回源核实
      攻击链构建
      判断 · 验证 · 推理
    防风控是底线
      限速硬编码
      被动优先 0 请求
      失败自动跳过

⚔️ 为什么不直接把 JS 丢给 AI "暴力分析"?

这是本项目存在的根本理由。"AI 直接读 JS"看起来省事,实际上是上下文窗口、钱包和准确性的三重灾难:

维度 🐌 传统:AI 暴力读 JS ⚡ JSS 流水线
上下文窗口 一个中型站 300+ 个 JS、动辄上百 MB,直接塞爆上下文;只能采样分析,大量文件根本没被读过 工具层全量处理,AI 只读几 KB 的 ai_brief.md 结构化简报,0 浪费
Token 成本 每轮对话重复读全量文件,一次任务烧掉数百万 token(真金白银) 提取是本地确定性计算,免费;AI 只为"判断"付费
覆盖度 只能分析"你手动喂给它的文件"——文件从哪来?还是得自己去爬、去收集 收集层自动覆盖:主动爬取 + 7 大历史存档 + 登录态抓包 + 本地目录,四路输入
准确性 压缩混淆过的 webpack bundle 里,AI 极易幻觉——编造不存在的端点、看错拼接逻辑 AST + 正则双引擎确定性提取,每个端点带 file:line,可回源核实,零幻觉
混淆对抗 var a="\x2f\x61\x70\x69" 级别的混淆直接劝退 AI 阅读效率 jsluice 基于 tree-sitter 语法树提取,字符串拼接的端点也能解出来;发现 .map 引用还能还原原始源码重跑
防风控 AI 自己写脚本 curl 目标站,没有限速概念,几个并发就触发风控/WAF 限速硬编码:2 req/s 全局、1 req/s 每主机、8 分钟预算、单域 150 页;被动路径对目标站 0 请求
可复现性 每次运行 AI 给出不同结果,证据链无法固定 同输入同输出,端点清单、密钥命中全部落盘成文件,报告引用 file:line
登录态 AI 没有你的 cookie,登录后才能见的 JS/API 全部盲区 Yakit MCP 流量导入:登录态 JS、真实调用过的 API(含 403 越权线索)直接进简报

💡 一句话总结:让 AI 暴力读 JS,是把一个数据库检索问题当成阅读理解问题来解—— 又贵又慢又漏。JSS 先用工具把 300 个文件浓缩成 1 页简报,AI 只做它最擅长的判断


🧰 七大核心特性

# 特性 说明
1 🧳 开箱即用 静态编译的 katana.exe、jsluice.exe 通过 GitHub Release 一键下载,waymore-8.9 源码直接打包。无需装 Go、无需 clone 上游。唯一依赖:Python ≥3.8 + 4 个 pip 包
2 🎯 全场景输入自适应 URL / 域名 / 本地目录(小程序反编译、dist)/ HAR / Yakit·浏览器抓包 JSON——6 种输入自动路由到对应流水线
3 🛡 防风控刻进 DNA 限速参数硬编码不可误调:全局 2 req/s、每主机 1 req/s、8 分钟预算、单域 150 页、下载串行 + 随机延迟 + 300 文件上限;被动路径目标站 0 请求
4 🔧 双提取引擎 + 规则引擎 jsluice AST(tree-sitter 语法树,拼接参数可解)+ 正则引擎(全量兜底)+ hae 规则(密钥/云AK/指纹/中文生态),结果交叉去重
5 🧠 AI 深度分析编排 产出 ai_brief.md 后 AI 继续:敏感信息回源核实、admin/internal 端点鉴权验证、sourcemap 还原重跑、密钥×端点交叉成攻击链
6 🤖 健壮性:失败不终止 任何环节挂掉(katana 被拦截、waymore 国内超时、hae 未装)自动降级跳过,最终报告列出"已跳过"清单。唯一硬停:真的无文件可分析
7 🧩 生态联动 自动探测本机安装的开源 HaESkill~/.zcode / ~/.agents / ~/.claude)联动规则引擎;自动绕过 Windows 注册表死代理;JSS_WORK 环境变量重定位产物

🚀 快速开始

安装(一次性)

# 1. 克隆
git clone https://github.com/ZeroTu1/jss-skill.git
cd jss-skill

# 2. 下载预编译二进制到 bin/(静态编译,无需 Go 环境)
mkdir bin 2>nul
curl -L -o bin\katana.exe https://github.com/ZeroTu1/jss-skill/releases/latest/download/katana.exe
curl -L -o bin\jsluice.exe https://github.com/ZeroTu1/jss-skill/releases/latest/download/jsluice.exe

# 3. 装依赖(仅 4 个包)
pip install -r requirements.txt

# 国内镜像加速
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

# 4. 自检
python jss.py list
# 输出 "(没有历史结果)" 即工具链正常

💡 二进制也可从 katana / jsluice 官方 Release 自取,或自行编译:go build -o bin/jsluice.exe ./cmd/jsluice。 exe 不进 git 仓库是刻意的——katana 二进制内嵌的密钥检测规则会被 GitHub 误判为真实密钥,Release 分发是更标准的做法。

注册为 AI Agent Skill

Agent 安装方式
ZCode 拷贝/软链到 ~/.zcode/skills/jss/
Claude Code ~/.claude/skills/jss/(或项目级 .claude/skills/jss/
其他 Agent 对应 skills 目录,或直接把 SKILL.md 喂给它

之后对 AI 说 "分析js"、"js侦察"、"提取接口"、"分析小程序"、"jss" 即可触发。

基本用法

# 一条龙(URL 输入:Yakit 流量 + 主动爬 + 被动存档 + 分析,失败环节自动跳过)
python jss.py all https://target.com

# 分步执行
python jss.py collect https://target.com     # 主动爬 + 礼貌下载(限速)
python jss.py passive target.com             # 历史存档 JS(目标站 0 请求)
python jss.py har site.har                   # 浏览器 DevTools 导出的登录态流量
python jss.py ingest flows.json --name 目标  # Yakit / 浏览器 MCP 抓包导入
python jss.py analyze                        # 分析最近一次收集结果
python jss.py analyze D:\wxapp\decompiled    # 直接分析本地目录(小程序/dist)
python jss.py list                           # 历史目标一览

看结果

type work\<目标>\report\ai_brief.md          # ★ AI 简报:端点分组 + 密钥 + sourcemap
type work\<目标>\report\endpoints.txt        # 全量端点清单
type work\<目标>\report\hae.json             # hae 完整扫描结果

📥 全场景输入路由

你给 AI 什么 自动执行路径 对目标站请求
URL / 域名 Yakit 流量检查 → collect → passive → analyze 有,限速
本地目录(小程序反编译、dist) 只走 analyze,自动识别 app-service.js/app.json 特征 + 提取 appid 0
HAR 文件(DevTools 导出) har → analyze 0
Yakit / 浏览器 MCP 抓包 JSON ingest → analyze(登录态 JS + API 全落盘) 0
"分析上次的结果" list 确认 → analyze(取最近一次) 0
只要敏感信息扫描 直接用开源 HaESkill;要端点+流程编排才用 JSS 0

📋 子命令速查

子命令 打目标站请求 功能
collect <url> 有,限速 katana 主动爬 + 礼貌下载
passive <domain> 0 waymore 历史存档响应体(7 大数据源)
har <file.har> 0 DevTools 导出的登录态流量提取
ingest <flows.json> 0 Yakit MCP / 浏览器 MCP 抓包流量导入
analyze [dir...] 0 双引擎提取 + hae 增强 + AI 简报
list 0 历史目标一览
all <url> 有,限速 collect + passive + analyze(失败自动跳过并汇总)

📂 输出产物结构

work/<目标名>/
├── urls_katana.txt        # katana 收到的 js/map URL
├── js/                    # 下载的 JS / API 响应体(hash 前缀防重名)
├── waymore_responses/     # 历史存档 JS 响应体
├── manifest.json          # 文件名 ↔ 原 URL 映射(含状态码/大小/来源)
├── flows_endpoints.txt    # 登录态真实调用过的 API(方法 + 状态码)
└── report/
    ├── ai_brief.md        # ★ AI 简报(AI Agent 的第一入口)
    ├── endpoints.txt      # 全量端点(去重)
    ├── endpoints.json     # 端点 + 分组 + 出处 file:line
    └── hae.json           # hae 完整扫描结果

ai_brief.md 内容包括:

  • 端点按优先级分组admin-管理后台internal-内部调试auth-认证敏感upload-export-上传导出api-接口other-其他
  • sourcemap 引用清单(可还原原始源码,多一个量级的信息)
  • hae 高价值命中:敏感信息(密钥/凭据)、框架指纹、疑似弱点线索,均带 file:line
  • 已捕获 API 端点(登录态流量):真实调用过的方法 + 状态码,403 端点是越权测试起点
  • 小程序场景标记:自动识别反编译产物并提取 appid

🧠 AI 语义分析阶段(简报只是线索,不是结论)

ai_brief.md 生成后,AI Agent 按 SKILL.md 编排手册继续深挖:

  1. 敏感信息回源核实 —— 读命中行上下文,排除占位符/测试数据;判断密钥属于哪套体系(OSS AK?小程序签名 key?),能伪造/访问什么
  2. admin/internal 组端点逐个验证 —— 可达性与鉴权,401/403 记录;能匿名访问的标记重点
  3. sourcemap 还原 —— .map 可下载时用 node(source-map 包)还原原始目录,重跑 analyze <还原目录>,产出多一个量级
  4. 密钥 × 端点交叉 —— hae 命中的密钥配 endpoints 清单里哪些接口,两者交叉才是完整攻击链
  5. 工具短板 AI 补位 —— katana 漏爬的 JS 自己读 HTML 找 <script src> 补下载;jsluice 没解出的拼接端点自己读源码构造
  6. 输出报告 —— 引用 file:line;"已跳过环节"单独列一节;完整清单给文件路径

🛡 防风控设计(刻进默认值)

  • collect 硬编码限速:全局 2 req/s、每主机 1 req/s、请求间隔 1s、并发 4、总预算 8 分钟到点即停、单域 150 页、下载上限 300 文件
  • 下载器礼貌模式:串行 + 每文件随机 0.6–1.5s 间隔 + 跳过 >5MB 与 HTML 假响应(soft-404)
  • 被动优先:passive / har / ingest 对目标站 0 请求;需要登录的应用优先走 HAR / 抓包导入
  • 只侦察不攻击:流水线不发任何攻击 payload,验证类工作留给人工阶段

🧯 健壮性:跳过策略

任何一步失败或不适用都不终止流程——记录原因、继续下一步、最终报告列出"已跳过"清单:

阻塞情形 处置
katana 退出码非 0 / 0 条 URL 目标不可达或被拦截,跳过主动收集,passive 照走
waymore 超时 / 退出码非 0 国内网络访问 Wayback 属常态,已落盘部分照用
Yakit 里没有目标流量 跳过登录态导入,不算失败
hae skill 未探测到 规则引擎降级(正则 + jsluice 仍在),提示 --hae / JSS_HAE
jsluice.exe 缺失 AST 引擎跳过(正则引擎仍在)
子进程报代理错误 自动探测死代理并前置 NO_PROXY='*' 重试
requirements 缺失(waymore ImportError) pip install -r requirements.txt,失败则 passive 跳过
analyze 目标目录为空 唯一硬停(exit=1),向用户要正确输入

🔗 hae 联动(可选增强,不改 hae 一行代码)

JSS 的密钥/指纹规则来自开源 HaESkill(overspace-labs 出品,作者 EvilChen——BurpSuite 知名插件 HaE 的规则集封装成 Agent Skill,Apache-2.0 协议)。装到本机后运行时自动探测:

探测顺序:JSS_HAE 环境变量 > ~/.zcode/skills/hae > ~/.agents/skills/hae > ~/.claude/skills/hae
  • 安装 haenpx skills add https://github.com/overspace-labs/HaESkill -g -y,或 clone 后软链/拷贝为 ~/.zcode/skills/hae(依赖 ripgrep)
  • 探测到 → analyze 自动调用,简报多出"敏感信息 / 指纹 / 疑似弱点"三节,命中带 file:line
  • 没探测到 → 正则 + jsluice 照跑(端点提取不受影响),日志提示降级
  • 显式指定:python jss.py analyze --hae C:\path\to\hae_scan.py <目录> 或设 JSS_HAE

⚙️ 环境要求

组件 要求 说明
操作系统 Windows 10/11 二进制为 Windows 版;Linux/macOS 需自行替换 bin 下工具
Python ≥ 3.8 jss.py 纯标准库;waymore 需 PyYAML / termcolor / psutil / tldextract
Go / Node 不需要 katana、jsluice 均为静态编译二进制

已知环境坑:

  • waymore 国内网络超时:Wayback / CommonCrawl 为国外存档服务,偶发超时属正常,已落盘部分照用;设代理后可走通
  • 系统代理未启动报错:Windows 注册表死代理(ProxyBridge)导致,jss.py 已自动探测绕过;手动跑工具前置 NO_PROXY='*'
  • 换 Python 版本:整套流水线用 sys.executable 调子进程,哪个解释器启动就用哪个;新解释器需重装 4 个依赖
  • sourcemap 还原.map 在手时用 node(source-map 包)十行脚本即可还原原始目录,还原后重跑 analyze <还原目录>


❓ FAQ(常见问题)

Q:和 JSFinder / LinkFinder / Packer-Fuzzer 比,JSS 的定位是什么? A:它们是优秀的单点提取器——输入 JS 文件、输出端点/密钥。JSS 是全流程编排:收集(主动爬 + 被动存档 + 登录态抓包)→ 双引擎提取 → 规则引擎增强 → AI 简报 → 语义分析。单点工具解决"这个文件里有什么",JSS 解决"这个目标的攻击面是什么"。

Q:能分析微信小程序吗? A:能,而且是重点场景。用 unveilr / wuWxapkg 等工具反编译得到目录后,python jss.py analyze <目录> 直接分析:自动识别 app-service.js / app.json 特征、提取 appid、跳过图片字体等二进制,全程零网络请求。

Q:会不会把目标站爬挂 / 触发风控? A:防风控参数硬编码在默认值:全局 2 req/s、每主机 1 req/s、8 分钟预算到点即停、单域 150 页、下载串行 + 随机延迟 + 300 文件上限。passive / har / ingest / analyze 四条路径对目标站 0 请求。

Q:不装 hae skill 能用吗? A:能。HaESkill 是可选增强——未探测到就自动降级,正则 + jsluice 双引擎照常运行,端点提取完全不受影响。想装:npx skills add https://github.com/overspace-labs/HaESkill -g -y

Q:支持 Linux / macOS 吗? A:编排器 jss.py 是纯 Python 跨平台的;bin/ 下两个 exe 是 Windows 版,替换为对应平台的 katana / jsluice 二进制即可(jss.py 优先找 bin/ 目录)。

Q:AI 端需要什么? A:任何支持 skills 机制的 agent:Claude Code、ZCode 等;也可以直接把 SKILL.md 当操作手册喂给任意大模型。

Q:怎么还原 sourcemap 源码? A:analyze 会列出 JS 里的 .map 引用;.map 在手时用 node(source-map 包)十几行脚本即可还原原始目录,还原后重跑 analyze <还原目录> 产出多一个量级。详见 docs/csdn-article-zh.md 场景五的完整脚本。

Q:免费的吗? A:MIT 协议,完全免费开源。

⚠️ 免责声明

本项目仅用于已授权的渗透测试、SRC 漏洞挖掘与安全研究

  • 使用者必须对目标拥有合法测试授权,并遵守当地法律法规
  • collect / all 会对目标发送限速请求(2 req/s、8 分钟预算);其余子命令对目标站零请求
  • 流水线只做侦察不发包攻击;flows.json 及落盘响应体可能含 cookie/token,属敏感文件,对外输出必须脱敏
  • 作者不对任何滥用行为承担责任

🙏 致谢

JSS 是站在巨人肩膀上的编排层,感谢上游武器库:

工具 作者 用途 Stars
katana projectdiscovery 下一代爬取框架(主动收集) 17k+
waymore xnl-h4ck3r 7 大历史存档挖掘(被动收集) 2.7k+
jsluice BishopFox AST 端点/密钥提取引擎 1.9k+
HaESkill overspace-labs(EvilChen) HaE 规则集的 Agent Skill 封装(密钥/指纹/中文生态规则引擎) 40+

重编译 jsluice:go build -o bin/jsluice.exe ./cmd/jsluice(源码从 BishopFox/jsluice 获取)。


中文 · English

⭐ 如果 JSS 帮你挖到了洞,欢迎 star 支持!

工具做广度,AI 做深度。