漏洞综述
关于ThinkPHPThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,其借鉴了国外很多优秀的框架和模式,包括使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式等。该框架常被用来进行二次开发,国内应用非常广泛。
漏洞原理
Thinkphp处理请求的关键类为Request(thinkphp/library/think/Request.php),该类可以实现对HTTP请求的一些设置。
Thinkphp支持配置“表单伪装变量”,默认情况下该变量值为_method,因此在method()中,可以通过“表单伪装变量”进行变量覆盖实现对该类任意函数的调用,并且$_POST作为函数的参数传入。所以可以构造请求来实现对Request类属性值的覆盖,例如覆盖filter属性(filter属性保存了用于全局过滤的函数),从而实现代码执行。
2019年1月11日,Thinkphp官方在Github中进行了更新,修补了该远程命令执行漏洞,该漏洞利用较为简单,恶意攻击者可通过自动化工具进行全网扫描,写入webshell后门,建议使用到该框架的用户及时做好防护修复措施。
漏洞复现
以Thinkphp5.0.22版本为例,提交带恶意参数的url,可以做到命令执行的效果,如下执行dir命令查看目录文件:
影响范围
ThinkPHP 5.0.x – 5.0.23
处置方法
(1)官方补丁
参照官方在github上的更新修改library/think/Request.php文件并关闭调试模式。
Github地址:
https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003
(2)H3C解决方案
新华三IPS规则库将在1.0.62版本支持对该漏洞的拦截,建议关注新华三官网及时升级版本并使能相关规则。
声明
本安全公告仅用来描述可能存在的安全问题,未经新华三大安全允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,新华三大安全以及安全公告作者不为此承担任何责任。新华三大安全拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。
关于新华三大安全
新华三集团在安全领域拥有十余年的经验积累,拥有1000多项信息安全领域专利技术,具备业界最全面的安全交付能力,可提供近300款产品和专业的安全咨询评估服务团队,并且具备以客户为导向的需求快速响应能力,从底层信息安全基础设施到顶层设计为国家和企业提供安全可信的防护。