bfs-clicker获取动态加载的js-Ai渗透测试前置"

admin 2026-10-17 02:57:16 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

bfs-clicker 获取动态加载的js-Ai渗透测试前置

Lior1969
Lior1969

Moonlight安全

2026年8月26日 19:18
北京

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

让 Playwright 开着真浏览器,把「点一下按钮才冒出来的接口」一个一个扒出来。

PlaywrightBFS / DFS断点续跑跳过付款/授权Burp 节点全览图

1. 做安全测试,第一个卡住的往往不是挖洞

而是「这个系统到底有哪些接口」。我们都是从接口摸起:先拿到一份尽量全的清单,后面才好铺开。

问题是,后台这种东西——尤其现在的 SPA 控制台——大量接口根本不在页面源码里。它们是你点一下按钮才发出去的:菜单展开、弹窗确认、点某一行,才带出来一个请求。

试过的几条路,都不太顺:

  • 静态解析

,读 HTML 和 JS,只能拿到写死在代码里的 URL,运行时才拼出来的它拿不到。
* 被动爬虫

,像 katana 这种,翻 JS 里的 URL,但「点了才触发」的那批同样漏。
* 手动点

,最靠谱,也最折磨。几百个模块一个个点,点完手都酸,还容易漏。

绕了半圈发现,缺的不是解析能力,是「真的去用一遍」的能力。那就干脆让浏览器替我们点。

2. 于是有了 bfs-clicker

它就是一个很朴素的思路:用 Playwright 开真浏览器,从入口页出发,自动点遍所有能点的控件。能往下钻就钻进去,钻到底就把标签页关掉、往上回一步、点下一个兄弟按钮。

顺手把两个常见麻烦也处理了:

  • 遇到协议弹窗,它自己滚到底、勾选、点同意、关掉,不用你管。
  • 遇到「付款、支付、授权、开通」这种按钮,它躲着走——只记下来标个橙,不真点。这是安全测试的底线,不是我求稳,是真不能点。

流量让它走 Burp 代理(默认 127.0.0.1:8080),全程能看历史,回头想复盘哪条路径都找得到。

3. 几个我自己觉得还算关键的处理

写的时候踩了些坑,有几个点后来觉得挺值,拿出来说下。

1.每个状态开一个标签页

探索子节点时,在新标签页里从根重放路径到达,父标签页不动。回退就零成本——页面没更深的就关,子页面都耗尽就把上一级也关掉。

2.能直达就直接去

控件 href 是真实 URL 时,直接 goto,不重新载根页再点一遍路径。控制台动辄上百个模块链接,这一下省掉上百次根页重载。

3.指纹别只看 URL

状态用 md5(URL+标题+交互面描述)。SPA 页面经常有个数字在轮询,光看 URL 会判定成新状态,不停炸;把「能点什么」算进去就没这问题。

4.危险的干脆不点

skipTextPatterns 把付款、授权、开通这类词全放进去,命中就只记录、不点击。宁可少一个接口,也不能误触一个开通按钮。

遍历顺序我留了个开关 config.order:bfs 一层层铺开,先把 URL 地图的覆盖做全(默认这个);dfs 一个功能往深挖。想要「全」选 BFS,想「深」选 DFS。

4. 它长什么样

bfs-clicker 工作流

是

否

npm run crawl

config.js / index.js 加载配置

login.js 手动登录存 session

根标签页 startUrl

BFS 队列/DFS 栈 标签页即状态

逐控件点击

可交互?

href 直达 或 新标签重放路径

非交互 忽略

协议弹窗 滚到底勾选+同意

付款/授权 只记不点

流量捕获 traffic.jsonl + har

checkpoint 持久化 断点续跑

稳定后截图 states/*.png

tree.json + checkpoint.json

overview.html 节点全览图

5. 能干的事

能力 说明
真浏览器点击 真实点所有可交互元素,动态路由 / 接口(菜单、按钮、弹窗触发)能抓到
BFS / DFS order 一键切:逐层全览 or 深度优先
标签页即状态 父标签不导航,回退零成本;子页面耗尽自动关
URL 级全局去重 子节点 URL 撞上任何已访问节点 → 判走错路,只记一条边;重复路径写进 backEdges
状态指纹去重 SPA 轮询数字不会引起状态爆炸
协议弹窗自动同意 滚到底 → 勾选 → 点同意 → 确认关
断点续跑 每状态写 checkpoint.json,随时 Ctrl+C,npm run resume 接着跑
流量捕获 + 去重 traffic.jsonl + traffic.har;去重键 = 归一化 URL + 状态 + POST body 指纹

6. 用起来,五步

装

npm install

登录一次,存下会话

npm run login

会开一个有头浏览器让你登录,登录成功自动存到 output/session.json。判断逻辑也是通用的:URL 不再是登录页 + 有会话 cookie(auth/session/token/uid/jwt 这类)。想更精确,加个 loginLoggedInUrlContains 特征串。

开爬

npm run crawl      # 默认 BFS,maxStates=500
npm run resume     # 断点续跑
npm run demo       # 本地演示站冒烟(免登录、无头、不走代理)

不想改配置文件?用环境变量

MAX_STATES=20 npm run crawl   # 限状态总数,先小范围试点
MAX_DEPTH=3  npm run crawl     # 限最大深度
RESUME=1     npm run crawl     # 等价于 resume

7. 换个目标,只动三行

代码没有绑死任何站点。换目标改 config.json:

项 干什么
startUrl 入口 URL。控制台太大,建议指到具体产品,不然爬不动
includeUrlPattern 正则,只有匹配的子状态才继续钻,防爬野
loginUrl 登录页 URL,登录一次复用会话

常用的还有:

项 默认 说明
order bfs bfs 铺开 / dfs 深挖
maxDepth / maxStates 4 / 500 深度 / 状态上限(设为 0 不限)
useProxy true 走 Burp 127.0.0.1:8080;demo 自动关
skipTextPatterns 见下 只记不点的那些词(付款/授权/开通)
dedupeByUrl true URL 撞上已访问节点 → 判走错路,只记边
rediscoverOnReturn true 回父标签再采一遍控件,补动态新增的

关于跳过词:默认里有「付款、支付、购买、下单、续费、开通、升级」和英文的 payment / purchase / checkout / authorize。命中的按钮不会点,但会进 tree.json 标成 skipped: true,截图也存。哪天你想让它真点,就把对应词删了再跑。

8. 断点续跑,长爬不再虚

每探索一个状态就写 output/checkpoint.json,visited 指纹、全部状态、当前 DFS 栈(或 BFS 队列)都记着。中途 Ctrl+C 没关系,npm run resume 从上次位置继续,已经耗尽的状态不会重跑。

中间浏览器崩了也没事,有自愈护盾:崩了自动重启浏览器接着跑。长爬取最怕的就是跑一半全没,这点算是给兜底了。

9. 它留下了什么

文件 是什么
tree.json 嵌套状态树:URL / 标题 / 点击路径 / 控件清单 / 子节点,外加 backEdges 重复路径
overview.html 节点全览图:可折叠状态树 + 截图 + 跳过/失败标记 + 重复路径表
states/*.png 每个新状态一张截图
traffic.jsonl 捕获的请求流量
traffic.har HAR 格式,能导进 Burp 或其他工具

所以它的产出其实分三层:

  • 接口层

:traffic.jsonl 把被点出来的请求全记下来,喂给后面的信息提取 / 攻击面汇总。
* 结构层

:tree.json 是一张能点的地图,动态路由(菜单、按钮触发的)都在里面。
* 可视化层

:overview.html 一眼看出哪些节点回了老路(重复路径表)、哪些按钮被跳过(橙)。

10. 先说清楚:只做授权测试

这个工具会真点页面上的控件。只用于你拥有、或拿到明确授权的目标。用在没授权的系统上,不管是被人肉点还是被脚本点,都是违规。

  • 跳过付款 / 授权类

:skipTextPatterns 默认覆盖,只记不点,防误触越权改动。
* 流量走 Burp

:useProxy:true 时所有请求经 127.0.0.1:8080,进 HTTP History,随时复盘。
* 它发的是页面自身的请求

:是「点按钮带出来的正常业务流量」,不是主动构造的攻击 payload。

11. 适合谁用

场景 值不值 备注
Web 控制台 / SPA 后台摸底 ★★★★★ 主战场,动态路由杀手
授权红队 / 渗透前侦察 ★★★★ 快速把攻击面摊开
配合 Burp 抓全量流量 ★★★★ 代理一挂,全程可见
纯静态页 / 不用登录的站 ★★★ 能用,但优势不大

12. 收个尾

配上 Burp 和流量捕获,它给你的就是一份带交互地图的接口清单——该在源码里的、该在 JS 里的、该手动点的,最后都在这张图上。

一句话:把「点按钮」交给机器,把「判断」留给你自己。

https://github.com/8eeth0ven/bfs-clicker

感谢点个star


bfs-clicker获取动态加载的js-Ai渗透测试前置" 网络安全文章

bfs-clicker获取动态加载的js-Ai渗透测试前置"

bfs-clicker是基于Playwright的自动化工具,解决SPA动态接口发现难题。它通过BFS或DFS自动遍历控件,以标签页隔离实现零成本回退,用状态指纹避免轮询爆炸,自动处理弹窗并跳过付款操作。配合Burp捕获流量并输出接口清单与节点图,建议在授权渗透前期使用以快速摸清攻击面。
#影子经纪人:当美国国家安全局的黑客工具箱被搬空" 网络安全文章

#影子经纪人:当美国国家安全局的黑客工具箱被搬空"

本文揭露了NSA黑客工具库ANT目录被影子经纪人泄露事件,包括针对防火墙、iPhone及Windows系统的漏洞利用工具如EternalBlue。关键发现是NSA长期囤积零日漏洞而非修复,且泄露工具改变了事件响应规则,如手术式篡改日志。建议安全团队关注日志完整性及漏洞补丁,并警惕供应链攻击风险。
评论:0   参与:  0