阅读时间:约 12 分钟 · 适合:安全工程师、建站公司技术、CMS 采购技术评审
导读: yxtcmf6.1 基于 ThinkPHP 3.2.3,适合练审计:先懂框架洞,再搜关键词,再自动扫 + 人工验证。元舟 PivArk 技术栈为 PHP 8.2 + 现代路由与权限;采购老 TP CMS 时,务必问清 框架版本是否仍维护、是否跟上游安全补丁。下文保留原文审计脉络。
前言
yxtcmf6.1 是一个基于 thinkphp3.2.3 的 CMS,19 年 3 月发布,用来练习代码审计是个不错的选择。
审计思路(可复用到其他 TP CMS)
- 了解 MVC 文件结构 与路由(如
index.php/User/Login/index→UserController.class.php的index()) - 单独搭建 TP 3.2.3,掌握已知 SQL 注入等框架洞
- Seay 全局搜索 危险函数与
where(/find(/order(等组合 - 自动审计 扫出候选,剔除核心框架与已分析项
- AWVS 等扫描器补漏
工具:phpstorm、Seay、phpstudy、AWVS。

图1:结构→框架洞→全局搜→自动扫→人工验证
0x01 ThinkPHP 3.2.3 常见 SQL 注入模式
1. ->where("可控参数")->find()
若 $option 可任意传入,可能注入。注意:若用 I($_GET['username']) 会过滤 exp 等。
2. ->find/select/delete("可控参数")
例:$id=I("id"); M("users")->find($id);
payload 思路:id[where]=1 and updatexml(...) — 有时无需单引号闭合。
3. ->where()->save()
username[0]=bind&username[1]=0 and (updatexml(...)) 类构造。
4. ->order("可控参数")->find()
order[updatexml(1,concat(0x3a,user()),1)] 进入 ORDER BY。
审计动作: 全局搜索 ->find(、select(、save(、order(,逐条看参数是否 int 强制、是否 I() 过滤。

图2:where/find/order/save 组合中的可控参数
0x02 实战发现(原文摘要)
- 后台 Ad 控制器 —
where()内 id 可控,括号闭合注入 - 前台 register / login — 多处
where组合,需逐个传参验证 - 大量
where()已(int)或不可控 → 误报要耐心筛
0x03 自动审计
800+ 条结果:跳过 TP 核心、已确认 SQL 类;fread/fgets 无输出可放低优先级;readfile/unlink 重点关注。
0x04 后台任意文件读取
跟踪变量是否用户可控 → 验证可读敏感路径。
0x05 后台写入 getshell(route 表)
full_url 插入恶意片段,触发 route.php 写入;需满足 a/b/c 路径形式与引号闭合。说明:后台写配置类功能 是高频 getshell 点。

图3:配置写入链是 CMS 审计必查点
0x06 前台写入 getshell(fetch 模板)
复杂调用链最终 file_put_contents — 说明 模板/缓存/编译 链也要审。
0x07 AWVS
本文环境 AWVS 未扫出额外洞——自动工具不能替代框架洞关键词搜索。
实践侧记 · 选型 CMS 时问这五句
- 基于 哪版 TP/Laravel/自研?最后一版安全公告何时?
- 是否还在 跟 PHP 8.x?
- 插件是否 隔离 还是与内核同库同路由?
- 后台是否有 CSRF、审计日志、升级签名校验?
- 交付后谁做 CVE 响应——厂商还是建站公司背锅?
元舟 PivArk 路径:现代 PHP、统一 RBAC、插件 Gateway;审记时对照 插件中心全生命周期测试标准。
总结
自动审计 + 框架洞关键词 + 耐心验证参数可控性,是 TP CMS 审阅主线。刚入门可跟一遍 yxtcmf;采购阶段 则应要求厂商出示 依赖版本与补丁策略,而非只听「我们也很安全」。
FAQ
A:洞点不同,但 搜索构造器、反序列化、调试模式 等仍要按版本查公告。
*Q:建站公司不懂审计怎么办?*
A:选 架构可说明、可门禁验证 的底座;客户要过等保时别交付停更壳。
权威块 · 更新于 2026-08-17 · 元舟 PivArk