ThinkPHP V5高危漏洞分析 腾讯御界高级威胁检测系统可成功检出

2018-12-14 09:21:43
ThinkPHP官方在近期发布安全更新,公告一个远程命令执行的高危漏洞(CNVD-2018-24942)。腾讯御界高级威胁检测系统已经在第一时间响应,能够针对性的检测出该漏利用。而且对于真实环境下利用该漏洞发生的webshell攻击,腾讯御界也能够成功检出。

一、简介

ThinkPHP官方在近期发布安全更新,公告一个远程命令执行的高危漏洞(CNVD-2018-24942),该漏洞主要因为php代码中route/dispatch模块没有对URL中的恶意命令进行过滤导致,在没有开启强制路由的情况下,能够造成远程命令执行,包括执行shell命令,调用php函数,写入webshell等。主要影响的版本包括 5.x < 5.1.31 5.x <= 5.0.23

腾讯御界高级威胁检测系统已经在第一时间响应,能够针对性的检测出该漏利用。而且对于真实环境下利用该漏洞发生的webshell攻击,腾讯御界也能够成功检出。

二、漏洞POC

这里提供如下POC,从下图可见URL中的system(“ls -l”)被成功执行,返回了当前目录下的文件情况。

http://{domain}:{port}/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=systemXXX&vars[1][]=ls%20-l

三、漏洞分析

通过源码分析,有漏洞的代码主要集中在library/think/App.php中的parseModuleAndClass 方法。


该方法中,如果$name中含有字符\就会把$name整体当做$class,然后进行实例化,这里造成攻击者可以通过控制URL,能够实例化任何一个类。

这里比较危险的可以被利用的类和相应参数有:

    1. /public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfoXXX&vars[1][]=1

    2. /public/index.php?s=index/\think\Request/input&filter=phpinfoXXX&data=1

四、防御建议

对于该漏洞,ThinkPHP官网给出了如下修复建议,腾讯御界高级威胁检测系统也能够检测出该漏洞利用。

4.1 更新框架修复

如果你使用composer安装,并且一直保持最新版本使用的话,使用下面的指令更新到最新版本即可。

composer update topthink/framework

如果你使用了git版本库安装,也请及时更新你所用的仓库版本。

如果各种原因暂时无法更新到最新版本(早期版本升级到最新版本可能存在兼容性问题,请首先参考官方手册的升级指导章节),可以参考下面的方式进行手动修正。

4.2 手动修复

5.0版本

think\App类的module方法的获取控制器的代码后面加上

if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
    throw new HttpException(404, 'controller not exists:' . $controller);}

5.1版本

think\route\dispatch\Url类的parseUrl方法,解析控制器后加上

if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
    throw new HttpException(404, 'controller not exists:' . $controller);}

4.3腾讯御界高级威胁检测系统

https://cloud.tencent.com/product/yje

腾讯御界通过镜像方式采集企业网络边界流量,对流量进行解析,还原文件,通过入侵规则、威胁情报匹配,沙箱文件分析等技术手段识别威胁。同时,系统将对流量日志,告警报文进行存储,方便事后追踪溯源。

五、总结

本文对ThinkPHP V5的远程命令执行漏洞进行了技术分析,给出了针对性的防御建议。

六、参考资料

1. https://s.tencent.com/research/bsafe/603.html

2. https://cloud.tencent.com/product/yje

3. http://www.vulnspy.com/cn-thinkphp-5.x-rce/thinkphp_5.x_(v5.0.23%E5%8F%8Av5.1.31%E4%BB%A5%E4%B8%8B%E7%89%88%E6%9C%AC)_%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%A9%E7%94%A8%EF%BC%88getshell%EF%BC%89/

4. https://blog.thinkphp.cn/869075

5. http://www.cnvd.org.cn/flaw/show/CNVD-2018-24942

6. https://nosec.org/home/detail/2050.html

7. http://www.thinkphp.cn/topic/60400.html 

8. http://www.thinkphp.cn/topic/60390.html

最新资讯