thinkphp 远程执行漏洞修复方案_ThinkPHP再爆高危漏洞 启明星辰提供解决方案

ab81a3a0766dcf760285322542fea907.gif

1895419fb41d0372dfd4b77beac224a8.gif

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,该框架国内应用非常广泛。

2019年1月11日官方修复了一处严重的漏洞,该漏洞可导致远程命令代码执行。

 漏洞影响版本:

5.0.x-5.0.23

 漏洞分析:

漏洞主要出现在ThinkPHPRequest类的method方法中,(thinkphp/library/think/Request.php)

Request类可以实现对HTTP请求的一些设置,其中成员方法method用来获取当前请求类型,其定义如下:

c4239438756f3fecbdfc77cee30ac697.png

thinkphp支持配置“表单伪装变量”,默认情况下该变量值为_method,可以通过“表单伪装变量”进行变量覆盖实现对该类任意函数的调用,并且$_POST作为函数的参数传入。

99e6af1af5b66c61874794e982a1c00f.png

Requset构造函数如下:

f8f1764ee0c616fabcd04e05bd685501.png

因此可以通过构造函数实现对Request类属性进行覆盖,如filter属性。构造如下payload实现远程代码执行:

076b64c5a767bb8b3ecde955c8472fb0.png

远程代码最终是在filterValue中的call_user_func()执行:

441cbd90481b1010606c7385094917cb.png

在官网下载的5.0.23完整版中,在App类(thinkphp/library/think/App.php)中module方法增加了设置filter参数值的代码,用于初始化filter。因此通过上述请求设置的filter参数值会被重新覆盖为空导致无法利用。

在5.0.23 Request类中有个param成员函数用于获取当前请求的参数,也有个method函数:

1a0fba05597e57773d0e2e4772f4ab50.png

当传入数值为true时:

4769e47cab9278bb8935e32183303df3.png

跟进到server方法,参数$name为REQUEST_METHOD

c293c59a231226b036530215e374e0fe.png

$data为上一步的REQUEST_METHOD:

73cd26c79f502f8de80fff03160783af.png

要想触发调用param(),只要开启了debug模式即可:

58fa2bc637c55ab6c38cbb36795e5926.png

故构造payload如下:

fe3c2dd856677e943729c43a8fc80e42.png

前面分析可知,我们需要触发Request类中的param函数来完成filter的覆盖,在App类中exec()方法中当$dispatch[‘type’]为controller 和method时有直接的调用:

c52546eb32bc120ffade63c5d7726170.png

而url中s的值完成设置不同的$method,最终让routeCheck返回我们需要的$dispath即可。例如构造如下payload,无需debug模式开启也可实现远程代码执行:

91d6a92d206972dbca593f931a5e1e16.png

 解决方案:

一、官方建议:

    受影响的用户可将5.0.x升级到5.0.24,官方现已推出补丁,建议开发者进行修复:

d4a5c63194059d9bd868c4559a662e1a.png

二、产品检测与防护:

已部署启明星辰IDS、IPS、WAF产品的客户请确认如下事件规则已经下发并应用,即可有效检测或阻断攻击:HTTP_ThinkPHP5.0全版本远程代码执行漏洞

(1)天阗入侵检测与管理系统报警截图:

81ce4ef440f06e2b12217d25a666197e.png

(2)天清入侵防御系统报警截图:

39bcc457f39fe502467865ea0f1d1384.png

(3)天清Web应用安全网关报警截图:

877774a4a66589de455797517cb6efff.png

END

60e1a230b328c9cdb0d2d39879eb584d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值