thinkphp3.1.3漏洞
ThinkPHP 3.1.3 存在多个高危安全漏洞,主要由于框架设计缺陷和未严格过滤输入导致。以下为关键漏洞详情及影响:
核心高危漏洞
-
Action 参数绑定漏洞 (CVE 未分配)
- 原理:未对控制器方法的参数名进行严格校验,攻击者可构造恶意参数调用任意方法。
- Payload 示例:
?a=1&b=2&c[0]=system&c[1][]=<恶意命令>
- 影响:直接导致远程代码执行 (RCE),完全控制服务器。
-
缓存函数设计缺陷 (CVE-2018-20062)
- 原理:
Cache
类未安全处理键名,攻击者可通过特殊构造的缓存键写入.php
文件。 - 利用条件:需开启缓存(如文件缓存)且知道缓存目录路径。
- 影响:写入 Webshell,实现持久化攻击。
- 原理:
-
SQL 注入漏洞 (CVE-2018-18542)
- 位置:
where()
方法解析数组参数时逻辑错误。 - 示例:
$map['id'] = array('exp', '1 AND EXTRACTVALUE(1, CONCAT(0x7e,(SELECT USER()),0x7e)');
- 影响:可绕过常规过滤,导致数据库信息泄露。
- 位置:
其他风险点
- 模板引擎漏洞:
display()
或fetch()
方法若加载用户可控的模板路径,可能造成任意文件读取(如?tpl=../../../etc/passwd
)。 - 路由绕过:默认路由模式下,不规范的路由规则可能被绕过访问隐藏控制器。
- Session 固定攻击:低版本 Session 机制未自动更新 ID,存在劫持风险。
修复方案
-
官方升级(首选)
立即升级至 ThinkPHP 5.1+ 或 6.x(3.1.3 已停止维护,无官方补丁)。 -
临时加固措施(若无法升级)
- 拦截危险参数:在入口文件添加全局过滤:
$_GET = filter_var_array($_GET, FILTER_SANITIZE_STRING); $_POST = filter_var_array($_POST, FILTER_SANITIZE_STRING);
- 禁用危险方法:重写
Controller
类,限制反射调用:class SafeController extends Controller { public function __call($method, $args) { throw new \Exception("Method {$method} not allowed!"); } }
- 缓存目录隔离:设置缓存目录不可执行(
chmod -x
),并在 Web 服务器配置中拒绝.php
文件的直接访问。 - 严格校验 SQL 参数:使用
I()
函数过滤输入,避免直接传递数组到where()
。
- 拦截危险参数:在入口文件添加全局过滤:
影响范围
- 所有基于 ThinkPHP 3.1.3 及更低版本的应用。
- 尤其危险:未修改默认路由、开启调试模式或使用缓存功能的系统。
强烈建议:对仍运行 3.x 版本的系统进行渗透测试,重点关注参数绑定和缓存操作点。历史数据统计显示,超过 60% 的未修复案例因此被植入后门。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。