sábado, 29 de septiembre de 2018

Wordpress xmlrpc.php: vulnerabilidades comunes y como explotarlas

¿De que se trata este post?

Es posible que haya visto un archivo xmlrpc.php en muchos sitios de Wordpress que visite, incluso que haya intentado buscar el error (el servidor XML-RPC solo acepta solicitudes POST) que aparece cuando visita http://sitio.com/wp/xmlrpc.php. En esta publicacion, intentare resaltar las vulnerabilidades comunes asociadas con el archivo xmlrpc.php.

¿Que es XML-RPC?

XML-RPC en Wordpress es en realidad una API o "interfaz de programa de aplicacion". Ofrece a los desarrolladores que crean aplicaciones moviles, aplicaciones de escritorio y otros servicios la capacidad de comunicarse con su sitio de Wordpress. La API XML-RPC que ofrece Wordpress les brinda a los desarrolladores una manera de escribir aplicaciones (para usted) que puedan hacer muchas de las cosas que puede hacer cuando inicia sesion en WordPress a traves de la interfaz web. Estas incluyen:

* Publicar una entrada
* Editar una publicacion
* Eliminar una publicacion
* Subir un nuevo archivo (por ejemplo, una imagen para una publicacion)
* Obtener una lista de comentarios
* Editar comentarios

Vulnerabilidades comunes en XML-RPC

Las principales debilidades asociadas con XML-RPC son: Ataques de fuerza bruta: los atacantes intentan iniciar sesion en WordPress utilizando xmlrpc.php.
Veamos como se hace realmente y como podria aprovechar esto mientras intenta probar un sitio de wordpress para detectar posibles vulnerabilidades.

Ataque de fuerza bruta

1.- Esto es lo que ve originalmente cuando intenta abrir xmlrpc.php ubicado en http://<tusitio.com>/<directoriowordpress>/xmlrpc.php




2.- Lo primero que debe hacer ahora es enviar una solicitud POST y enumerar todos los metodos disponibles, ¿por que? por que asi sabremos que acciones son posibles realizar y potencialmente usar una de ellas para un ataque. Para enumerar todos los metodos envie una solicitud POST con los siguientes datos, como se muestra en la imagen, obtendra una respuesta con todos los metodos disponibes.

<methodCall> 
<methodName> system.listMethods </methodName> 
<params> </params> 
</methodCall>



3.- Busque lo siguiente, si encuentra que estan disponibles, entonces podemos proceder con el ataque:

* wp.getUserBlogs
* wp.getCategories
* metaWeblog.getUsersBlogs

NOTA: hay algunos metodos mas, pero estos son los mas comunmente disponibles. Los he tratado antes, solo mencionando los que puedo recordar en este momento.

4.- Ahora, para realizar un ataque de fuerza bruta, envie lo siguiente en la solicitud POST, si conoce algun nombre de usuario valido que seria aun mejor, recomiendo usar wp-scan para encontrar una lista de nombres de usuarios validos, casi siempre las compañias no intentan evitar la enumeracion de nombre de usuarios de los sitios wordpress.

<methodCall> 
<methodName> wp.getUsersBlogs </methodName> 
<params> 
<param><value>admin</value> </param> 
<param><value>pass</value> </param> 
</params> 
</methodCall>



5.- Ahora cargamos intruder con Burp suite para realizar una ataque por fuerza bruta: https://arthusu.blogspot.com/2015/01/concepto-ataque-por-fuerza-bruta.html

Cuando obtenga un respuesta correcta tendra un 200OK o en funcion del tamaño de la respuesta, el inicio de sesion se mostrara correcto.


¿Otros Ataques?


XSPA o simplemente escaneo de puerto!

1.- Enumere todos los metodos y busque el siguiente:

'pingback.ping'

2.- Si lograste encontrar la cadena pingback.ping entonces continuemos e intentemos obtener un ping en nuestro servidor, puede usar netcat, apache, nodejs, etc. Inicie su servidor y envie la siguiente solicitud en los datos de la publicacion:

<methodCall> 
<methodName> pingback.ping </methodName> 
<params> <param> 
<value> <string> http://sitioaescanear.com.mx:8080 </string> </value> 
</param> <param> <value> <string>http://tusitio.com/wp/?p=1 </string> 
</value></param> </params> 
</methodCall>

Hay 2 cosas que deben llenarse aqui:
1) El enlace de su servidor
2) El enlace de alguna publicacion valida del sitio de wordpress que se usa para devolver la llamada al ping




en la respuesta, si obtiene faultCode y un valor mayor que 0 (<value><int>17</int></value>), significa que el puerto esta abierto + puede verificarlo revisando los registros del servidor.




No hay comentarios:

Publicar un comentario