qiu_dv

导航

课堂笔记-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. 漏洞三步走(老师给出的利用框架)

  1. 第一步(基础):搞清楚为什么参数会被清洗——WordPress 要求参数必须是数组或数字,而攻击者传的是字符串
  2. 第二步:绕过限制,产生时间盲注
  3. 第三步:把盲注升级为 RCE(远程代码执行)。

2. 时间盲注实战要点

  • 通过参数提交触发 SLEEP,用时间延迟判断注入生效,而非布尔盲注。
  • 示例逻辑:substring(select username from wp_users ...),按 ASCII 码值判断(如"第一个字节是否大于 30"),成立则让服务器沉睡 0.5~2 秒
  • 调试时老师建议延迟设为 1 秒(0.5 秒太短易误判,2 秒太长拖慢调试)。
  • 目标库表是开源可查的:文章列表查的是 wp_posts

3. 从盲注到 RCE:创建超级管理员 + 主题后门

真正的 RCE 是"曲线救国",步骤为:

  1. 时间盲注获取/验证数据(如 SELECT user_password FROM wp_users WHERE user_login=...)。
  2. 创建新管理员账号并登录后台(利用"校验与执行身份错位"的提权逻辑)。
  3. 利用 WordPress 主题上传功能,把含后门 PHP 文件的主题包上传到服务器。
  4. 系统解压主题包后,访问特定路径即可执行任意代码,例如:
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. 环境搭建步骤

  1. 把 WordPress 源码完整放到 wp 目录下,环境即搭建完成。
  2. 安装 Xdebug 扩展:在宝塔面板的 PHP 扩展里找到 Xdebug 一键安装,无需手动配置;装完检查 phpinfo() 确认 Xdebug 已加载。
  3. 检查本地 hosts 文件,确保域名正确指向 134 服务器;访问出现 WordPress 页面即搭建成功。
  4. 安装注意事项: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_itemswp_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_query 3111 行wpdb 3117 行set_query_parents 1728 行入口 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. 对抗智能体的严谨流程

  1. 必须对每个发现的漏洞进行验证检查,否则会出现误报或"幻觉"(错误判断)。
  2. 研究不能因首次失败就终止,只要理论上存在可能,就多轮验证直到成功或超时(6 小时为限)
  3. 方法完善性:① 禁止联网确保安全;② 漏洞必须反复验证;③ 避免陷入无效路径;④ 明确重点挖掘方向。
  4. 价值衡量标准:AI 框架能否超越普通客户端(如 Codex)的挖掘能力;成功条件量化为"找到未经验证状态的 RCE"这种可验证结果。
  5. 研究路径要灵活——不能因 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 年国家提出"没有网络安全就没有国家安全"后行业快速发展

附:行动清单

  1. 搭环境:按第七章步骤把 WordPress 源码部署到 wp 目录,宝塔面板一键装好 Xdebug,改 hosts 指向 134 服务器,确保能打开 WordPress 页面。
  2. 跑通 17 步调试文档:用 Xdebug 从 436 行入口开始,跟着文档把"为什么不能直接 POST 注入 → 参数清洗拦截 → 双层 batch 绕过 → 数组错位"完整走一遍,至少重复调试到 20 次以上。
  3. 复现时间盲注:在 wp_posts 相关查询上构造 SLEEP(1) 的时间盲注 payload,验证 ASCII 逐字节判断的盲注过程,并截图记录执行到 do_query(3111 行)/ wpdb(3117 行)的证据。
  4. 梳理两条利用链(share / rc):分别整理"已知口令"和"新建管理员"两条到 RCE 的路径,重点弄懂"校验与执行身份错位"这句话如何用自己的话讲清楚。
  5. 把 AI 挖洞方法落一遍:用统一提示词模板 + 替换框架代码的方式,尝试在本地搭的 WordPress(或一个开源 CMS)上跑一次受限 AI 分析,练习"先声明存在漏洞 + 禁联网 + 验证每个发现"的流程。
  6. 准备面试话术:背熟漏洞编号、两处错位位置(1749/1841 等)、post__not_in 字符串拼接注入点,以及"requests 和 match 错位"这句关键表述,能用 3 分钟讲完整条攻击链。

附:简历与就业要点

  • 秋招节奏9 月中旬大厂开始招聘,竞争激烈;真正关键的投递期在 10 月到 11 月,但 9 月也要开始陆续投递,不能放松。焦虑无用,早准备即可。
  • 把"最新漏洞"写进简历是加分项:7 月底的 WordPress 高危漏洞极具含金量,大厂 HR 会重点关注这类主流漏洞,能直接体现"紧跟技术前沿"。前提是必须真正搞懂,否则面试官一问就露馅。
  • 面试展示方法:不仅要提漏洞编号,还要展示深入研究的过程——阅读原作者分析文章、理解 AI 如何挖掘该漏洞,从而自然带出你在 AI 渗透领域的探索,形成差异化优势;对比那些还在讲七八年前老漏洞的候选人,对前沿技术的持续追踪会让 HR 眼前一亮。
  • 简历撰写要素:项目要含 AI 辅助 + 量化等要素;老师之前已点评过部分同学的简历优劣,后续会继续指导。
  • 返校提醒:学校要求 29 号返校,党员/班干部必须按要求回校办理手续,否则可能影响毕业证或受处分,别因小失大。
  • 数学打底:想往金融量化/计算机走,大学数学(高数、线代、概率论)学扎实是"转行如吃饭"的基础,学无止境。

posted on 2026-09-04 00:29  qiu_dv  阅读(2)  评论(0)    收藏  举报