内容简介:最近TP被爆出三个RCE,最近想跟着大佬们写的文章,把这几个洞分析一下,这里是exp:
最近TP被爆出三个RCE,最近想跟着大佬们写的文章,把这几个洞分析一下,这里是 5.0.0~5.0.23 的RCE。官方补丁地址: https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003
exp:
http://127.0.0.1/index.php?s=captcha post_poc1:_method=__construct&filter[]=system&method=get&get[]=whoami post_poc2:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
未开启Debug
漏洞触发流程
首先进入入口点 App.php 中的 run 方法,实例化了一个 $request 对象传给了 routeCheck 方法。
Route::check
$method 由 $request->method() 获得, $rules 会根据 $method 的不同而获得不同的路由规则
跟进 $request->method() ,漏洞点在这里,通过外部传入 Config::get('var_method') 可以造成该类的任意方法调用。
在tp的默认中配置中设置了表单请求类型伪装变量如下,POST一个 _method 参数即可进入判断。
而 Request 类的构造方法中, $options 可控,因此我们可以覆盖该类的任意属性。其中 $this->filter 保存着全局过滤规则。
我们请求的路由是 ?s=captcha ,它对应的注册规则为 \think\Route::get 。
因此我们需要让 $this->method 返回值为get,所以payload中有个 method=get ,然后才会取出 self::$rules[$method] 的值给$rules。
路由检测后接着会执行 self::exec ,并进入 method 分支
跟进 Request::instance()->param() , $this->param 通过 array_merge 将当前请求参数和URL地址中的参数合并。
跟进 $this->input ,该方法用于对请求中的数据即接收到的参数进行过滤,而过滤器通过 $this->getFilter 获得。
$this->filter 为 system ,回到input,因为data为数组,因此可以进入if条件调用 array_walk_recursive($data, [$this, 'filterValue'], $filter) ,对 $data 中的每一个值调用 filterValue 函数。
即间接调用 call_user_func ,且两个参数可控,造成RCE。
poc2
回到param方法,跟进method方法,此时参数为True。
$this->server
这里也有一个 input ,
input 中的
data 对应于
server 的
$this->server ,
name 的值为
REQUEST_METHOD 。因此传入
server[REQUEST_METHOD]=whoami ,因为此时
data 不是数组,所以会直接进入
filterValue
结合之前的 __construct 覆盖 $filter 属性,同样可以造成RCE。
补丁分析
对表单请求类型伪装变量添加了白名单,防止任意属性覆盖。
后记
这个洞的攻击链很强,Orz!!。
Referer
以上所述就是小编给大家介绍的《ThinkPHP 5.0.0~5.0.23 RCE 漏洞分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Domain-Driven Design Distilled
Vaughn Vernon / Addison-Wesley Professional / 2016-6-2 / USD 36.99
Domain-Driven Design (DDD) software modeling delivers powerful results in practice, not just in theory, which is why developers worldwide are rapidly moving to adopt it. Now, for the first time, there......一起来看看 《Domain-Driven Design Distilled》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
HTML 编码/解码
HTML 编码/解码