预警编号:NS-2018-0040
2018-12-11
TAG: | ThinkPHP、 远程代码执行、getshell |
---|---|
危害等级: | 高,利用该漏洞可获取服务器权限,目前针对此漏洞的PoC已公开。 |
版本: | 1.0 |
1
漏洞概述
近日,ThinkPHP官方发布了更新通告,在新发布的版本中修复了一个高危的远程代码执行漏洞。由于框架对控制器名没有进行足够的检测,会导致在没有开启强制路由的情况下执行任意代码,甚至可以获取服务器权限。目前,针对此漏洞的PoC已公开。
ThinkPHP是遵循Apache2开源协议发布的免费框架,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时也注重易用性,并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,因此在企业级开发项目中应用比较广泛,请相关用户及时引起关注。
参考链接:
https://blog.thinkphp.cn/869075
SEE MORE →
2影响范围
受影响版本:
不受影响版本:
3漏洞排查
3.1
版本检查
使用文本编辑器打开thinkphp\base.php文件,在常量定义的代码中即可获取当前框架的版本:
3.2
PoC排查
在URL中使用如下payload(s请求参数值)进行测试,如果显示出phpinfo页面,则说明存在风险:
http://xxxxxxxxxx/index.php?s=/index/\think\request/cache&key=1|phpinfo |
---|
验证截图如下:
4漏洞防护
4.1
版本升级
ThinkPHP5支持使用Composer来安装升级,建议先备份application和修改过的目录,使用cmd或者ps进入网站根目录,执行如下命令之一:
composer update topthink/framework 5.1.31composer update topthink/framework=5.1.31composer update topthink/framework:5.1.31 |
---|
注:若用户使用的为早期ThinkPHP5版本,在升级过程中可能存在兼容性问题,用户可参考官方手册的升级指导章节进行升级。
参考链接如下:
https://www.kancloud.cn/manual/thinkphp5/163239
https://www.kancloud.cn/manual/thinkphp5_1/354155
4.2
补丁代码
无法进行更新的用户,可对当前的项目源码进行人工修复,详细过程如下:
在think\App类中找到module方法,在获取控制器的代码后面加上如下代码:
if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller);} |
---|
在think\route\dispatch\Url类中找到parseUrl方法,在解析控制器后加上如下代码:
if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller);} |
---|
END
作者:绿盟科技安全服务部
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。
绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。