discuz!X加固方案
1.1 项目概述
本项目旨在对基于discuz!X的校园网论坛进行安全加固,以确保论坛的数据库和后台管理系统的安全性,防止黑客的攻击和数据泄露。通过对论坛系统的安全漏洞进行分析和识别,针对性地进行安全加固,以提高论坛系统的整体安全水平。
项目的主要目标包括但不限于以下几点:首先,对数据库进行严格的用户安全管理,包括合理设置用户权限、限制对数据库的访问和操作权限,以及进行数据库数据的加密和脱敏等措施。其次,对数据表的前缀进行修改,以防止黑客通过猜测表结构进行攻击和数据窃取。接着,对后台管理系统进行安全加固,包括将默认的管理员用户名“admin”修改为其他随机的用户名,以及对后台管理登录文件名进行修改,增加系统的安全性,防止恶意登录和攻击。此外,对安装文件目录进行保护,限制对安装文件的访问权限,以防止黑客获取网站结构和敏感信息。最后,实施页面篡改的设置,确保网站页面内容的完整性和安全性,防止黑客对页面进行恶意篡改。
通过以上安全加固措施的实施,可以有效提高校园网论坛系统的安全性和稳定性,保护用户的隐私信息和数据安全,为用户提供更加安全可靠的网络环境和服务。
1.2 需求分析
-
数据库用户安全管理:对论坛系统的数据库用户进行细致的权限管理,包括创建具有最小权限的数据库用户,限制其对数据库的访问和操作权限,确保数据库的安全性和稳定性。同时,对敏感数据进行加密和脱敏处理,以保护用户信息的安全性。
-
数据表修改前缀:对论坛系统的数据表前缀进行修改,以防止黑客通过猜测表结构进行SQL注入等攻击,保护数据库的完整性和安全性。
-
后台管理用户名修改:将默认的管理员用户名“admin”修改为随机的、不易猜测的用户名,增加后台管理系统的安全性,避免黑客利用默认用户名进行恶意登录。
-
后台管理登录文件名修改:对后台管理登录文件名进行修改,增加系统的安全性,防止黑客对后台管理系统进行暴力破解和登录攻击。
-
安装文件目录保护:对安装文件目录进行权限设置和访问限制,防止黑客获取论坛系统的结构和敏感信息,提高系统的安全性。
-
防止页面篡改:实施页面篡改的设置,包括对页面文件的完整性进行验证和监控,以防止黑客对页面进行恶意篡改,保护用户信息和系统安全。
1.3 运行环境
PHPStudy、Apache、MySQL数据库等。
第二章 项目设计
2.1 设计思路
本项目基于大型校园网络,结合大型校园网特性,根据用户需求进行网络设计,保证各个通信阶段的配置完整,数据可达,项目需要搭建Web服务器,根据相关需求,服务器底层使用Linux服务系统,部署Linux相关功能,保证系统稳定性和安全性。本项目为一个仿真项目,此时可设计并创建与校园网相关的网站、数据库等。后期对校园网的数据通信模块、服务器模块、网站和数据库进行安全测试,找到存在的问题并进行加固。
2.2 功能设计分工
网络部分:搭建实验所需要的大型校园网络并使其中设备可以进行通信 数据库安全加固:MySQL数据库安全加固实现相关功能 网站搭建:搭建中小型校园网络信息登陆查询网站 渗透测试:挖掘网站漏洞,漏洞复现,分析漏洞原因,找出漏洞所在位置 安全加固:对系统进行安全加固和对扫描出来的漏洞进行加固
第三章 详细设计
3.1 数据库用户安全
首先,需要对数据库进行用户权限的细致管理,包括创建一个具有最小权限的数据库用户,限制其对数据库的访问和操作权限,确保数据库的安全性和稳定性。其次,对敏感数据进行加密和脱敏处理,以保护用户信息的安全性。可以考虑使用数据库管理系统提供的权限管理功能,结合加密算法对敏感数据进行处理。
3.2 数据库表前缀修改
数据表修改前缀:对数据表前缀进行修改,以防止黑客通过猜测表结构进行SQL注入等攻击。可以通过数据库管理系统或者论坛系统提供的工具,对数据表的前缀进行批量修改,确保数据库表的安全性。
3.3 后台管理用户名
后台管理用户名修改:将默认的管理员用户名“admin”修改为随机的、不易猜测的用户名,增加后台管理系统的安全性。可以通过论坛系统的后台管理界面或者数据库直接进行修改,确保管理员用户名的安全性。
3.4 后台管理登录文件名
后台管理登录文件名修改:对后台管理登录文件名进行修改,增加系统的安全性,防止黑客对后台管理系统进行暴力破解和登录攻击。可以通过修改系统文件名或者使用URL重写等技术手段,对后台管理登录文件名进行定制化设置,增强系统的安全性。
3.5 安装文件目录删除
安装文件目录保护:对安装文件目录进行权限设置和访问限制,防止黑客获取论坛系统的结构和敏感信息,提高系统的安全性。可以通过服务器的文件权限管理功能,对安装文件目录进行权限设置,限制对安装文件的访问权限。
3.6 页面篡改漏洞分析
防止页面篡改:实施页面篡改的设置,包括对页面文件的完整性进行验证和监控,以防止黑客对页面进行恶意篡改,保护用户信息和系统安全。可以通过网站安全防护软件或者自行开发的监控程序,对页面文件进行定期检查和验证,确保页面的完整性和安全性。
在对其网站安全检测的同时发现一处漏洞,该漏洞可导致论坛的后台文件可以任意的删除,导致网站瘫痪,后台无法登陆。
Discuz漏洞的检测与分析
该漏洞发生的位置在于source目录下的admincp文件夹里的admincp_forums.php代码里,用note编辑器打开查找到unlink函数调用的地方,看到漏洞产生的原因,搜索$_get{'replybgnew'],定位到代码。漏洞的使用有限制,必须是discuz管理员的权限,即使漏洞危害较小,也还是一处discuz的漏洞,如下图所示:
从上图可以看到代码首先会进行判断对于GET提交过来的参数会进行IF语句,从代码里获知当$multiset的值为真或者是为假的时候,就会将参数赋值为0,另外一个的IF语句是如何使用的,当IF下来的时候会进行安全检测,将parse_url参数里的结果进行检测,来确定前端提交过来的网址是否正确,代码执行到最后一步我们看到attachurl的变量内容,可以伪造恶意代码插入进去。
if(!$multiset){
if($_GET['delreplybg']){
$valueparse = parse_url($_GET['replybgnew']);
if(!isset($valueparse['host']) && file_exists($_G['setting']['attachurl'].'common/'.$_GET['replybgnew'])){
@unlink($_G['setting']['attachurl'].'common/'.$_GET['replybgnew']);
}
$_GET['replybgnet'] ='';
}
}
第四章 项目实施
4.1 数据库用户安全
在安装discuz程序时,创建一个mysql数据库用户和discuz数据库,只让创建的数据库用户对discuz数据库拥有创建、查询、修改等权限,以免有恶意用户sql注入对服务器所有数据库密码暴库风险。
增加一个用户d15cuz_user密码为Admin@123`,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作,这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
具体操作如下:
# 创建用户名
CREATE USER 'd15cuz_user' @'localhost' IDENTIFIED BY 'Admin@123';
接下来限制该用户对discuz数据库的操作权限:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON discuz.* TO 'd15cuz_user'@'localhost';
FLUSH PRIVILEGES;
结果测试:
分别在localhost和远程主机使用root账号和d15cuz_user登录数据库,查看登录结果:
-
在localhost分别使用root和d15cuz_user登录数据库:
-
在远程主机分别使用root和d15cuz_user登录数据库:
接下来使用新建用户“d15cuz_user”远程访问数据库,可以发现登录失败:
4.2 数据库表前缀修改
在安装discuz程序时,默认表前缀是pre。
建议修改为不容易被猜出来的表前缀,不容易猜出规则的表前缀名称,这样恶意用户在入侵你的网站,就不容易找到你的数据表名字是什么了。
建立论坛网站时建议修改如下:
此时在安装过程中,系统自动创建的数据表的前缀均以“d15css”为开头:
后台查询看效果如下:
4.3 后台管理员用户名
在安装discuz程序时,需要设置discuz管理后台管理员账号密码,默认管理员用户名是admin,建议可以修改为其他用户名,密码设置不要太简单,尽量复杂一些。防止被黑客使用爆破的方式破解管理员密码。建议修改为如下格式,同时密码存在一定的复杂度。
4.4 后台管理登录文件名
discuz程序安装完成后,管理后台登录通常是通过http://你的域名/admin.php,建议将admin.php修改为只有你知道的名字,以免被恶意用户随意测试账号密码进入登录。
任意用户如果获取后台管理中心的登录页面,都可以尝试爆破,造成严重影响。
此时将’admin.php‘进行修改,避免产生风险:
4.5 安装文件目录删除
discuz程序安装完成后,删除安装文件目录install,以免恶意用户利用discuz安装文件覆盖你的网站造成严重后果。
在未删除文件之前,可以使用一下脚本尝试对目标网站进行拓印:
import contextlib
import os
import queue
import requests
import sys
import threading
import time
import urllib3
FILTERED = ['.jpg', '.gif', '.png', '.css', '.js']
TARGET = 'http://192.168.63.211/discuz/upload'
THREADS = 10
answers = queue.Queue()
web_paths = queue.Queue()
def gather_paths():
"""获取文件目录"""
for root, _, files in os.walk('.'):
for fname in files:
if os.path.splitext(fname)[1] in FILTERED:
continue
path = os.path.join(root, fname)
if path.startswith('.'):
path = path[1:]
print(path)
web_paths.put(path)