cy3erm/driftjs

GitHub: cy3erm/driftjs

driftjs 是一款针对网站 JavaScript 的安全侦察工具,通过差异对比和历史存档分析,帮助漏洞赏金猎人高效发现端点、密钥及隐藏攻击面。

Stars: 0 | Forks: 0

# driftjs 将目标的 JavaScript 拆解以进行侦察,并记录上次的结果,从而只向你展示新增的内容。Endpoints、secrets、有趣的 params、DOM XSS sinks、source maps,以及那些已从当前构建中删除但仍存在于旧存档 JS 中的 routes。 这个想法源于每个 hunter 都会遇到的一个简单问题:JS 文件是真正攻击面隐藏的地方(API routes、隐藏 params、keys),但是每次网站发布新版本时都要手动重新阅读它们是非常痛苦的。因此 driftjs 会对结果进行快照并执行 diff。首次运行是 baseline。之后的每次运行都会告诉你发生了什么变化,而这些通常就是尚未经过测试的内容。 ``` $ driftjs https://target.com [!] 1 SECRET(s) in JS: ! Stripe Live Key: sk_liv...abcd (36 chars) [*] 4 interesting endpoint(s): > /api/v1/admin/users?debug&redirect > /graphql > /internal/config [*] interesting param(s): debug, redirect [*] DOM XSS sink(s) present: innerHTML, eval, dangerouslySetInnerHTML [*] 1 source map(s) referenced (original source may be recoverable): ~ app.min.js.map [+] 2 NEW endpoint(s) since last run: + /api/v2/internal/transfer + /api/v1/payout ``` ## 它能提取什么 - **Endpoints 和路径** —— 提取自 fetch/axios/XHR 调用和字符串字面量,并对 ID 和 hashes 进行规范化处理,因此 `/users/1` 和 `/users/2` 会被视为同一个 route(保持 diff 结果清晰) - **Secrets** —— AWS、Google、Firebase、Stripe、Algolia、Mapbox、Sentry、Slack、GitHub、GitLab、Heroku、Twilio、SendGrid、Square、Shopify、npm、JWTs、私钥等 - **Cloud assets** —— S3 buckets、GCS buckets、Azure blobs、DigitalOcean Spaces、Firebase Storage(值得检查是否存在公开/错误配置的访问权限) - **重要信号** —— SSRF/cloud-metadata 目标 (`169.254.169.254`)、硬编码的 Bearer/Basic auth、`localStorage` token 访问、GraphQL introspection、debug flags - **有趣的 params** —— 值得进行 fuzzing 的参数:`redirect`、`url`、`debug`、`admin`、`token`、`callback` 等(open-redirect / SSRF / IDOR 信号) - **有趣的 endpoints** —— `/admin`、`/internal`、`/graphql`、`/swagger`、`/api-docs`、`/actuator`、api 版本以及其他高价值路径 - **DOM XSS sinks** —— `innerHTML`、`eval`、`document.write`、`dangerouslySetInnerHTML` 及其相关项 - **Source maps** —— 标记 `sourceMappingURL` 引用,因为 `.map` 文件可能会直接向你提供原始源代码和注释 - **Ghost endpoints** (`--wayback`) —— 从 Wayback Machine 提取存档的 JS,并找出存在于旧版本但已从当前版本中消失的 routes。开发者通常会移除 UI 按钮,但保留 endpoint。 并且它会**随着时间推移对所有内容执行 diff** —— 包括自上次运行以来新增的 endpoints、secrets 和 params。 ## 运行方式 仅支持 Python 3.10+,无外部依赖。 ``` pipx install git+https://github.com/cy3erm/driftjs driftjs https://target.com ``` 或者克隆并运行: ``` git clone https://github.com/cy3erm/driftjs cd driftjs python3 -m driftjs https://target.com ``` 选项: ``` driftjs https://target.com --wayback # also surface deleted/archived endpoints driftjs https://target.com --json # JSON output, for piping into other tools driftjs https://target.com --wordlist out.txt # dump paths+params as a fuzzing wordlist driftjs https://target.com --probe # ACTIVE: check which endpoints are live driftjs https://target.com/app.js # a single JS bundle driftjs --local app.js # a local file ``` `--probe` 是唯一发送网络请求的部分。它会检查哪些已发现的 endpoints(以及使用 `--wayback` 时,哪些被删除的 ghost endpoints)能够真正响应,这样即使某个 route 已从 UI 中移除但仍返回 200,也会被标记为高价值目标。该功能默认关闭,需主动开启,具有速率限制,仅使用 HEAD/GET 请求(绝不使用破坏性方法),并且它只会触碰目标自身的 host 以及任何你通过 `--scope` 明确添加的 host。任何超出范围的都会被跳过,不会被探测。 ## 底线所在 阅读和分析 JavaScript 是一种被动行为 —— 就像浏览器在每次加载页面时所做的那样,因此收集这些信息不需要特殊访问权限。唯一的主动功能是 `--probe`,并且它的设计初衷是让你能够控制范围:它拒绝向任何非目标 host 或未通过 `--scope` 明确加入白名单的 host 发送请求。请仅在你获得授权测试的项目和资产上运行探测(以及进行任何形式的挖掘)。 ## 添加检测规则 Secret 模式位于 `driftjs/secrets.py` 中,有趣的 params/paths 和 XSS sinks 位于 `driftjs/analyze.py` 中。每一个都是简明直观的条目。项目包含测试套件 (`python -m pytest`),用于锁定提取和过滤行为 —— 在提交更改之前请先运行测试。 ## 许可证 MIT
标签:Blue Team, CMS安全, Docker容器, JavaScript, StruQ, 安全助手, 安全规则引擎, 实时处理, 攻击面发现, 敏感信息扫描