游客发表
打开浏览器,检查输入网址,网站页面正常加载。否入没人会觉得有什么问题。检查但服务器上可能正跑着一个你没上传过的网站PHP文件,名字叫`wp-cache.php`,否入藏在`wp-content/uploads/2024/`目录下。检查它不干别的网站,只等一个特定参数,否入然后执行你发过去的检查任何命令。
这就是网站网站被入侵后最常见的状态——表面一切正常。攻击者不傻,否入不会把你的检查首页换成黑底绿字的黑客宣言。他们要的网站是长期控制,悄悄用你的否入服务器发垃圾邮件、挂钓鱼页、或者把访问者的浏览器当成挖矿工具。你从浏览器端根本看不出来。
真正要检查,得从文件系统开始。登录服务器,先看网站根目录下最近修改过的文件。Linux下一条命令:
find /var/www/html -type f -mtime -7 -name "*.php" 这会列出七天内改动过的PHP文件。如果你上周没更新过插件、没改过主题、没发过新文章,那这些文件就有问题。我见过一个案例,攻击者把一个正常主题的`functions.php`末尾加了二十行混淆代码,前面全是对的函数定义,只有最后一段用`eval`执行外部请求。肉眼扫一眼根本发现不了。
再看上传目录。WordPress的`wp-content/uploads`里只应该有图片、PDF这类静态文件。出现`.php`文件就是异常。有些老漏洞允许上传伪装成图片的PHP,文件头是GIF89a,后面跟`<?php system($_GET['c']); ?>`。用`find`命令找:
find /var/www/html/wp-content/uploads -name "*.php" 有输出就值得警惕。当然也可能是某些插件故意放进去的,但概率极低。
数据库也不能放过。WordPress的`wp_options`表里,`siteurl`和`home`两个字段经常被改。攻击者把这两个值改成自己的域名,所有流量就导过去了。还有`wp_posts`表,可能多出几篇你看不懂的文章,内容是一段JavaScript或者隐藏的iframe。用phpMyAdmin或者命令行查:
SELECT * FROM wp_options WHERE option_name IN ('siteurl','home'); 再查`wp_users`表,看有没有多出来的管理员账号。攻击者通常加一个名字很普通、邮箱乱填的账户,比如`admin2`、`support`。你如果只用自己那个账号登录,永远发现不了。
服务器日志是另一个关键。看访问日志里有没有奇怪的POST请求。比如大量请求发到`/wp-login.php`,但返回状态码是200而不是302,说明可能被暴力破解成功了。或者访问`/xmlrpc.php`的频率异常高,那是攻击者在利用pingback漏洞。命令行下:
grep "POST /wp-login.php" /var/log/nginx/access.log | awk '{ print $1}' | sort | uniq -c | sort -rn | head 如果某个IP一天试了几千次,而且最后出现了200响应,基本可以确定被攻破了。
还有更隐蔽的——计划任务。Linux的crontab里可能被加了定时任务,每隔几分钟从远程服务器下载一个脚本执行。用`crontab -l`看当前用户的,再检查`/etc/cron.d/`和`/var/spool/cron/`。有些恶意软件还会伪装成系统进程,名字叫`[kworker/0:1]`这种带方括号的,实际是可执行文件。
检查完这些,如果都没问题,也别急着放心。有些后门是内存马,不落地文件,只存在于PHP-FPM进程里。那种得用`strace`或者专业工具查。普通站长做到上面几步,能揪出九成以上的常见入侵。
最后说一个我自己的习惯:每次改完代码或者更新插件,我都会用`md5sum`把整个网站目录跑一遍,存成一个清单。下次觉得不对劲,再跑一次,对比差异。比任何扫描工具都直接。网站安全这事,没有一劳永逸,只有定期翻看。
友情链接