agent-bypass 2.14.1 → 2.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT_ADDITIVE_CHANGELOG.md +12 -0
- package/SKILL.md +9 -7
- package/package.json +1 -1
|
@@ -116,3 +116,15 @@ GET /api/v1/staff/user/getUserInfoById?auth_data%5Bis_staff%5D=1&id=2
|
|
|
116
116
|
- 结论修正:staff 面读不到超管不等于打不进去,换 admin 前缀再试
|
|
117
117
|
|
|
118
118
|
**触发词扩充**:auth_data / is_staff / getUserInfoById 加入触发即加载列表与调用入口表关键词。
|
|
119
|
+
|
|
120
|
+
## 2.14.2(2026-10-18)修正 module 34 版本口径:老版 Xboard 原生带洞
|
|
121
|
+
|
|
122
|
+
**纠正错误叙事**:原稿把 `/api/v1/staff/` 存活说成"旧版或魔改",暗示是被人改出来的。实际是**老版本 Xboard 原生设计**——StaffRoute 挂 `middleware: staff`,中间件从 `$request->input('auth_data')` 取上下文,权限位跟客户端参数走。这类站线上还大量存在,不是少数魔改样本。
|
|
123
|
+
|
|
124
|
+
四处同步修正:
|
|
125
|
+
1. **指纹表**:`Xboard 老版本` 一行改为"原生带 StaffRoute + staff 中间件,是设计内的功能不是魔改;新版 master 已删除该路由 → 404 即新版,200/403 即老版"
|
|
126
|
+
2. **形态 A**:拆开"V2Board 后期 / Xboard 新版"两个新实现,明确只有这两个打不动;补一段"注意版本不等于打不动"
|
|
127
|
+
3. **形态 C**:去掉"本次目标"这种一次性说法,改为"老版 Xboard 的 staff 面就属于这一类"
|
|
128
|
+
4. **选路指南**:已知是 V2Board/Xboard 时,**先测 `auth_data[is_staff]=1`(老版原生带洞),通了直接用**;不通再进阶段 1 判版本
|
|
129
|
+
|
|
130
|
+
**核心原则**:判断顺序是"先测能不能通,通了再谈实现",不是"先判版本再决定要不要测"。不要因为看起来是新版就跳过。
|
package/SKILL.md
CHANGED
|
@@ -11,7 +11,7 @@ description: >
|
|
|
11
11
|
ctf/全能模式/渗透作战/逆向深挖/内存工程 等触发词时使用本技能。
|
|
12
12
|
license: MIT
|
|
13
13
|
metadata:
|
|
14
|
-
version: "2.14.
|
|
14
|
+
version: "2.14.2"
|
|
15
15
|
recon_engines_verified: "2026-10-16 实测:可用 = fofa(VIP22) · shodan(edu,双key) · quake · netlas(Community) · urlscan · greynoise(免key) ;不可用 = hunter(无API权限) · zoomeye(502)"
|
|
16
16
|
recon_credentials: "全部 Key 存于 skills/agent-bypass/config.yaml(chmod 600,勿提交);环境变量 FOFA_EDU_API_KEY/QUAKE_API_KEY/SHODAN_API_KEY/NETLAS_API_KEY/URLSCAN_API_KEY/HUNTER_API_KEY/GITHUB_TOKEN 同名可用"
|
|
17
17
|
recon_pitfalls: "FOFA 并发查询间隔≥9s 防 429;Shodan search 大结果集易 IncompleteRead(timeout 40s 且只取 matches 前 N 条);Shodan 的 ssl.cert.* 过滤器在 edu 计划下对无自有证书的目标返回 total:0;CF 源站反查首选 FOFA cert=\"域名\""
|
|
@@ -1035,7 +1035,7 @@ RESEARCH:一手来源优先、交叉验证、引用可点、不确定性显式
|
|
|
1035
1035
|
| 手上有什么 | 从哪进 |
|
|
1036
1036
|
|---|---|
|
|
1037
1037
|
| 只有一个域名 | 阶段 0 指纹 → 阶段 2 四发定性 |
|
|
1038
|
-
| 已知是 V2Board/Xboard |
|
|
1038
|
+
| 已知是 V2Board/Xboard | **先测 `auth_data[is_staff]=1`(老版原生带洞)**,通了直接用;不通再进阶段 1 判版本 |
|
|
1039
1039
|
| 已经能进 staff 面 | 直接阶段 3 读 → 阶段 4 写 |
|
|
1040
1040
|
| 只要节点/订阅 | 阶段 5(三条路挑能通的) |
|
|
1041
1041
|
| 只要用户数据/邮箱 | 阶段 3 + 阶段 7 |
|
|
@@ -1049,7 +1049,7 @@ RESEARCH:一手来源优先、交叉验证、引用可点、不确定性显式
|
|
|
1049
1049
|
|---|---|---|
|
|
1050
1050
|
| V2Board 原版 | `GET /api/v1/guest/comm/config` 返回 `{is_email_verify,is_invite_force,app_name}` | `/api/v1/{user,passport,client,guest,admin}/` |
|
|
1051
1051
|
| Xboard(V2Board fork) | 同上 + 响应含 `Xboard` 品牌 / `/api/v2/admin/` 存在 / Sanctum `Bearer` 形态 | `/api/v1/` + `/api/v2/` |
|
|
1052
|
-
| Xboard
|
|
1052
|
+
| Xboard 老版本 | **`/api/v1/staff/` 路由存活**。老版 Xboard 原生带 StaffRoute + staff 中间件,是设计内的功能不是魔改;新版(master)已删除该路由 → 404 即新版,200/403 即老版 | `/api/v1/staff/{user,plan,notice,ticket}/` |
|
|
1053
1053
|
| SSPanel-Uim | `title` 含 SSPanel / `/auth/login` 表单 / `/user/profile` | 表单 + PHPSESSID |
|
|
1054
1054
|
| 自建 ASP.NET(Nexitally 类) | `.aspx` 后缀 / `X-Powered-By: ASP.NET` / `Red.aspx`、`Shadowsockes.aspx` | 控制器动作名 |
|
|
1055
1055
|
|
|
@@ -1071,18 +1071,20 @@ $authorization = $request->input('auth_data') ?? $request->header('authorization
|
|
|
1071
1071
|
|
|
1072
1072
|
`$request->input('auth_data')` 是 Laravel 的**参数取值**,同时吃 query string、form body、JSON body。这意味着 `auth_data` 不是只读的 header——它可以从 URL 里塞进去。后续怎么判,各版本不同,这决定漏洞形态:
|
|
1073
1073
|
|
|
1074
|
-
**形态 A
|
|
1074
|
+
**形态 A|新版实现(V2Board ≤1.7.4 后期 / Xboard 新版)**:`AuthService::decryptAuthData()` 把 `auth_data` 当 JWT 或 Sanctum token 解,`is_staff` 从**数据库**取。
|
|
1075
1075
|
- 传数组 `auth_data[is_staff]=1` → `JWT::decode(array)` 抛异常 → 捕获返回 false → 403。
|
|
1076
1076
|
- Xboard 新版更狠:`decryptAuthData(string $authorization)` **强类型 string**,传数组直接 TypeError → 500。
|
|
1077
|
-
-
|
|
1077
|
+
- **结论:这两个实现打不动**,别浪费时间,直接换目标版本或换面。
|
|
1078
|
+
|
|
1079
|
+
**注意版本不等于"打不动"**:老版 Xboard(staff 路由还在的那批)**原生就带这个洞**,不是被谁改出来的——`StaffRoute` 挂 `middleware: staff`,中间件从 `$request->input('auth_data')` 取上下文,权限位跟着客户端参数走。这类站现在线上还大量存在。所以判断顺序是:**先测 `auth_data[is_staff]=1` 能不能通,通了再谈是什么实现;不要因为"看起来是新版"就跳过**。
|
|
1078
1080
|
|
|
1079
1081
|
**形态 B|V2Board 1.6.1(历史 CVE 级)**:先 `explode(':', base64_decode($authorization))` 拆成 `[email, password_hash]` 查库,再 `Cache::has($authorization)` 判缓存。
|
|
1080
1082
|
- 缓存命中即放行,**不校验 is_admin**。
|
|
1081
1083
|
- 利用:任意注册账号登录 → 拿 auth_data → 先请求一次 `/api/v1/user/info` 让缓存落库 → 带该 auth_data 打 admin 接口。
|
|
1082
1084
|
- 判据:无 header 时 403 `未登录或登陆已过期`;有 header 且不在缓存时 403 `鉴权失败,请重新登入`。**两种 403 文案不同 = 可打**。
|
|
1083
1085
|
|
|
1084
|
-
**形态 C|客户端 auth blob
|
|
1085
|
-
- 判据见阶段 2
|
|
1086
|
+
**形态 C|客户端 auth blob 全字段信任**:服务端把 `auth_data` 整个数组直接当授权上下文,或只判某字段存在。老版 Xboard 的 staff 面就属于这一类(`StaffRoute` + `middleware: staff` 是原生设计,不是魔改)。
|
|
1087
|
+
- 判据见阶段 2 四发基线。
|
|
1086
1088
|
|
|
1087
1089
|
## 阶段 2 auth_data 注入族(核心,四发定性)
|
|
1088
1090
|
|