记录一期Thinkphp5 WebShell木马渗透的经历, 加修复建议

ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。

但是漏洞也层出不穷,有一天发现自己的的小程序突然打不开了,
What ??? 小小的网站也被墙了?
之前抱着一种心态 想着 这么小的网站谁想搞你 然后对网络安全方面视而不理,结果有一天 被啪啪打脸!!
请添加图片描述

当时很惊慌,未了解网络渗透方面的知识的无束手无策 但是没办法 哪里跌倒哪里爬起!!!
然后开始分析木马是怎么上传的!!!

PHP木马上传 网上一堆文章对其进行描述,本人在开发项目的时候也知道有这么一回事但是抱着一种态度 小破站没人会攻击你所以就没太注意。
在这里插入图片描述
简单来说就是通过漏洞将PHP文件通过漏洞上传到你的服务器中 然后进行一些非法操作。同时还是 XSS SQL注入等方法进行攻击。
下面我来分析一波木马被上传的经历。

有一天 网页首页被占了 那时候很郁闷 到底发生了啥 然后进入服务器看 发现 ThinkPHP 首页的 Index.php 文件被篡改成了 一个Html文件 导致后台接口打不开同时里面内容还有一些脚本。
在这里插入图片描述
同时发现多了几个文件
在这里插入图片描述

在这里插入图片描述
其中gsl.php 文件内容如下, 通过百度了解到 该文件是一个叫做哥斯拉的木马 通过
file_get_contents(“php://input”);这句话接收上传经过加密的PHP脚本文件,然后通过encode( D , D, D,K)方法进行解密 最终通过 eval($payload);这个方法运行脚本。
在这里插入图片描述

为什么eval($payload);
可以运行脚本呢??

在这里插入图片描述
通过查资料可以发现 eval 函数可以把里面参数的内容 当做PHP脚本来执行 这样的话 问题就大了 如果木马被上传就完蛋 别人想干嘛就干嘛了。
同时
发现了 robots.php文件 里面的内容如下
在这里插入图片描述
发现了一个Url 我们打开试一下
在这里插入图片描述

在这里插入图片描述访问这个Url发现 就是一堆加密过的木马文件 ,出于好奇 我将它复制到了服务器并且修改了相关内容。让其打印该木马内容
在这里插入图片描述
修改 eval 方法为 echo 将字符串打印出来
然后
打开 发现以下内容

在这里插入图片描述
在这里插入图片描述
但是这些都是打印出来的结果 ,看不到网站的真实内容 。 然后经过确保这个文件无其他后门后我尝试将其界面改成 PHP文件试试。
然后打开界面如下 好家伙 还
过安全狗、云锁、阿里云、360、护卫神、D盾、百度云、各种杀软!
这就是木马的WebShell 但是这里有密码 然后我分析了一下代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现这个代码就是验证密码的逻辑 然后我将逻辑改了一下
在这里插入图片描述

去除MD5加密后将上面的 $password;输入 然后页面就可以打开了
在这里插入图片描述
发现该木马的功能还真不少 可以下载文件 上传文件 该文件等一系列操作 还可以执行SQL语句 这一波操作 项目里面的源码全都是裸奔了 想干嘛就干嘛 。。。。

发现该脚本后 我立马搜索资料 对漏洞进行修复,最后发现实 ThinkPhP5的一个重大漏洞 遇到这个问题的人不止我一个。

下面是修复的过程
受影响的版本包括5.0和5.1版本
1、thinkphp\library\think\App.php 358行左右 module 方法中
像如题所示添加该代码 这也是TP官方建议的修改方法
在这里插入图片描述
新增代码如下

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

2、thinkphp\library\think\Request.php

将public function method($method = false)方法更改在这里插入图片描述

改成如下
在这里插入图片描述
完整代码如下

public function method($method = false)
    {
        if (true === $method) {
            // 获取原始请求类型
            return IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
        } elseif (!$this->method) {
            if (isset($_POST[Config::get('var_method')])) {
                // $this->method = strtoupper($_POST[Config::get('var_method')]);
                // $this->{$this->method}($_POST);
                $method = strtoupper($_POST[Config::get('var_method')]);
                if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
                    $this->method = $method;    
                    $this->{$this->method}($_POST);
                } else { 
                    $this->method = 'POST';
                }
                unset($_POST[Config::get('var_method')]);
            } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
                $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
            } else {
                $this->method = IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
            }
        }
        return $this->method;
    }

同时后端代码要严格的判断文件上传的 内容是否合法 禁止上传非法脚本文件。要不然容易被黑!
经过一波教育之后 突然觉得 网络安全与每一位开发者息息相关 切莫因为网站的大小而忽略了对项目的安全防护 ,上面的只是一次 被getShell的经历 网络渗透的方法还有很多 。做运维和开发一定要了解基本的网络安全知识 要不然不是因为有灵魂的开发者!
同时需要这些木马脚本进行分析学习的可以私聊我 但是切记不能做一下非法的事情。维护网路安全环境 人人有责

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
ThinkPHP是一款流行的PHP开发框架,5.x版本也是比较常用的版本。虽然ThinkPHP是一个优秀的框架,但仍然存在一些潜在的安全漏洞,因此及时修复这些漏洞是非常重要的。修复ThinkPHP 5.x漏洞可以从以下几个方面入手: 1. 更新最新版本:保持框架的版本更新是修复漏洞的首要措施。ThinkPHP团队会不断发布更新版本来修复漏洞和增新功能,因此及时更新到最新版本是必要的。可以在官方网站上查看并下载最新版本的ThinkPHP。 2. 安全审计:进行代码审计是另一个重要的步骤。检查应用程序的代码和配置文件,特别是控制器和模型中的用户输入和数据库查询,以确保没有任何可能导致代码执行或SQL注入等安全问题的漏洞。 3. 安全固:可以通过安全措施来修复漏洞。例如,禁用不必要的文件或函数、密钥管理和访问控制等措施可以帮助提高系统的安全性。 4. 过滤用户输入:用户输入是最常见的安全漏洞来源之一。应该对用户输入数据进行严格的过滤和验证,确保输入的数据符合预期的格式和范围,并防止XSS和SQL注入等攻击。 5. 强化认证与权限管理:强用户认证措施,使用强密码和密技术来保护用户的登录信息。在系统中实施严格的权限管理,限制用户的访问权限,以避免恶意用户越权操作。 总之,修复ThinkPHP 5.x漏洞需要全面考虑各个方面的安全问题,并严格遵循最佳实践。及时更新版本、进行安全审计、安全措施、过滤用户输入、强化认证与权限管理等措施都是非常有效的方法。同时也建议开发者关注ThinkPHP官方的漏洞公告和安全建议,及时了解并修复已经公开的漏洞。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值