gpt4 book ai didi

php - 了解 Wordpress 漏洞

转载 作者:IT王子 更新时间:2023-10-29 00:04:43 33 4
gpt4 key购买 nike

最近披露了一个影响 WordPress 2.8.3 并允许管理员用户通过更改密码将其帐户锁定的漏洞。

This post关于全面披露的详细信息,并包括相关的代码片段。该帖子提到“您可以滥用密码重置功能,绕过第一步,然后通过向 $key 变量提交数组来重置管理员密码。”

我对熟悉 PHP 的人更详细地解释错误感兴趣。

受影响的人应该update到新的 2.8.4 版本,显然修复了这个缺陷。

wp-login.php:
...[snip]....
line 186:
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'));
...[snip]....
line 276:
$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';
...[snip]....

line 370:

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;
...[snip ]...

最佳答案

所以 $key 是查询字符串中的一个数组,带有一个空字符串 ['']

http://DOMAIN_NAME.TLD/wp-login.php?action=rp&key[]=

使用数组调用 reset_password,然后调用 preg_replace:

 //$key = ['']
$key = preg_replace('/[^a-z0-9]/i', '', $key);
//$key = [''] still

因为preg_replace接受一个字符串或一个字符串数组。它的正则表达式不替换任何内容并返回相同的数组。 $key 不为空(它是一个空字符串数组)所以会发生这种情况:

 $user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users 
WHERE user_activation_key = %s", $key));

现在,我需要阅读 wordpress 源代码,了解 prepare 的行为......

更多:

所以准备电话vsprintf产生一个空字符串

$a = array('');
$b = array($a);
vsprintf("%s", $b);
//Does not produce anything

所以SQL是:

SELECT * FROM $wpdb->users WHERE user_activation_key = ''

这将显然匹配管理员用户(我想是所有没有 activation_keys 的用户)。

就是这样。

关于php - 了解 Wordpress 漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267998/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com