mlrpc 是 WordPress 中进行远程调用的接口,而使用 xmlrpc 调用接口进行账号爆破在很早之前就被提出并加以利用。近日
SUCURI 发布文章介绍了如何利用 xmlrpc 调用接口中的
system.multicall
来提高爆破效率,使得成千上万次的帐号密码组合尝试能在一次请求完成,极大的压缩请求次数,在一定程度上能够躲避日志的检测。
0x01 原理分析
WordPress 中关于 xmlrpc 服务的定义代码主要位于 wp-includes/class-IXR.php
和 wp-includes/class-wp-xmlrpc-server.php
中。基类 IXR_Server 中定义了三个内置的调用方法,分别为 system.getCapabilities
,system.listMethods
和 system.multicall
,其调用映射位于 IXR_Server
基类定义中:
1
2
3
4
5
6
|
function
setCallbacks()
{
$this
->callbacks[
'system.getCapabilities'
] =
'this:getCapabilities'
;
$this
->callbacks[
'system.listMethods'
] =
'this:listMethods'
;
$this
->callbacks[
'system.multicall'
] =
'this:multiCall'
;
}
|
而基类在初始化时,调用 setCallbacks() 绑定了调用映射关系:
1
2
3
4
5
6
7
8
9
10
11
|
function
__construct(
$callbacks
= false,
$data
= false,
$wait
= false )
{
$this
->setCapabilities();
if
(
$callbacks
) {
$this
->callbacks =
$callbacks
;
}
$this
->setCallbacks();
// 绑定默认的三个基本调用映射
if
(!
$wait
) {
$this
->serve(
$data
);
}
}
|
再来看看 system.multicall
对应的处理函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|