Según WikiPedia, XML-RPC es un protocolo de llamada a procedimiento remoto que usa XML para codificar los datos y HTTP como protocolo de transmisión de mensajes, creado por Dave Winer (Userland Software) y Microsoft en 1998.
A pesar de que este protocolo tiene mucho más tiempo de lo que yo con el uso de computadoras, recién hace 3 meses que conozco de la existencia de éste y algo que me llama la atención es el soporte para invocar múltiples métodos en una sola petición HTTP -- aunque en realidad depende si el servidor XML-RPC implementa/soporta este tipo de llamadas.
Por ejemplo, el servidor XML-RPC de WordPress soporta este tipo de llamadas gracias a Incutio XML-RPC Library:
require_once( './class-IXR.php' );
$client = new IXR_ClientMulticall( 'http://www.buayacorp.com/xmlrpc.php' );
$client->debug = true;
$client->addCall('demo.sayHello');
$client->addCall('demo.addTwoNumbers', 10, 1);
$client->query();
print_r($client->getResponse());
?>
Lo que se envía y recibe del servidor:
Host: www.buayacorp.com
Content-Type: text/xml
User-Agent: The Incutio XML-RPC PHP Library (multicall client)
Content-length: 652
<?xml version="1.0"?>
<methodCall>
<methodName>system.multicall</methodName>
<params>
<param><value><array><data>
<value><struct>
<member><name>methodName</name><value><string>demo.sayHello</string></value></member>
<member><name>params</name><value><array><data>
</data></array></value></member>
</struct></value>
<value><struct>
<member><name>methodName</name><value><string>demo.addTwoNumbers</string></value></member>
<member><name>params</name><value><array><data>
<value><int>10</int></value>
<value><int>1</int></value>
</data></array></value></member>
</struct></value>
</data></array></value></param>
</params></methodCall>
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value>
<array><data>
<value><array><data>
<value><string>Hello!</string></value>
</data></array></value>
<value><array><data>
<value><int>11</int></value>
</data></array></value>
</data></array>
</value>
</param>
</params>
</methodResponse>
Array
(
[0] => Array
(
[0] => Hello!
)
[1] => Array
(
[0] => 11
)
)
Haciendo uso de este tipo de llamadas y gracias a ciertas características de WordPress, fue posible hacer funcionar el tan publicitado exploit para una vulnerabilidad que afecta a casi todas las versiones de este CMS.