几周以来,我的WordPress网站上引入了一个漏洞,我无法找到明确的方法删除它。我称之为“wp-info.php漏洞”,因为它会wp-info.php
WordPress目录中的某个位置的文件,有时被深埋。
此漏洞的症状不容易看到。网站的主要功能看起来没有受到影响,但当我查看访问日志时,我看到我自己的网站提供了一些奇怪的URL:
成人聊天生涯martunis van sant约会占星术黑人单身者免费个人广告。。。还有很多相似的
IMAGE REMOVED
该页面显示我自己的网站结构和菜单,但内容被一些垃圾文本取代,脚本被“img/plugins0.js”、“img/plugins1.js”取代。。。
该漏洞会创建wp-info.php
文件位于/wp-includes/ID3/
包含一些邪恶的base64编码代码的目录(或WP结构中的其他地方)。例如:
<? eval(base64_decode("ICBlc ..... A==")); ?>
解码后,我看到这个脚本
curl
对托管在中的URL的请求
doorsshost.com
.
调用此wp信息。php文件,则利用此漏洞修改。htaccess具有以下规则:
# BEGIN SYSTEM API
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} !myclearcode$ [NC]
RewriteRule ^(.+)$ wp-includes/ID3/wp-info.php?$1 [L]
# END SYSTEM API
我试图清理一切:删除wp信息。php文件和中的规则。htaccess文件,但在我清理了几个小时后,漏洞又回来了
wp-info.php
文件放置在其他位置。
我正在使用旧的WordPress版本(3.6.1),我将很快更新。但我不能保证更新将阻止漏洞再次出现。在更新之前,我想确切地了解安全漏洞在哪里,以及如何修复它。
我在这里发布这个问题是为了记录我为发现这个漏洞并将其删除而采取的行动。希望这能帮助其他人解决同样的问题。
SO网友:Fabien Quatravaux
为了在查看解决方案时限制漏洞攻击的影响,我编写了一个小插件来检查.htaccess
文件内容,并在文件被修改后恢复正确的文件。
<?php
/*
* Plugin Name: Fight the exploit
* Author: Fabien Quatravaux
* Version: 1.0
*/
register_activation_hook( __FILE__, \'install_fight_exploit\' );
function install_fight_exploit(){
wp_schedule_event(time(), \'hourly\', \'check_htaccess\');
}
function retore_htaccess() {
$res = copy( dirname(__FILE__) . \'/htaccess\', get_home_path() . \'.htaccess\' );
}
add_action( \'check_htaccess\', \'check_htaccess\' );
function check_htaccess(){
require_once( ABSPATH . \'wp-admin/includes/file.php\' );
$prod = file_get_contents( get_home_path() . \'.htaccess\' );
$should_be = file_get_contents( dirname(__FILE__) . \'/htaccess\' );
if( $prod != $should_be ) {
retore_htaccess();
$num = get_option( \'retore_htaccess_num\', 0 );
$num++;
add_option( "retore_htaccess_$num", time() );
update_option( \'retore_htaccess_num\', $num );
}
return ($prod == $should_be);
}
register_deactivation_hook( __FILE__, \'uninstall_fight_exploit\' );
function uninstall_fight_exploit(){
wp_clear_scheduled_hook(\'check_htaccess\');
}
正如您所看到的,每次
.htaccess
文件需要修改,我把它和时间一起登录到数据库中。一天半后,我发现在插件激活后的前24小时,
.htaccess
文件已修改
each time 计划的任务已运行。这意味着有某种自动机制可以将黑客技术重新引入
.htaccess
文件
然后,在最初的24小时后,不再进行任何修改,就好像该漏洞已被放弃一样。