当前位置:首页 > 网络安全 > 安全通告 > 详情
安全漏洞预警通告-ThinkPHP 5.0.x 远程命令执行漏洞预警
2019年01月14日   

 

  1、基本情况

  ThinkPHP存在远程代码执行漏洞(CNVD-2019-01092)。攻击者利用该漏洞,可在未经授权的情况下,对目标网站进行远程命令执行攻击。

  2、攻击原理

  该漏洞主要出现在ThinkPHP Request类的method方法中 (thinkphp/library/think/Request.php), Request类可以实现对HTTP请求的一些设置,其中成员方法method用来获取当前请求类型,其定义如下:

   

  当传入的参数为false的时候,会取配置项var_method,其默认值为_method

   

  $this->{$this->method}($_POST); 通过post参数_method可以实现对当前类的任意方法进行调用。

  通过调用当前类的构造方法可以覆盖任意成员属性的值:
  

 

  这里通过覆盖filter属性,filter属性保存了用于全局过滤的函数。

  但是在thinkphp5.0.23中,会对filter值重新赋值为空,导致无法利用。
  
  在thinkphp/library/think/App.php中开启debug的时候会调用Request类的param方法。
  
  在thinkphp/library/think/Request.php param方法中会调用到method方法,并将参数设置为true。
  
  当参数为true的时候,会调用server方法
  
  
  会走到 input方法,通过之前方法覆盖server成员属性值为array(),input方法代码如下:
  

   最终会调用filterValue形成任意代码执行:

   

  3、影响范围

  ThinkPHP 5.0.x 至 5.0.23。

  4、处置建议

  1) 官方在 GitHub 中进行了版本更新,链接地址:https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003;

  2) 升级代码到最新版本 5.0.24,链接地址:http://www.thinkphp.cn/down.html;

  3) 建议用户在线上环境中关闭 debug 模式。

  5、参考链接

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

  2) http://www.cnvd.org.cn/webinfo/show/4855

  3) http://www.thinkphp.cn/down.html