ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

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

内容简介:大概看了下,这个洞跟5.0的原理大致相同,都是利用Reuqest类的Method方法覆盖了

大概看了下,这个洞跟5.0的原理大致相同,都是利用Reuqest类的Method方法覆盖了 $this->filter 属性,然后进入 filterValue 调用 call_user_func($filter, $value)$value当前请求参数和URL地址中的参数合并 ,从而导致RCE。

漏洞验证

测试版本:Thinkphp_5.1.1

补丁:https://github.com/top-think/framework/commit/2454cebcdb6c12b352ac0acd4a4e6b25b31982e6

需要在入口文件处关闭报错。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

payload

c=exec&f=calc.exe&&_method=filter&

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

流程分析

在获取应用调度信息时会调用Request类的method方法获取当前的请求类型

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

$this->config->get('var_method') 外部可控,即 $this->method 我们可控,从而我们可以通过 $this->{$this->method}($_POST) 调用任意方法。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析 ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

跟进 filter 方法,发现我们post的数据可以覆盖 $this->filter 属性。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

回到App类,由于我们开启了 $this->debug 从而可以进入 Request 类的 param 方法。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

跟进 param 方法, $this->param当前请求参数和URL地址中的参数合并 。然后进入 input 方法。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析 跟进 input 方法,因为 $data 为上面提到的 $this->param 即数组,从而进入if条件执行 array_walk_recursive($data, [$this, 'filterValue'], $filter);
ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

查阅 array_walk_recursive 函数可知,该函数会调用 $this->filterValue 函数,把 $data 数组的每个值作为其第一个参数,键名作为第二个参数,并且把 $this->filter 作为第三个参数。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

继续跟进 filterValue 方法,发现调用了 call_user_func($filter, $value)$filter 为刚开始我们覆盖的 $this->filter 属性的遍历键值,等于 $_POST 数组。 $value当前请求参数和URL地址中的参数合并 数组 $this->param 的键值。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

当遍历到 $this->param 的第二个键值 calc.exe$filters 的第一个键值 exec 时,成功执行命令,弹出了计算器。

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析

补丁分析

ThinkPHP 5.1.x~5.2.x全版本 RCE 漏洞分析 与5.0一样,对表单请求类型伪装变量添加了白名单。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Elements of Programming

Elements of Programming

Alexander A. Stepanov、Paul McJones / Addison-Wesley Professional / 2009-6-19 / USD 39.99

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, mus......一起来看看 《Elements of Programming》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换