从防护角度看Thinkphp历史漏洞
字数 1571 2025-08-18 11:39:26

ThinkPHP历史漏洞分析与防护指南

一、漏洞概述

ThinkPHP框架在2019年初公开了两个高危远程代码执行(RCE)漏洞,影响多个版本,导致大量攻击者利用扫描器进行全网扫描攻击。这些漏洞主要存在于ThinkPHP的Request类中,通过特定构造的HTTP请求可实现代码执行。

二、漏洞原理详解

2.1 ThinkPHP 5.0.x版本漏洞

漏洞位置thinkphp/library/think/Request.php

核心原理

  1. ThinkPHP支持配置"表单伪装变量",默认值为_method
  2. method()方法中,可通过"表单伪装变量"进行变量覆盖,实现对Request类任意函数的调用
  3. $_POST数组作为参数传入被调用的函数
  4. 攻击者可构造请求覆盖Request类的filter属性(该属性保存全局过滤函数),从而实现代码执行

2.2 ThinkPHP 5.1.x-5.2.x版本漏洞

漏洞位置:同样位于thinkphp/library/think/Request.php

核心原理

  1. $method变量等同于POST的_method参数值
  2. 可覆盖$filter属性值(filter属性保存全局过滤函数)
  3. 需要配置error_reporting(0)忽略异常提示,否则漏洞触发时程序会因警告级别异常而终止

三、攻击流程分析

3.1 全网扫描阶段

攻击者通常采用两步攻击流程:

  1. 漏洞探测与利用

    • 扫描器发送精心构造的HTTP请求(exp)
    • 写入包含特定指纹的一句话Webshell
    • 后续访问该文件验证指纹信息,确认是否成功getshell
  2. 特征分析

    • 目的IP为相同C段或B段
    • 端口较为固定(通常为80/443)
    • 扫描时间非常密集

3.2 后渗透阶段

成功getshell后,攻击者会:

  1. 使用中国菜刀等工具连接Webshell
  2. 执行远程控制操作
  3. 进行内网探测和横向移动

四、实际案例分析

4.1 郑州服务器案例(122.114.24.216)

  • 确认使用ThinkPHP5框架开发
  • Webshell仍存在于服务器上
  • 扫描器使用"baidu"作为指纹标识

4.2 四川服务器案例(182.151.214.106)

  • 服务器仍可连通,使用ThinkPHP框架
  • 发现内网包含192.168.9.0和192.168.56.0两个子网
  • 攻击者执行了网络查询命令

4.3 美国服务器案例(161.129.41.36)

  • Webshell已被清除
  • 发现相同Webshell木马(x.php)
  • Webshell密码为"xiao",标志位也是"baidu"

五、防护建议

5.1 漏洞修复

  1. 及时更新ThinkPHP框架到最新安全版本
  2. 对于无法立即升级的系统:
    • 5.0.x版本:修复Request类的安全处理逻辑
    • 5.1.x-5.2.x版本:配置error_reporting(0)并修复Request类

5.2 安全配置

  1. 配置Web服务器禁止IP直接访问
  2. 部署WAF/IPS设备,配置相关防护规则
  3. 限制不必要的HTTP方法(PUT/DELETE等)
  4. 严格过滤用户输入,特别是_method等参数

5.3 监控与响应

  1. 部署安全设备监测扫描行为:
    • 密集的C段/B段扫描
    • 固定端口的频繁访问
    • 包含ThinkPHP漏洞特征的请求
  2. 建立日志分析机制,及时发现异常访问
  3. 定期检查服务器文件完整性,特别是可写目录

六、总结

ThinkPHP历史RCE漏洞因其易用性被广泛用于全网扫描攻击。攻击者通过自动化扫描结合手工渗透的方式获取大量服务器控制权。防护关键在于及时修补漏洞、加强输入过滤、部署安全设备和建立有效监控机制。对于使用ThinkPHP框架的系统,应特别关注Request类的安全处理和全局过滤机制。

ThinkPHP历史漏洞分析与防护指南 一、漏洞概述 ThinkPHP框架在2019年初公开了两个高危远程代码执行(RCE)漏洞,影响多个版本,导致大量攻击者利用扫描器进行全网扫描攻击。这些漏洞主要存在于ThinkPHP的Request类中,通过特定构造的HTTP请求可实现代码执行。 二、漏洞原理详解 2.1 ThinkPHP 5.0.x版本漏洞 漏洞位置 : thinkphp/library/think/Request.php 核心原理 : ThinkPHP支持配置"表单伪装变量",默认值为 _method 在 method() 方法中,可通过"表单伪装变量"进行变量覆盖,实现对Request类任意函数的调用 $_POST 数组作为参数传入被调用的函数 攻击者可构造请求覆盖Request类的 filter 属性(该属性保存全局过滤函数),从而实现代码执行 2.2 ThinkPHP 5.1.x-5.2.x版本漏洞 漏洞位置 :同样位于 thinkphp/library/think/Request.php 核心原理 : $method 变量等同于POST的 _method 参数值 可覆盖 $filter 属性值(filter属性保存全局过滤函数) 需要配置 error_reporting(0) 忽略异常提示,否则漏洞触发时程序会因警告级别异常而终止 三、攻击流程分析 3.1 全网扫描阶段 攻击者通常采用两步攻击流程: 漏洞探测与利用 : 扫描器发送精心构造的HTTP请求(exp) 写入包含特定指纹的一句话Webshell 后续访问该文件验证指纹信息,确认是否成功getshell 特征分析 : 目的IP为相同C段或B段 端口较为固定(通常为80/443) 扫描时间非常密集 3.2 后渗透阶段 成功getshell后,攻击者会: 使用中国菜刀等工具连接Webshell 执行远程控制操作 进行内网探测和横向移动 四、实际案例分析 4.1 郑州服务器案例(122.114.24.216) 确认使用ThinkPHP5框架开发 Webshell仍存在于服务器上 扫描器使用"baidu"作为指纹标识 4.2 四川服务器案例(182.151.214.106) 服务器仍可连通,使用ThinkPHP框架 发现内网包含192.168.9.0和192.168.56.0两个子网 攻击者执行了网络查询命令 4.3 美国服务器案例(161.129.41.36) Webshell已被清除 发现相同Webshell木马(x.php) Webshell密码为"xiao",标志位也是"baidu" 五、防护建议 5.1 漏洞修复 及时更新ThinkPHP框架到最新安全版本 对于无法立即升级的系统: 5.0.x版本:修复Request类的安全处理逻辑 5.1.x-5.2.x版本:配置 error_reporting(0) 并修复Request类 5.2 安全配置 配置Web服务器禁止IP直接访问 部署WAF/IPS设备,配置相关防护规则 限制不必要的HTTP方法(PUT/DELETE等) 严格过滤用户输入,特别是 _method 等参数 5.3 监控与响应 部署安全设备监测扫描行为: 密集的C段/B段扫描 固定端口的频繁访问 包含ThinkPHP漏洞特征的请求 建立日志分析机制,及时发现异常访问 定期检查服务器文件完整性,特别是可写目录 六、总结 ThinkPHP历史RCE漏洞因其易用性被广泛用于全网扫描攻击。攻击者通过自动化扫描结合手工渗透的方式获取大量服务器控制权。防护关键在于及时修补漏洞、加强输入过滤、部署安全设备和建立有效监控机制。对于使用ThinkPHP框架的系统,应特别关注Request类的安全处理和全局过滤机制。