php项目私有化部署保护代码,ThinkPHP项目安全配置解决方案

前言:

ThinkPHP MVC框架越来被开发者接受,众多的开发者选择了这个框架,也有很多的优秀项目使用的ThinkPHP框架。最近整理了一下ThinkPHP项目的一些安全配置。可能并不适用全部项目,大家可以适当的使用如下的安全配置。

前置知识:

web容器和各类组件的版本,这里使用的LNMP 的架构:Nginx1.19 Mysql 5.6 PHP7.4 Centos8.2,这里推荐是PHP的版本7.4

一、ThinkPHP常见的被入侵方式

136be34314a57ba454d97dfa8ef5d707.png

ThinkPHP RCE

案例分享:

在某些ThinkPhp版本中只有开启了Debug才会导致命令执行的出现,例如拿ThinkPhp5.1.14举例

获取网站的绝对路径等等敏感信息

136be34314a57ba454d97dfa8ef5d707.png

开启了Debug,执行exp

136be34314a57ba454d97dfa8ef5d707.png

2、通过log日志获取网站权限

智宇发卡网举例

此发卡网是可以访问runtime目录的,给大家看看目录

136be34314a57ba454d97dfa8ef5d707.png

他入口文件和runtime目录在同一个目录里面,他也没设置其他东西,所以可以直接访问runtime目录

然后根据runtime目录的日志存储的格式runtime/log/年份月份/日.log来存储的,所以得到runtime/log/202007/22.log来获取网站日志,在遍历日志的时候在18号发现了管理员账号密码

136be34314a57ba454d97dfa8ef5d707.png

通过后台登录账号密码,通过代码审计发现存在一个比较鸡肋的Rce

利用条件

可以开启日志,或者支持into outfile

GetShell

1

在审计的时候发现了数据库可以指定其他文件进行数据库恢复(恢复数据相当于执行SQL语句),下面是利用步骤

1.下载网站备份文件

2.修改SQL语句,添加漏洞利用代码

3.在文件存储处添加.sql的后缀,然后在上传文件的地方上传.sql文件

4.然后在恢复数据的时候指定这个.sql文件达到写shell的目的

备份数据库

136be34314a57ba454d97dfa8ef5d707.png

下载后修改备份文件并修改文件

136be34314a57ba454d97dfa8ef5d707.png

漏洞利用代码(路径自己设置,后面的注释不可以删除)

SET GLOBAL general_log = 'ON';SET GLOBAL general_log_file = 'C:\\wwwroot\\192.168.2.128\\wwwa.php';select '<?php eval($_POST[0]);?>';SET GLOBAL general_log_file = 'C:\\Temp\\a.txt';

文件存储添加.sql后缀

136be34314a57ba454d97dfa8ef5d707.png

上传刚刚修改的.sql文件,例如此处

136be34314a57ba454d97dfa8ef5d707.png

在点击上传图片的时候,先抓包,添加一个.sql后缀的文件

136be34314a57ba454d97dfa8ef5d707.png

然后上传刚刚修改的sql文件,可以得到上传的路径

136be34314a57ba454d97dfa8ef5d707.png

恢复数据GetShell

136be34314a57ba454d97dfa8ef5d707.png

恢复成功后访问网站的wwwa.php,密码是0

136be34314a57ba454d97dfa8ef5d707.png

另外一个命令执行漏

由于thinkphp框架开发,他存在Thinkphp的Rce漏洞,但是由于路由设置的原因,在进行Rce的时候他每次请求都会带有路由的子域名参数,例如

136be34314a57ba454d97dfa8ef5d707.png

可以看见他会带着当前的域名或者ip先传入该参数进行执行,所以导致很多函数无法使用,所以大部分函数无法使用,不过还是找到了system这个函数进行命令执行

136be34314a57ba454d97dfa8ef5d707.png

♡♡♡♡♡♡♡♡♡♡

二、思考如何防御???

2.1配置防御log目录泄露

runtime目录下的文件是ThinkPhp运行时产生的文件,里面包括了日志,缓存,等等的信息,如果可以访问会导致如下危害:可以看见管理员和其他用户的登录日志,会记录明文账号和密码在某些版本可以通过缓存来进行代码执行

修复方法

伪静态中添加

location ~* (runtime/|Application/)

{

return 403;

}

136be34314a57ba454d97dfa8ef5d707.png

2.2 ThinkPHP安全入口限制

案例

https://www.bt.cn/bbs/thread-52183-1-1.html

修复方法

location ~ ^/index.php{

include enable-php-70.conf;

}

location ~* \.(php){

deny all;

}

2.3 使用Nginx防火墙

136be34314a57ba454d97dfa8ef5d707.png

默认拦截日志防御和ThinkPHP RCE攻击

如下:

136be34314a57ba454d97dfa8ef5d707.png

136be34314a57ba454d97dfa8ef5d707.png

发起ThinkPHP RCE 请求被拦截

136be34314a57ba454d97dfa8ef5d707.png

136be34314a57ba454d97dfa8ef5d707.png

2.3 使用堡塔PHP安全防护

防跨站的危害性

作用

当服务器中有多个网站时这个设置就非常有用,如果服务器中的某个网站被攻击了,可以避免其他网站也沦陷

案例

例如,如下服务器

136be34314a57ba454d97dfa8ef5d707.png

当该服务器的的192.168.2.128站点被入侵的时候,如果没有设置防跨站他是可以访问其他的网站的内容的

136be34314a57ba454d97dfa8ef5d707.png

如果设置了防跨站的话,是可以防止这种事情发生的

136be34314a57ba454d97dfa8ef5d707.png

以看到访问错误,不过单纯使用open_basedir是有被绕过的风险,上传一个带有如下内容的php文件

访问该php文件,可以成功获取到/etc/passwd文件里面的内容

136be34314a57ba454d97dfa8ef5d707.png

安装堡塔php安全防护后,进行设置

136be34314a57ba454d97dfa8ef5d707.png

具体使用说明

https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=49256&highlight=%E5%A0%A1%E5%A1%94php

开启堡塔php安全防护后,已经成功拦截

136be34314a57ba454d97dfa8ef5d707.png

2.4 使用企业级防篡改

thinkphp中默认是两个目录是存在写入和删除的。一个是缓存目录cache 一个是上传目录upload(并不是全部都是通用的根据项目自身去写规则)。这里我使用的是智宇发卡的程序来做的测试

智宇发卡这个程序就两个目录需要写入和删除。一个是runtime 目录和/static/upload 这两个目录需要写入。那么先把企业级防篡改的保护目录全部清空

136be34314a57ba454d97dfa8ef5d707.png

只留下这两个目录即可。测试一下效果

136be34314a57ba454d97dfa8ef5d707.png

测试为:写入不了文件

2.5 webshell防御–OpenRasp

webshell防御的话。这里使用的百度的Openrasp

具体的使用教程

https://www.bt.cn/bbs/thread-49371-1-1.html

直接安装即可

136be34314a57ba454d97dfa8ef5d707.png

测试效果如下:

使用方法,在该网站放了一个webshell

136be34314a57ba454d97dfa8ef5d707.png

执行php代码,被拦截

136be34314a57ba454d97dfa8ef5d707.png

成功被拦截

136be34314a57ba454d97dfa8ef5d707.png

三、ThinkPHP其他安全设置

3.1 关闭debug

在线上环境,开启Debug模式会导致如下危害

泄露网站敏感信息

在Thinkphp5.0.24版本开启Debug模式的时候,在特定情况下会导致mysql数据库账号密码泄露

在某些Thinkphp版本要开启Debug模式才会导致代码执行漏洞

一般配置文件项目地址中的/application/config.php 文件中

136be34314a57ba454d97dfa8ef5d707.png

3.2 设置日志输出

日志文件他存储在runtime/log/下面,上面也有讲解案例和危害,如果我们可以输出日志的内容就可以避免一些攻击,一般的日志输出会输出大部分的敏感信息,就想上面一样,登录的账号密码都会被记录,如果我们只输出错误的信息,就可以避免上面的敏感信息泄露出去

修复方法

只输出错误的日志

136be34314a57ba454d97dfa8ef5d707.png

或者直接关闭日志的输出

136be34314a57ba454d97dfa8ef5d707.png

四、其他安全设置

1、服务器密码和网站密码全部分开

2、数据库密码和网站密码。和FTP密码全部独立

3、密码建议为md5的随机强密码这样减少被爆破的风险

五、总结

Thinkphp的MVC的单一入口的解决方案可以解决掉很多的一些安全问题。但是还是需要配合一些安全产品来更多的安全风险

后续我们会持续更新更多的项目的安全策略。敬请期待

如果此文章对你有帮助请转发至朋友圈中让更多人能学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据分析 es hive_使用Hive和iReport进行大数据分析

大数据分析 es hive每个JJ Abrams的电视连续剧疑犯追踪从主要人物芬奇先生一个下列叙述情节开始&#xff1a;“ 你是被监视。 政府拥有一个秘密系统-每天每天每小时都会对您进行监视的机器。 我知道是因为...我建造了它。 “当然&#xff0c;我们的技术人员知道得更多。 庞大的…

java+jsp+网页制作,java+jsp+mysql网页制作总结(2)

错误&#xff1a;url通过get传递时汉字出错解决&#xff1a;url通过get传递时汉字会乱码&#xff0c;1.String name1request.getParameter("name");String name new String(name1.getBytes("ISO-8859-1"),"gbk");2.通过post传递参数错误&#x…

Redis聚类

本文是我们学院课程的一部分&#xff0c;标题为Redis NoSQL键值存储 。 这是Redis的速成班。 您将学习如何安装Redis并启动服务器。 此外&#xff0c;您将在Redis命令行中乱七八糟。 接下来是更高级的主题&#xff0c;例如复制&#xff0c;分片和集群&#xff0c;同时还介绍了…

域策略禁用usb

文档及模板可在 http://pan.baidu.com/s/1qYTcjTy 下载 pro_usb_users.adm 此模板可禁用到 指定盘符&#xff0c;针对用户策略 pro_usb_computers.adm 此模板 针对计算机&#xff0c;一般只要它就好了。 可以从 3 个方面下手 adm 配置 文件。注册表usb驱动其实 adm配置文件&…

Redis分片

本文是我们学院课程的一部分&#xff0c;标题为Redis NoSQL键值存储 。 这是Redis的速成班。 您将学习如何安装Redis并启动服务器。 此外&#xff0c;您将在Redis命令行中乱七八糟。 接下来是更高级的主题&#xff0c;例如复制&#xff0c;分片和集群&#xff0c;同时还介绍了…

Openstack入坑指南

什么是云计算 概念 云计算是一种基于互联网的计算方式&#xff0c;通过这种方式&#xff0c;共享的软硬件资源和信息&#xff0c;可以按需求提供给计算机和其他设备。用户不需要了解”云“中的基础设施细节&#xff0c;不必具有相应的专业知识&#xff0c;也无需直接控制。云计…

MATLAB如何用循环分割,利用Matlab进行分割提取浮游生物

我试图从扫描图像中提取浮游生物.大纲也不错,但是,现在我不知道如何提取图像,因此可以单独保存每个浮游生物.我尝试使用标签,但是有很多噪音,它标出了每一个规格.我想知道是否有更好的方法来做到这一点.这是我的代码&#xff1a;I imread(plankton_2.jpg);figure, imshow(I), …

第一个Python程序

在E:\Python 下新建一个hello.py文件&#xff0c;里面的内容是print(hello world) 进入命令提示窗格&#xff0c;输入E: 点击回车 输入 cd python 点击回车 输入Python hello.py 结果如图 转载于:https://www.cnblogs.com/lgqboke/p/5882049.html

20145219 《信息安全系统设计基础》第01周学习总结

20145219 《信息安全系统设计基础》第01周学习总结 教材学习内容总结 别出心裁的Linux命令学习法 1、Ubuntu快捷键 CTRLALTT:打开终端&#xff1b;CTRLSHIFTT&#xff1a;新建标签页&#xff1b;ALT数字N&#xff1a;终端中切换到第N个标签页&#xff1b;Tab:终端中命令补全&…

拉盖尔多项式 matlab,类氢原子的定态波函数

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp预备知识 球坐标系中的定态薛定谔方程&#xff0c;原子单位制本文使用原子单位制&#xff0e;类氢原子(hydrogen-like atom)被定义为原子核有 $Z$ 个质子(核电荷为 $Ze$)有一个核外电子的原子/离子&#xff0…

再论EM算法的收敛性和K-Means的收敛性

标签&#xff08;空格分隔&#xff09;&#xff1a; 机器学习 &#xff08;最近被一波波的笔试面试淹没了&#xff0c;但是在有两次面试时被问到了同一个问题&#xff1a;K-Means算法的收敛性。在网上查阅了很多资料&#xff0c;并没有看到很清晰的解释&#xff0c;所以希望可以…

杰尔·地狱

什么是JAR地狱&#xff1f; &#xff08;或者是classpath地狱&#xff1f;还是依赖地狱&#xff1f;&#xff09;在考虑使用Maven或OSGi等现代开发工具时&#xff0c;哪些方面仍然有意义&#xff1f; 有趣的是&#xff0c;似乎没有对这些问题的结构化答案&#xff08;即&#…

matlab实验符号计算答案,实验五matlab符号计算

实验五matlab符号计算 实验 5 符号计算 教师评分班级 学号 姓名实验日期 2014 年 6 月 17 日 星期 二 第 1 至 2 节课实验地点实验目的1. 掌握定义符号对象的办法2. 掌握符号表达式的运算法则以及符号矩阵运算3. 掌握求符号函数极限及导数的方法4. 掌握求符号函数定积分和不定积…

Java学习笔记之:Java String类

一、引言 字符串广泛应用在Java编程中&#xff0c;在Java中字符串属于对象&#xff0c;Java提供了String类来创建和操作字符串。 创建字符串最简单的方式如下: String str "Hello world!"; String类型是特殊的引用类型&#xff0c;我们也可以通过实例化的方式来创建 …

WildFly 10 CR 2发布– Java EE 7,Java 8,Hibernate 5,JavaScript支持热重载

昨天&#xff0c;WildFly团队发布了最新版本的WildFly 10 。 CR2很可能是预计于十月份发布最终版本之前的最后一个版本。 即使主要支持的Java EE规范是7&#xff0c;WildFly 8和WildFly 9仍具有许多新功能&#xff0c;该版本现在具有三个服务器版本&#xff0c;实现了Java EE 7…

openshift 部署_OpenShift Express:部署Java EE应用程序(支持AS7)

openshift 部署在过去的几年中&#xff0c;我越来越多地听说过“云”服务。 最初&#xff0c;我并不是很想尝试一下。 但是几个月后&#xff08;一年&#xff1f;&#xff09;&#xff0c;我决定看看这是怎么回事。 我从事Java EE开发已有7年以上&#xff0c;因此&#xff0c;我…

迪克逊准则matlab,浙江科技学院学报

引言传统的农业栽培需要遵循季节性及周期性的栽培规律,受外界环境的影响较大,相应的栽培技术无法得到良好的栽培结果[1]。而温室大棚通过环境控制器调节温室环境,为作物提供了合适的生长环境。因此,它在农业领域的应用越来越广泛,温室环境控制系统的研究成为人们关注的热点[2-5…

使用FlexDeploy对融合中间件应用程序进行自动化软件测试

自动化软件测试是任何软件组织都应执行的强制性活动之一&#xff0c;以保证其产品质量。 但是&#xff0c;此过程通常变得非常复杂&#xff0c;尤其是涉及由多个不同部分组成的现代复杂系统的自动化测试时。 所有这些部分都基于不同的技术&#xff0c;显然&#xff0c;应该使用…

java 反编译项目_Java 7 –反编译项目硬币

java 反编译项目大家好&#xff0c;该是从2012年开始写作的时候了。正如您在其他博客中可能已经看到的那样&#xff0c;有一些更改可以使您使用Java编程时的开发人员生活变得更加轻松&#xff1a;Diamond运算符&#xff0c;Switchs中的Strings&#xff0c;尝试使用资源&#xf…

Java 9代码工具:使用Java微型基准测试工具的实践会话

用肉眼看&#xff0c;基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题。 但是通常&#xff0c;这是幼稚的方法。 提供具有准确和可重复结果的有意义的基准并非易事。 在本文中&#xff0c;我们想向您介绍OpenJDK代码工具项目&#xff0c;尤其是JMH。 Java Microb…