xmlrpc 是 WordPress 发布中进行远程调用的接口,而使用 xmlrpc 调用接口进行接口爆破在很早之前就被提出并使用。有机会在近期的一次演讲中表现出极大的勇气组合尝试完成,在一定程度上避免请求完成。
原理分析
WordPress中关于xmlrpc服务的定义主要是wp-includes/class-IXR.php和wp-includes/class-wp-xmlrpc-server.php中。基类IXR_Server中定义了三个集合的调用方法,分别为system.getCapabilities,system.listMethods 和 system.multicall,其引用映射类定义 IXR_Server 基中:
而基类在初始化时,调用setCallbacks()绑定了调用映射关系:
再来看看 system.multicall 的处理函数:
每个XML程序会解析请求传递的结果,可以通过多种代码调用中的一个接口请求请求,并最终有请求返回的结果。
一来,就可以端将500种甚至是10000种密码一次爆破尝试包含在请求中,会顺利处理完并返回结果,这样极大地提高了爆破的功效,利用多个服务接口压缩了请求次数,1000 种检测尝试泄露了在目标服务器上留下的日志,有一定的安全隐患。
通过阅读 WordPress 中 xmlrpc 相关处理的代码,就能调用大量的 xmlrpc 调用都验证了用户名和密码:
通过搜索上述能够获取所有使用方法进行爆破的调用方法列表如下:
这里是用参数传递的最直接的获取信息。
将包含两个子服务调用的 XML 请求发送到 xmlrpc 服务端入口,若目标开启会 xmlrpc 返回类似如下的信息:
该结果中可以看到其中相同的密码组合,并以集中形式将结果返回,通过某种方式可以极大地提高从一次爆破处理效率。