thinkphp3.1.3漏洞

ThinkPHP 3.1.3 存在多个高危安全漏洞,主要由于框架设计缺陷和未严格过滤输入导致。以下为关键漏洞详情及影响:


核心高危漏洞

  1. Action 参数绑定漏洞 (CVE 未分配)

    • 原理:未对控制器方法的参数名进行严格校验,攻击者可构造恶意参数调用任意方法。
    • Payload 示例
      ?a=1&b=2&c[0]=system&c[1][]=<恶意命令>
    • 影响:直接导致远程代码执行 (RCE),完全控制服务器。
  2. 缓存函数设计缺陷 (CVE-2018-20062)

    • 原理Cache 类未安全处理键名,攻击者可通过特殊构造的缓存键写入 .php 文件。
    • 利用条件:需开启缓存(如文件缓存)且知道缓存目录路径。
    • 影响:写入 Webshell,实现持久化攻击。
  3. 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,存在劫持风险。

修复方案

  1. 官方升级(首选)
    立即升级至 ThinkPHP 5.1+ 或 6.x(3.1.3 已停止维护,无官方补丁)。

  2. 临时加固措施(若无法升级)

    • 拦截危险参数:在入口文件添加全局过滤:
      $_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% 的未修复案例因此被植入后门

所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。