白标与品牌定制、免费登录页面定制器 <= 3.4.29 - 通过账户接管的未认证权限提升
wp_update_user( $userdata )
│
├── wp_hash_password( $userdata['user_pass'] ) ← 第2709行:已哈希
│
└── wp_insert_user( $userdata )
│
├── $user_pass = $userdata['user_pass'] ← 第2228行:已哈希
│
├── $data = compact('user_pass', ...) ← 第2469行:已哈希
│
├── apply_filters('wp_pre_inserter_id)
│ │
│ └── Branda: pre_insert_u
│ │
│ ├── 查询 wp_sig['user_login']
│ ├── 如果 meta['pas
│ │ $data['user_ta['password'])
│ │ ↑
│ ┌───
│ │
│ ↓
│ 双重哈希:wp_d($raw))
│
└── $wpdb->update( $wpdb->users, $data, ... ) ← 第2515行:双重哈希已存入
/**
* BRANDA - signup-password.php
* Filter: wp_pre_insert_user_data
*/
public function pre_insert_user_data( $data,
// ❌ 未检查:if ($update) return
// ❌ 此过滤器对插入和更新都生效
if ( is_multisite() ) {
global $wpdb;
// ❌ $data['user_login'] 来自 POST 以及编辑用户
$query = $wpdb->prepare(
"SELECT meta FROM {$wpdb->signup
$data['user_login'] // ← 可被攻击者修改
);
$result = $wpdb->get_var( $query );
$meta = maybe_unserialize( $result
if ( is_array( $meta ) && isset( $me
// ❌ 双重哈希:WordPress 在此过滤器运行前已经进行哈希
// $meta['password'] = "mysecret
// wp_hash_password("mysecret"password(来自 WP core)
// wp_hash_password("$P$Bxyz..."(来自 Branda)
$data['user_pass'] = wp_hash_pas
unset( $meta['password'] );
$wpdb->update(
$wpdb->signups,
array( 'meta' => maybe_seria
array( 'user_login' => $data
);
}
return $data;
}
// ...
}
// wp-includes/user.php:2706
if ( ! empty( $userdata['user_pass'] ) && $u_user_data->user_pass ) {
$plaintext_pass = $userdata['user
$userdata['user_pass'] = wp_hash_passwor // ← 哈希 #1
}
// wp-includes/user.php:2228 (UPDATE 路径)
$user_pass = ! empty( $userdata['user_pass'] $old_user_data->user_pass;
// $user_pass 现在 = "$P$Bxyz...已哈希"
// wp-includes/user.php:2505
$data = apply_filters( 'wp_pre_insert_user_dd, $userdata );
// Branda 过滤器运行,$data['user_pass'] 从第2228行开始已哈希
┌─────────────┬──────────────────────────┐
│ user_login │ meta (serialized) │
├─────────────┼──────────────────────────│
│ victim_user │ a:1:{s:8:"password";s:10:"H4cker123!"}│
└─────────────┴──────────────────────────┴
┌────────────────────────────────────────────┐
│ 字段:username │
│ 值:victim_user ← 已修改 │
└────────────────────────────────────────────┴
wp_update_user({ID: 2, user_login: "victim_user", ...})
│
├── user_pass = wp_hash_password(old_password) ← 哈希 #1
│
└── wp_insert_user({ID: 2, user_login: "victim_user", user_pass: "$P$Bhash1"})
│
└── apply_filters('wp_pre_insert_user_data', $data, true, 2)
│
└── Branda: pre_insert_user_data()
│
├── $data['user_login'] = "victim_user"
│
├── SELECT meta FROM wp_signups WHERE user_login = "victim_user"
│ → meta = 'a:1:{s:8:"password";s:10:"H4cker123!"}'
│
├── $meta['password'] = "H4cker123!"
│
└── $datword("H4cker123!")
← 哈希 #2(双重!)
┌────┬────────────┬──────────────────────────────────┐
│ ID │ user_login │ user_pass │
├────┼────────────┼──────────────────────────────────┼
│ 2 │ victim_user│ $P$Bhash2 ← 双重哈希! │
└────┴────────────┴──────────────────────────────────┴
- 用户名:victim_user
- 密码:H4cker123! 但被哈希了2次
- 登录失败!→ 账户锁定
- 如果 meta 尚未清理,使用注册凭据登录
- 或者使用相同的 user_login 再次注册