WordPress:最新2.84更新的原因:密码重置漏洞(图文教程解决)

分类:Hack技巧 发表时间:2009年08月13日 字体大小:12号14号

security

昨天登录后台发现wordpress2.84版本提示更新,这距离2.83版本的发布才几天而已的时间。是什么原因导致wp更新如此迅速了。到国外的网站和wp官方搜索了资料一看,原来是密码重置的漏洞。如果你的wp版本是2.83或低于2.83的,你就要注意了。千万别得罪人啊,特别是玩wp的人,小心他把你的邮箱给发爆了(开个玩笑,呵呵!)。

那么,这个漏洞的所在是?你不妨自己小测一下。(以下所有图片都是我个人测试所截的图,仅供大家参考,我的密码已经更改,漏洞也已经修复,请勿试图攻击我哦!)。

1.测试漏洞步骤:

访问:http://你的域名/wp-login.php?action=rp&key[]=(通过该链接可以直接跳过邮件论证而将博客的管理员密码重置),系统提示如图:
confirm-password
此时你可以看到你的邮箱中有新邮件了,内容如下:
new-password
至此,你的密码重置成功。恭喜你,你发现wordpress的漏洞了!!

2.漏洞源代码所在:

打开wp-login.php文件(wordpress的更目录),找到185行代码:如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function reset_password($key) {
	global $wpdb;
 
	$key = preg_replace('/[^a-z0-9]/i', '', $key);
 
	if ( empty( $key ) )
		return new WP_Error('invalid_key', __('Invalid key'));
 
	$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_activation_key = %s", $key));
	if ( empty( $user ) )
		return new WP_Error('invalid_key', __('Invalid key'));
 
//后面的代码过长,在此省略.......
}

然后在转到275行:如下

1
2
3
4
5
6
7
8
9
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
$errors = new WP_Error();
 
if ( isset($_GET['key']) )
	$action = 'resetpass';
 
// validate action so as to default to the login screen
if ( !in_array($action, array('logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login')) && false === has_filter('login_form_' . $action) )
	$action = 'login';

接下来转到369行:如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
break;
 
case 'resetpass' :
case 'rp' :
	$errors = reset_password($_GET['key']);
 
	if ( ! is_wp_error($errors) ) {
		wp_redirect('wp-login.php?checkemail=newpass');
		exit();
	}
 
	wp_redirect('wp-login.php?action=lostpassword&error=invalidkey');
	exit();
 
break;

3.解决的办法:

1. 立即升级到2.84版本;

2. 修改wp-login.php文件,将190行的代码,如下:

1
2
	if ( empty( $key ) )
		return new WP_Error('invalid_key', __('Invalid key'));

修改为:

1
2
	if ( empty( $key ) || is_array( $key ) )
		return new WP_Error('invalid_key', __('Invalid key'));

4. 官方:

官方更新解决方法:http://core.trac.wordpress.org/changeset/11798

不错不错,已经有 个评论!
  1. 似乎这个测试不是admin安全漏洞的测试。

    你的这个操作,放在任何一个版本都可以用,这是一个取回(修改)密码功能。而2.8.3的漏洞是直接将密码更改了之后发电邮出去。

    而你这个操作是需要手工点击修改密码链接才会让新密码生效。

    • 谢谢你的提示,我也已发现问题了,文章重新更新!!谢谢!!

  2. 占个座位~

  3. 呵呵,好专业啊~~我按官方更新啦!

  4. 博客刚刚更新完毕…你的链接已经添好了啦…以后多多交流…

  5. 我的更新竟然失败。每次都是。

  6. 官方中文版出来了,后台升级即可。不过一般也没有人那么无聊,来重置你的密码。

  7. 很强大,我每次都是第一时间更新.

  8. 你好 Hiro
    有个问题想请教一下,怎样把博客标题插入自己的LOGO图片?
    新手不是很懂,所以想问一下。方便的话加我QQ:279186461,谢谢!

    • 在head标签之间加:<link rel=”shortcut icon” type=”images/x-icon” href=”<?php bloginfo(‘template_url’); ?>image/favicon.ico” />,其中favicon.ico是你的图标,记得要是ico文件哦!!

  9. 学习了,谢谢分享,请问hiro你贴代码用的是什么插件?

    • wp_codebox

  10. 升级了,没事了哈~
    wordpress最近可是频繁更新啊~

  11. 不知咋搞的,无法升级!!郁闷中

  12. 619

    昨天,我的一个博友也遇到了类似问题,不过现在解决了

我要评论

  • * *