网站被挂马检测工具
作者:休闲 来源:时尚 浏览: 【大 中 小】 发布时间:2026-10-17 06:12:51 评论数:
打开一个客户网站首页,网站右键查看源代码,被挂底部多了一行<script src="https://cdn.xxx-statics.com/track.js"></script>。马检这个域名我没见过。测工把js文件下载下来,网站里面是被挂一段经过混淆的代码,解码后指向一个境外IP。马检网站被挂马了。测工
挂马这件事,网站很多站长第一反应是被挂看首页有没有被篡改。其实现在很少直接改你首页了。马检攻击者更倾向于在页面里植入一段隐蔽的测工脚本,用户访问时悄悄加载,网站用来做流量劫持、被挂挖矿、马检或者跳转到博彩页面。首页看起来完全正常,但搜索引擎已经给站点打上了危险标记。
几种常见的检测手段
最直接的办法是搜特征字符串。在网站根目录下执行 grep -rn "eval(" .,或者搜 document.write、atob、fromCharCode 这类混淆常用函数。很多挂马代码为了隐藏自己,会用这些函数动态拼接出恶意链接。但这个方法有个问题:正常的js库也会用到这些函数,误报率高。我一般会配合文件修改时间来筛选,比如 find . -name "*.js" -mtime -7,把最近一周被改动过的文件列出来,再逐个看。
还有一种情况是恶意代码藏在数据库里。WordPress站点尤其常见,攻击者通过插件漏洞往wp_options表或者文章内容里插入脚本。这时候你翻遍主题文件也找不到问题。得进数据库搜 SELECT * FROM wp_posts WHERE post_content LIKE '%<script%'。我遇到过一回,恶意代码被base64编码后塞进文章摘要字段,前台调用摘要时解码执行,藏得很深。
第三方工具也能用。Sucuri SiteCheck 免费版可以扫外部可见的挂马迹象,输入域名就能跑。它检查的是浏览器实际加载的内容,能发现一些你翻源码时漏掉的东西。缺点是你没法控制它扫哪些页面,而且对后台登录后的页面无能为力。另一个选择是OWASP ZAP,可以配成代理模式,手动浏览网站时自动记录所有请求,然后分析响应里有没有可疑的外部资源引用。这个更适合开发阶段做安全测试。
一个真实的排查过程
去年帮一个朋友的博客做检查。他的站流量不大,但Google Search Console一直提示有恶意软件。我用grep扫了一遍主题目录,没发现异常。后来用 curl -I 请求首页,返回的HTML里多了一段iframe,指向一个俄罗斯域名。但浏览器直接访问却看不到这段代码。差别在哪?User-Agent。攻击者判断请求来自搜索引擎爬虫时就输出恶意代码,普通用户访问则正常显示。这种叫“cloaking”,专门骗搜索引擎。解决办法是模拟Googlebot的UA去请求页面,比如 curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://example.com,这样就能看到爬虫看到的内容。
找到问题后清理反而简单。删掉恶意文件,把数据库里的注入内容清掉,再改一遍所有管理员密码。但根因通常是某个插件版本太老,比如Contact Form 7的某个旧版本有文件上传漏洞。不更新插件,过几天还会被重新挂上。
日常怎么防
文件完整性监控比事后扫描有用得多。WordPress可以用Wordfence,它能对比核心文件和插件的哈希值,一旦有变动就发邮件告警。非WordPress的站可以考虑用AIDE或者Tripwire,原理一样,就是建一个文件指纹库,定期比对。设置好之后,你不需要每天手动去查,有变化它会告诉你。
另外,网站目录权限别给太高。很多挂马是因为上传目录有执行权限,攻击者传个php文件上去就能跑。把上传目录的php执行权限禁掉,php_flag engine off 写在.htaccess里,能挡掉一大批低级攻击。数据库账号也别用root,单独建一个只有增删改查权限的用户,就算被注入了,攻击者也没法通过SQL提权。
挂马检测不是一劳永逸的事。今天扫干净了,明天可能又被盯上。保持插件更新、定期看日志、发现异常文件及时处理,这三件事做到位,大部分问题都能在造成实质影响之前解决。
