在一次修改WordPress主题的时候,很意外的发现每个主题文件的头部都有一段这样的代码:
if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54"]); ...
代码具体是干什么的不知道,网站显示也不会有任何异常,可是我们不能任由恶意代码这样蹂躏我们的主题,于是Goolge了一下,在万能的stackoverflow上发现了解决办法。
清理恶意代码的方法
下面是一段bash脚本,把脚本放在服务器上,执行脚本./remove_malware.sh /var/www/wp_path/ clean
即可移除恶意代码。
#!/bin/bash
#
# This script remove malware of PHP files.
#
if [[ -z "$1" ]]; then
echo "Directory where to find is required."
else
grep -rnwl $1 --include \*.php -e "\\\\x48\\\\124\\\\x54\\\\120\\\\x5f\\\\125\\\\x53\\\\105\\\\x52\\\\137\\\\x41\\\\107\\\\x45\\\\116\\\\x54" | while read -r filename ; do
if [[ ! -z "$2" ]]; then
echo "Found file $filename. Cleaning..."
awk 'BEGIN {matches=0} matches < 1 && /1/ { sub(/^.*<?php/,"<?php"); matches++ } { print $0 }' $filename > $filename.purged
mv $filename $filename.bck
mv $filename.purged $filename
else
echo "Found file $filename."
fi
done
echo "Done."
fi
经测试,脚本可能会误判正常的文件,删掉正常文件的第一行代码,不过误判的几率比较小,以防万一,建议删除之前把网站整体备份一下。
上面脚本执行后,会生成一些后缀为.bck
的备份文件。如果需要清理这些文件,运行以下命令即可。
find . -name *.bck | xargs rm -vf