WordPress XML-RPC system.multicall多实例验证异常求助
WordPress XML-RPC Multicall 后续调用认证失败问题解决
在用JMeter对启用XML-RPC的WordPress站点做渗透测试时,遇到了一个问题:使用system.multicall批量调用wp.getUsersBlogs接口时,第一个调用填入正确用户名密码能得到正常响应,但第二个及后续调用即使用正确凭据,始终返回“incorrect username or password”错误。
请求报文示例:
POST /xmlrpc.php HTTP/1.1 Host: example.com <?xml version="1.0"?> <methodCall> <methodName>system.multicall</methodName> <params> <param><value><array><data> <value><struct> <member> <name>methodName</name> <value><string>wp.getUsersBlogs</string></value> </member> <member> <name>params</name><value><array><data> <value><array><data> <value><string>User1</string></value> <value><string>password1</string></value> </data></array></value> </data></array></value> </member> </struct></value> <value><struct> <member> <name>methodName</name> <value><string>wp.getUsersBlogs</string></value> </member> <member> <name>params</name> <value><array><data> <value><array><data> <value><string>User2</string></value> <value><string>Password2</string></value> </data></array></value> </data></array></value> </member> </struct></value> </data></array></value> </param> </params> </methodCall>
问题原因
这是WordPress XML-RPC的内置机制导致的:当使用system.multicall时,整个HTTP请求的认证上下文是全局共享的。第一个wp.getUsersBlogs调用成功通过认证后,后续所有调用会自动复用这个已建立的认证会话,不再读取后续调用里的用户名和密码参数。换句话说,第二个调用的User2和Password2会被直接忽略,系统会用第一个调用的User1身份去验证第二个请求,结果自然是认证失败。
解决办法
- 拆分独立请求:不要在同一个
system.multicall里批量测试多个用户,为每个用户单独发送一个独立的XML-RPC请求(直接调用wp.getUsersBlogs,不使用system.multicall)。这样每个请求都能独立处理自身的认证逻辑,不会互相干扰。 - 强制关闭会话保持(备选):如果一定要使用
multicall,可以尝试在JMeter中为请求设置Connection: close的HTTP头,强制关闭会话保持,但这种方法不一定能绕过WordPress内部的认证上下文复用逻辑,最可靠的方案还是拆分请求。
内容的提问来源于stack exchange,提问作者Darshil765
相关产品推荐
相关产品推荐

