课堂笔记-8月19日
课堂笔记-8月19日:WordPress 最新高危漏洞实战——路由混淆 + SQL 注入 → 未授权 RCE 的框架漏洞与调试
来源:
8_19/录音.txt| 日期:2026-08-19 | 主题:框架漏洞章节开启,围绕 WordPress 2026 年 7 月底曝出的 CVE-2026-63030 / CVE-2026-63017,从路由原理讲起,拆解"REST API 批量路由混淆 + SQL 注入 → 未授权 RCE"的完整攻击链,并现场演示源码安装、Xdebug 断点调试与嵌套 batch 绕过手法
〇、今日主线
今天是框架漏洞章节的第一课,讲师(欣老师)带我们走进 WordPress 核心框架漏洞。开篇先立起三个关键概念:API 路由(请求如何被分发到正确的处理类)、路由混淆(请求被错误分发从而绕过清洗)、以及 SQL 注入与 RCE 的边界(不是所有注入都能拿到代码执行)。随后课程重心放在两件事上:一是把 CVE-2026-63030 / CVE-2026-63017 这两个 7 月底刚曝出的 WordPress 预认证漏洞讲透——它们利用 REST API 批量请求(batch)的双层嵌套 + 数组错位绕过参数清洗,先打时间盲注,再提权到创建管理员并实现 RCE;二是现场动手做源码安装 + Xdebug 断点调试,一步步走完 17 步调试文档,亲眼看到"校验与执行身份错位"这一漏洞精髓。后半段老师分享了自己 8 天高强度调试此漏洞的经历,并引出 AI 辅助挖洞方法论(sub agent / agent team、目标固定路径开放、提示词复用挖同类漏洞),最后落到秋招简历与面试话术上。
一、框架漏洞章节开篇:WordPress 最新漏洞背景
上节课已基本讲完"微信绕过"的内容,今天起进入新章节——框架相关问题。讲师多次强调"咱们尽快进一下",希望抓紧课程进度。
1. 漏洞清单
重点聚焦 WordPress 系统 2026 年 7 月底曝出的两个漏洞:
| 漏洞编号 | 类型 | 关键点 |
|---|---|---|
| CVE-2026-63030 | 路由混淆(Route Confusion) | REST API 批量请求中对象写入错误的数组位置,请求被错误路由处理 |
| CVE-2026-63017 | SQL 注入 | 参数以字符串而非数组传入,被直接拼接到 SQL 语句 |
注:录音中另出现"CNE202663030""63137"等疑似转写变体,均指上面这两个漏洞。
2. 老师强调的背景认知
- WordPress 核心本身安全性极高:近 9 年几乎没有爆出高危漏洞,上一次严重漏洞还在 WordPress 4.6 版本时期。经常被讨论的"插件漏洞"不算数——插件并非官方开发,责任不在核心框架。
- 两个漏洞叠加危害呈指数级放大:本漏洞链条最危险之处是预认证(pre-auth)——攻击者无需任何认证,普通前台用户就能直接创建管理员账号,配合 SQL 注入与 RCE 构成完整攻击链,影响数百万个网站。
- 由于危害太大,WordPress 官方罕见地采取强制更新措施(正常情况下官方不强制更新),已更新的网站无法再被利用。
- 漏洞发现者成本极低:仅花费约 25 美元、6~10 小时完成利用,最终获得约 1~2 万美元漏洞奖金。
二、路由(Routing)核心概念——本课地基
老师特别强调:理解"路由"是前提,否则后续学习很难推进。在框架(如 ThinkPHP)中,路由明确配置"哪个 URL 由哪个类/函数处理"。
1. 什么是 API 路由
- 类比网络路由选路:API 路由决定哪个后端类来处理特定的 API 请求,如同为数据包选择正确的传输路径。
- 路由本质是前后端的请求-响应映射关系:前端发起特定格式的请求(如带
id参数),后端有对应的类/函数(如index/hello)处理。
2. 路由匹配的三条规则
| 规则 | 说明 | 反例 |
|---|---|---|
| 请求方法必须匹配 | GET 请求必须对应 GET 路由 | 请求是 POST、路由配成 GET,请求就"接不到" |
| 参数传递要符合路由定义 | 例:路由需通过 $id 接收参数 |
传参格式不符则无法正确接收 |
| 路径决定处理类 | 如 .../posts 路由由 PostController 处理 |
路径写错则路由到错误 handler |
典型访问形式如 site.com/index/hello。核心思想一句话:前端怎么请求,后端就要有对应的接收方式。
3. 路由混淆(Route Confusion)的定义
- 日常生活类比:把该寄给 A 的快递错发给了 B。
- 代码层面:本该由 A 类处理的 API 请求被错误路由到 B 类处理——这就是路由混淆。
- WordPress 漏洞中即存在这种路由错配:分类查询(category)的参数被错误传递给文章查询(post)。比如点外卖填了地址 A,餐却被送到了地址 B。
三、路由混淆漏洞深挖:参数错位与清洗绕过
1. 为什么能错位:接口参数差异
- 分类接口(category)不需要作者(author)参数,只需类名、类 ID 等信息;文章接口(post)才需要 author 字段。
- category 有 12 个预设参数,而
exclude/auto_exclude等参数不在预设表里。 - 因此:处理阶段故意用 category 字段(校验时查无此参数→直接跳过清洗),查询阶段切到 post 字段(真实执行)——像过安检出示 A 证件、实际操作偷偷换成 B 证件。
2. 两道"清洗函数"防线
WordPress 处理参数有两个检查环节(老师用"办业务看材料"比喻):
| 检查 | 作用 | 类比 |
|---|---|---|
| 参数是否完整 | 是否包含必要字段 | 工作人员先看你材料带齐没有 |
| 参数是否合法 | 字段值是否符合要求 | 再看材料是否符合规定 |
关键坑点:如果某个参数没有在该接口注册(如 author 之于 category),那么即使传了,系统也认为它不合法——但恰恰是"多带了一份不需要的材料"触发漏洞。
3. 参数类型转换:WordPress 的默认防御
- WordPress 防 SQL 注入的巧妙方式:把用户输入的字符串强制转为数字,恶意代码就被"净化"掉了。
- 例:提交
id=1这类参数时系统要求数组 + 元素为数字;传abc这类非数字值,会被rest_validate_integer直接拦截,返回 400 错误。 - 但当路由错位发生时:category 接口没注册的参数意外流转到 post 处理函数,而 post 函数里恰有对应字段,恶意代码就绕过清洗环节直接进入 SQL 查询。
- 老师点出本质:漏洞关键在"参数清洗机制与路由处理的脱节",随后用函数级调试演示这个"错位注入"。
四、SQL 注入与 RCE 的边界
1. 区分两个概念
| 概念 | 含义 | 难度 |
|---|---|---|
| SQL 注入 | 让用户输入拼进 SQL 语句,通常只能获取数据 | 相对容易 |
| RCE(远程代码执行) | 在服务器上执行代码 | 难得多,尤其 MySQL 环境 |
老师敏锐指出:漏洞报告中经常混淆这两个概念。在 MySQL 下想从注入升级到 RCE,门槛很高。
2. 通过 INTO OUTFILE 写 webshell 的三个严格条件
只有同时满足以下三条,才能用 INTO OUTFILE 实现文件写入:
| 条件 | 说明 | 实战现实 |
|---|---|---|
| 必须知道网站物理路径 | 写入文件的基础 | 常通过报错/配置泄露获得 |
| 数据库用户需 root 或 FILE 权限 | 普通账号没有 | 生产环境通常不给这种高危权限 |
secure_file_priv 参数必须完全为空 |
不是 None,而是彻底无值 |
该参数限制文件导出位置 |
老师强调的坑:注意
secure_file_priv的判定逻辑——"空值"和"None"是两个不同的概念,必须确认服务器配置中该参数完全未设置(未配置路径),才会放行文件导出。这是 SQL 注入靶场第七关的核心知识点,也是面试常考点。
3. 一句话木马示例
把查询结果导出到 Web 目录,写入 PHP 后门:
SELECT '<?php @eval($_POST["cmd"]);?>' INTO OUTFILE '/var/www/html/web.php'
- 导出路径受
secure_file_priv限制(若设了/var/www/html,就只能写该目录);即使有 root 权限也无法突破这个目录限制。 - 写入一句话木马后,即实现"间接 RCE"——本质仍是 RCE。
- WordPress 作为运行超 20 年的老牌系统,默认权限控制严格,普通用户权限即便存在注入也难以突破到 RCE。
4. 注入能拿到什么"有价值"的东西
- 通过 SQL 注入获取管理员密码基本没用——现代密码很难破解,除非是
123456这种弱口令。 - 真正有价值的是用户敏感信息,以及配合提权(如本漏洞中前台用户直接创建管理员)。
五、完整攻击链:未授权提权到 RCE
1. 漏洞三步走(老师给出的利用框架)
- 第一步(基础):搞清楚为什么参数会被清洗——WordPress 要求参数必须是数组或数字,而攻击者传的是字符串。
- 第二步:绕过限制,产生时间盲注。
- 第三步:把盲注升级为 RCE(远程代码执行)。
2. 时间盲注实战要点
- 通过参数提交触发
SLEEP,用时间延迟判断注入生效,而非布尔盲注。 - 示例逻辑:
substring(select username from wp_users ...),按 ASCII 码值判断(如"第一个字节是否大于 30"),成立则让服务器沉睡 0.5~2 秒。 - 调试时老师建议延迟设为 1 秒(0.5 秒太短易误判,2 秒太长拖慢调试)。
- 目标库表是开源可查的:文章列表查的是
wp_posts表。
3. 从盲注到 RCE:创建超级管理员 + 主题后门
真正的 RCE 是"曲线救国",步骤为:
- 时间盲注获取/验证数据(如
SELECT user_password FROM wp_users WHERE user_login=...)。 - 创建新管理员账号并登录后台(利用"校验与执行身份错位"的提权逻辑)。
- 利用 WordPress 主题上传功能,把含后门 PHP 文件的主题包上传到服务器。
- 系统解压主题包后,访问特定路径即可执行任意代码,例如:
http://target/wp-content/themes/vr/webshell.php
老师提醒:WordPress 后台一旦失守就非常危险——主题机制本质上允许直接上传可执行代码。
4. 两种利用方式的区别(share vs rc)
| 方式 | 适用场景 | 流程 |
|---|---|---|
| share 方式 | 已知管理员账号密码 | 系统自动登录后台,上传插件执行操作 |
| rc 方式 | 完全不知道原管理员信息 | 利用 rc 漏洞新建管理员账号,再上传插件 |
- 攻击脚本可长达 2000 多行,非常完善,不仅包含 RCE,还整合大量辅助命令。
- 漏洞利用链整体涉及 6 个环节、近 40 个函数调用(a1→b7 层层递进),复杂度较高,今天先不细讲。
- 老师提示:必须先理解 batch 绕过的两个版本,这是后续 RCE 的基础;很多人忽略这个前置知识导致后面卡壳。
六、WordPress 源码安装与调试环境搭建
1. 环境搭建步骤
- 把 WordPress 源码完整放到
wp目录下,环境即搭建完成。 - 安装 Xdebug 扩展:在宝塔面板的 PHP 扩展里找到 Xdebug 一键安装,无需手动配置;装完检查
phpinfo()确认 Xdebug 已加载。 - 检查本地 hosts 文件,确保域名正确指向
134服务器;访问出现 WordPress 页面即搭建成功。 - 安装注意事项:
wp-config-example.php需重命名为wp-config.php,且必须确保里面填写的数据库账号密码正确无误。
2. wp_posts 表结构(盲注的数据基础)
wp_posts 表存储网站所有文章核心数据,关键字段:
| 字段 | 作用 |
|---|---|
| 文章 ID | 唯一标识 |
| 作者 | 记录作者 |
| 发布时间 / 内容 / 标题 | 文章主体 |
| 文章状态 | 已发布 / 草稿等 |
| post_name | 相当于文章"身份证号",唯一标识 |
| 评论开关 / 密码保护 | 控制评论与文章可见性 |
3. WordPress 代码量认知
- 单个文件就 2000~5000 行,几个文件加起来超 1 万行,整个项目轻松几十万行。
- 这就是为什么人工审计极难发现深层漏洞,也是老师反复强调要借助 AI 辅助读码/挖洞的原因——比如该漏洞在 WordPress 6.9 系列长期潜伏,直到 6.9.49.25 才被 AI 发现。
七、为什么不能直接 POST 注入:参数清洗机制深度调试
这是本课最长的实操段落,也是理解整个漏洞的钥匙。核心结论先行:注入语句直接提交,在数据清洗阶段就会被拦截,根本到不了查询执行层("SQL 注入串永远到不了 get_items 和 wp_query 那一层")。
1. 两重校验机制
| 环节 | 函数/机制 | 说明 |
|---|---|---|
| 有效性验证 | validate_rest_args 等 |
检查参数是否在预定义字段列表中(如 id/username/password),传 abc 这种不存在字段直接被拦 |
| 格式/清洗校验 | 清洗函数(如 rest_prepare_...) |
要求参数必须是数组且元素为数字;数据清洗失败返回 false,抛出 400 |
老师用"快递安检"类比:外包装检查通过(有效值)≠ 内容物安全(无害值)——有效值 ≠ 无害值,双重验证缺一不可。
2. 类型检查是流程分水岭:数组 vs 字符串
- 代码先查
args.type:如果定义类型是数组、实际传入是字符串,系统会自动按空格/逗号拆分。 - 例如字符串
"select"会被拆成['s','e','l','e','c','t'],随后逐元素校验是否为数字,第一个元素 's' 类型不匹配 → 立即报错返回 400。 - 报错信息非常清晰:
rest invalidate param,会明确指出第 0 个参数不符合要求——因为接口要求所有参数必须是数字,而字符串被拆成数组后第一个元素显然不是数字。 - 关键坑:看到报错即可停止调试分析,不必继续往下走;参数校验失败时程序会"卡住"。
3. 参数映射规则(注入点成因)
- 虽然传的是
auto_exclude,WordPress 内部会自动映射成post__not_in使用(类似 auth→作者、email→邮箱的映射)。 - 参数最终如何进 SQL 是漏洞关键:
- 传数组 → 被强制转成数字(安全);
- 传字符串 → 直接拼接到
NOT IN语句中(← 注入点)。
- 老师总结:唯一可能的绕过方式需同时满足两个条件:① 成功避开参数清洗;② 直接传入字符串参数。
4. 调试方法论(老师反复强调)
- 调试工具必不可少(Xdebug),光靠肉眼无法跟踪复杂函数调用链。
- 调 REST API 时先定位 API 入口处理函数(VS Code
Ctrl+P找 api load),在 load 方法处打断点。 - 明确当前在调 API 接口,就去看后端处理文件(如
restapi.py),"你请求什么接口,自然就看对应的后端处理逻辑"。 - 关键断点位置:get_items 270 行(200/217 行也可)、query 执行处 2448 行、
do_query3111 行、wpdb 3117 行、set_query_parents1728 行、入口 436 行。 dispatch(分发)环节是分水岭:REST Request 组装完成后,把请求"派遣"给合适后端控制器;result为真才执行派发。- 选择性断点:代码会经过 20~30 个路由阶段,不必每步都打断;遇到不理解的逻辑(如数组错位),可跳到更外层检查点(如 1841 行)直观对比参数数量差异。
- 反复调试:老师自述调试了 40~50 次才完全搞懂;少于 20~30 次很难真正掌握成因,每个同学疑问点不同,必须亲自动手。
八、嵌套 Batch 绕过:从"无法注入"到"盲注"
1. 为什么不能直接用 batch 提交 GET
| 对象 | 限制 |
|---|---|
| Batch v1 接口 | 只接受 POST/PUT/PATCH/DELETE,不接受 GET |
| batch 内 request 字段 | 同样不支持 GET |
因此常规 GET 型注入无法直接进行。解决方案:把 GET 请求隐藏在 POST 请求的 body 里——因为 POST 的 body 是"透明"的(不做过滤),body 只要是对象(哪怕为空)即可通过验证。
2. 双层嵌套 batch("俄罗斯套娃")结构
- 正常:外层 batch 包含 3 个 API 请求。
- 特殊:其中一个 API 内部又嵌套了一层 batch,内层再带 SQL 请求。
- 为什么要两层:接口只收 POST 而 batch 默认 GET,所以外层用 POST 满足接口规范、内层 body 保持"透明"放 GET;两层 batch 比一层更能规避检测。
- 老师点明:不要写一个 batch,要写两个 batch——系统不接受 GET 请求,必须通过 category 清理数据并用 POST 处理。
3. 错位机制(本漏洞精髓)
调试中看到的典型现象:
- 请求(request)列表有 3 个元素(error / post / batch),而匹配结果(match / mesh)数组只有 2 个。
- 第一个 error 请求没进 mesh 循环直接
continue跳过 → 导致数组下标错位。 - 结果:
match[0]对应 batch,而request[0]是 post;本该处理 post 的 handler 被错误分配给了 batch。 - 这种错位层层传递:外层 batch 错位 → 内层 body 同样错位。
4. 用一句话概括漏洞(面试必说)
"校验和执行身份错位":阶段一用 category 的路由校验参数("查无此人"但校验通过);阶段二用错位的 batch 去执行 post 操作,处理的却是 category 传进来的参数。参数校验和实际执行的逻辑不匹配,导致本应被拦截的非法参数得以通过并执行。
老师强调:面试时必须主动说出"requests 和 match 的错位导致后面的 match 错误处理了前面的 request",否则面试官会怀疑你没真正掌握漏洞、进而追问细节。
九、AI 辅助挖洞方法论(本节延伸)
老师花较大篇幅分享 AI 辅助发现该漏洞的思路,本质是"目标固定、路径开放"。
1. AI agent 核心思想
- 国外作者用 AI 搜索技术解决了复杂的"环窗覆盖"数学难题,体现 AI agent 精髓:目标明确但路径开放——确定目标和结果,不干预具体实现路径("目标可验证、路径不可预测")。
- 应用到挖洞:只要明确开头(按 12345 步骤开始)和结果(6 小时内找到 flag 漏洞),中间具体操作并不重要。
- 大模型本身推理和探索能力已经足够强,无需依赖 scale 或 mcp 等工具,过度依赖反而限制发挥。
2. sub agent vs agent team
| 类型 | 通信能力 | 场景 |
|---|---|---|
| sub agent | 之间不能通信,各自完成后汇总给主 agent | 简单并行任务 |
| agent team | 成员可互相协作 | 案例中生成四个智能体协同挖洞 |
3. 对抗智能体的严谨流程
- 必须对每个发现的漏洞进行验证检查,否则会出现误报或"幻觉"(错误判断)。
- 研究不能因首次失败就终止,只要理论上存在可能,就多轮验证直到成功或超时(6 小时为限)。
- 方法完善性:① 禁止联网确保安全;② 漏洞必须反复验证;③ 避免陷入无效路径;④ 明确重点挖掘方向。
- 价值衡量标准:AI 框架能否超越普通客户端(如 Codex)的挖掘能力;成功条件量化为"找到未经验证状态的 RCE"这种可验证结果。
- 研究路径要灵活——不能因 AI"幻觉"在死胡同钻牛角尖,遇到阻塞及时切换方向。
4. 提示词技巧(可复用模板)
- 学习优秀提示词很重要:参考开源项目的提示词,用 DeepSeek 优化自己的提示词。
- 关键技巧:测试时即使不确定是否存在漏洞,也先告诉 AI"存在一个漏洞",这样 AI 会更积极地寻找。
- 挖洞约束:不能联网搜索历史漏洞——AI 会被已知漏洞带偏,必须从零开始分析代码;
flag文件是作者特意添加的测试标志,限制联网是为了确保 AI 真正展现从原理出发的挖掘能力。 - 复用模板:用同一个提示词模板,只需替换具体框架的代码部分,就能发现不同系统中的类似漏洞。有人用此法 6 小时发现漏洞,成本仅 25 美元,获奖金 1~2 万美元。
5. 多路径并行与状态共享
- 将搜索过程状态化:通过注册表或黑板机制记录当前进度;让不同 agent 共享状态信息;基于新增事实循环生成下一步行动。
- 讽刺现状:很多 AI agent 框架华而不实——机构使用是因概念在风口上(国企申项目、学校申课题),"噱头往往比实效更重要";但不要过早固化 AI 的工作流程。
十、学习观与时间投入(老师的经验分享)
- 老师自述 2026 年 8 月 11 日至 19 日连续 8 天调试该漏洞链,常熬夜到凌晨两三点;真正的难点在最后的 RCE 利用,前面的注入相对简单。
- 观点:投入时间的长短直接决定技术掌握的深度,没有捷径可走。学会用 AI 辅助读源码(把 WordPress 源码放本地,用 DeepSeek 系列逐问解读)。
- "看懂和能讲出来是两回事":需反复压缩整理(文档压缩了 5~6 次),直到完全吃透。
- 数学能力:在理工科是核心地位(金融量化、计算机);数学好的人转行计算机/金融非常轻松。数学学到"好"没有上限,但至少把大学数学(高数、线代、概率论)学好,对计算机学习帮助很大。
- 时间管理:利用晚上 8 点到 12 点黄金时间学习,保证 8.5 小时睡眠;重复学习价值高(寒假听一遍、暑假再听一遍,配合简历指导)。
- 行业认知:老师 2010 年基于爱好入行,早期行业不成熟进步慢;2017-2018 年国家提出"没有网络安全就没有国家安全"后行业快速发展。
附:行动清单
- 搭环境:按第七章步骤把 WordPress 源码部署到
wp目录,宝塔面板一键装好 Xdebug,改 hosts 指向 134 服务器,确保能打开 WordPress 页面。 - 跑通 17 步调试文档:用 Xdebug 从 436 行入口开始,跟着文档把"为什么不能直接 POST 注入 → 参数清洗拦截 → 双层 batch 绕过 → 数组错位"完整走一遍,至少重复调试到 20 次以上。
- 复现时间盲注:在
wp_posts相关查询上构造SLEEP(1)的时间盲注 payload,验证 ASCII 逐字节判断的盲注过程,并截图记录执行到do_query(3111 行)/ wpdb(3117 行)的证据。 - 梳理两条利用链(share / rc):分别整理"已知口令"和"新建管理员"两条到 RCE 的路径,重点弄懂"校验与执行身份错位"这句话如何用自己的话讲清楚。
- 把 AI 挖洞方法落一遍:用统一提示词模板 + 替换框架代码的方式,尝试在本地搭的 WordPress(或一个开源 CMS)上跑一次受限 AI 分析,练习"先声明存在漏洞 + 禁联网 + 验证每个发现"的流程。
- 准备面试话术:背熟漏洞编号、两处错位位置(1749/1841 等)、
post__not_in字符串拼接注入点,以及"requests 和 match 错位"这句关键表述,能用 3 分钟讲完整条攻击链。
附:简历与就业要点
- 秋招节奏:9 月中旬大厂开始招聘,竞争激烈;真正关键的投递期在 10 月到 11 月,但 9 月也要开始陆续投递,不能放松。焦虑无用,早准备即可。
- 把"最新漏洞"写进简历是加分项:7 月底的 WordPress 高危漏洞极具含金量,大厂 HR 会重点关注这类主流漏洞,能直接体现"紧跟技术前沿"。前提是必须真正搞懂,否则面试官一问就露馅。
- 面试展示方法:不仅要提漏洞编号,还要展示深入研究的过程——阅读原作者分析文章、理解 AI 如何挖掘该漏洞,从而自然带出你在 AI 渗透领域的探索,形成差异化优势;对比那些还在讲七八年前老漏洞的候选人,对前沿技术的持续追踪会让 HR 眼前一亮。
- 简历撰写要素:项目要含 AI 辅助 + 量化等要素;老师之前已点评过部分同学的简历优劣,后续会继续指导。
- 返校提醒:学校要求 29 号返校,党员/班干部必须按要求回校办理手续,否则可能影响毕业证或受处分,别因小失大。
- 数学打底:想往金融量化/计算机走,大学数学(高数、线代、概率论)学扎实是"转行如吃饭"的基础,学无止境。
浙公网安备 33010602011771号