您现在的位置是:休闲 >>正文
网站被挂马怎么才找出挂马的文件
休闲2125人已围观
简介服务器上跑着一个企业站,某天百度搜索结果里突然多出博彩关键词。点进去一看,页面底部被注入了一段 ``。这就是典型的挂马。文件肯定被改过,但几万个文件里,哪个是脏的? 别急着用 `grep` 全盘搜。先 ...
服务器上跑着一个企业站,网站某天百度搜索结果里突然多出博彩关键词。被挂点进去一看,找出页面底部被注入了一段 ``。挂马这就是网站典型的挂马。文件肯定被改过,被挂但几万个文件里,找出哪个是挂马脏的?
别急着用 `grep` 全盘搜。先做时间锚定。网站攻击者改文件,被挂修改时间会变。找出找最近三天内被改过的挂马 `.php`、`.js`、网站`.html`,被挂范围能缩到几十个。找出命令很简单:`find /www -type f -mtime -3 -name "*.php"`。如果站点大,把 `-mtime -3` 改成 `-mtime -1`。我见过一个案例,攻击者只改了一个 `index.php`,但里面插了 `eval($_POST['x'])`,用时间筛一分钟就定位了。
但时间不是万能的。有些老练的挂马会伪造 `mtime`。这时候看文件大小异常。正常 `footer.php` 也就 2KB,突然变成 4KB,里面多了一行加密代码。用 `find /www -type f -size +50k -name "*.php"` 先排掉大文件,小文件里再比对。最好本地留一份干净备份,用 `diff` 跑一遍。没备份?那就搜特征字符串。常见的有 `base64_decode`、`eval`、`assert`、`preg_replace` 带 `/e` 修饰符、`document.write` 后面跟乱码。注意,有些正常程序也用 `base64`,比如图片验证码。所以别一棍子打死,看上下文。
还有一个盲区:`.htaccess` 和 `nginx.conf`。挂马不一定改 PHP,可能改重写规则,把所有流量劫持到某个 IP。检查 `RewriteRule` 有没有指向陌生域名。去年一个客户就是 `.htaccess` 里被加了 `RewriteCond %{ HTTP_USER_AGENT} Baiduspider` 然后跳转,普通用户看不到,只有百度蜘蛛中招。
数据库也别放过。有些挂马不写文件,直接往 `wp_options` 表里塞 `