漏洞预警 | ThinkPHP5远程命令执行漏洞

栏目: PHP · 发布时间: 5年前

内容简介:ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企 业应用开发而诞生的。由于其简单易用,国内用户众多。2019年1月11日ThinkPHP团队发布了版本更新,本次更新包含了一个可能GetShell的安全更新,具体内容为改进Request类的method方法。Thinphp团队在实现框架中的核心类Requests的method方法实现了表单请求类型伪装,默认为$_POST[‘_method’]变量,却没有对$_POST[‘_method’]属性进行严

前言

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级 PHP 开发框架,是为了敏捷WEB应用开发和简化企 业应用开发而诞生的。由于其简单易用,国内用户众多。

2019年1月11日ThinkPHP团队发布了版本更新,本次更新包含了一个可能GetShell的安全更新,具体内容为改进Request类的method方法。

漏洞描述

Thinphp团队在实现框架中的核心类Requests的method方法实现了表单请求类型伪装,默认为$_POST[‘_method’]变量,却没有对$_POST[‘_method’]属性进行严格校验,可以通过变量覆盖掉Requets类的属性并结合框架特性实现对任意函数的调用达到任意代码执行的效果。

漏洞危害

在未经授权的情况下远程攻击者构造特殊的请求可以在PHP上下文环境中执行任意系统命令,甚至完全控制网站,造成数据泄露,网站内容被修改。

影响范围

受影响版本:ThinkPHP 5.0.x

不受影响版本:ThinkPHP 5.0.24

漏洞分析

本次更新的关键commit如下:

漏洞预警 | ThinkPHP5远程命令执行漏洞

文件路径为:library/think/Request.php ,在修复前的文件526行中,当存在$_POST[‘_method’]变量是将会执行 $this->{$this->method}($_POST),当$_POST[‘_method’]为__construct时及等价于调用$this->_construct($_POST)_construct函数实现如下:

在该函数中,当传入的参数中的key为该Requests属性,将value赋值给该属性,由于key可控制,可以到达属性覆盖的效果。

漏洞预警 | ThinkPHP5远程命令执行漏洞

漏洞复现

通过git 可以快速搭建环境

git clone https://github.com/top-think/think

git checkout v5.0.23

cd think

git clone https://github.com/top-think/framework thinkphp

cd thinkphp

git checkout v5.0.23

通过覆盖filter属性即可达到调用任意函数的效果。

5.0.23且设置了app_debug=true复现截图如下:

漏洞预警 | ThinkPHP5远程命令执行漏洞

Payload如下

_method=__construct&filter[]=system&server[REQUEST_METHOD]=whoami

在早期5.0的版本过滤器的调用有差别payload也会不同

修复方案

1.升级到5.0.24版本

2.或通过修改以下代码来缓解漏洞:

编辑 library/think/Request.php 文件, 查找:

$this->method = strtoupper($_POST[Config::get('var_method')]);
$this->{$this->method}($_POST);

修改为如下

$method = strtoupper($_POST[Config::get('var_method')]);
if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
    $this->method = $method;
    $this->{$this->method}($_POST);
} else {
    $this->method = ‘POST’;
}
unset($_POST[Config::get('var_method')]);

参考

http://www.thinkphp.cn/topic/60992.html

https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java并发编程实战

Java并发编程实战

Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / 童云兰 / 机械工业出版社华章公司 / 2012-2 / 69.00元

本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性......一起来看看 《Java并发编程实战》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具