Bienvenidos a un nuevo post, donde veremos cómo aprovechar la vulnerabilidad conocida CSFR de WordPress en su versión 5.1 para realizar un XSS Stored y finalmente obtener un RCE. Si quieres saber más sigue con el post!
Introducción
Para empezar con este post, vamos a explicar los ataques que se ven involucrados a lo largo de este post. Para esta primera etapa vamos a explicar en que consiste la vulnerabilidad CSFR.
Cross Site Request Forgery (CSRF)
Este ataque se prepara desde un inicio, un atacante deberá infectar una web legítima o una web preparada por el mismo con código malicioso, este código malicioso utilizará la cookie de sesión de una web secundaria, por ejemplo el inicio de sesión en un WordPress, una vez el usuario ha visitado dicho sitio web infectado, sus credenciales serán utilizadas para lo que el atacante quiera realizar, por ejemplo crear un comentario, modificar plugins, etc y todo esto en la web secundaria. En resumen, se trata de un secuestro de cookies de un sitio web secundario a través de una web principal maliciosa.
Una vez explicada la técnica, vamos a ver una imagen la cual describe perfectamente este ataque:
Ataque stored cross site scripting (XSS)
Principalmente, esta técnica se centra en la inyección de código malicioso con el fin de sustraer información, credenciales, propagar amenazas, etc. Dentro de los XSS existen distintos tipos de ataque, en este caso nosotros vamos a utilizar el tipo «Stored», este tipo de ataque XSS se centra en inyectar código malicioso persistente en el sitio web vulnerado. Este tipo de ataque es más peligroso que el otro tipo «reflejado», ya que este afectaría a cualquier usuario que accediese a la zona del sitio web donde se encuentra el código malicioso.
A continuación podemos ver un esquema donde se podrá visualizar la inyección del código malicioso y como se sirve a los usuarios el contenido infectado:
Remote Code Execution (RCE)
Como ya sabemos todos los que estamos en este mundillo, el objetivo final o lo que esperamos es ejecutar código remoto y que así nos devuelva una shell y tener permisos totales en el equipo víctima, esto sería el mundo ideal. Este ataque principalmente, se centra en aprovechar vulnerabilidades o fallos en el software de los equipos víctima para ejecutar código remoto malicioso, esto nos permitirá obtener como ya he dicho Shell’s, DDoS y cualquier cosa que imaginemos.
A continuación, vemos un esquema donde se podrá apreciar el flujo de explotación de dicha técnica:
1. Explotación CSFR + XSS + RCE.
En este apartado vamos a comprobar que vulnerabilidades residen en la versión 5.1 de WordPress e intentaremos realizar la explotación. Para esta versión, se ha reconocido una vulnerabilidad reconocida como “CSFR”, la cual consiste que una víctima tenga iniciada sesión en la plataforma, así el atacante genera una web con código malicioso (realizar cambio de contraseña, crear un post, generar un usuario, etc) que al ser visitada automáticamente ejecutaría la acción del código malicioso con las cookies de sesión almacenadas de la víctima.
La vulnerabilidad “CSFR” fue localizada a los inicios de WordPress pero por diversos motivos no se ha podido corregir dicha vulnerabilidad sin hacer que fallase WordPress.
1.1. CSFR.
Para comprobar que nuestro WordPress de laboratorio es vulnerable. Vamos a proceder a generar el siguiente código, el cual almacenaremos en un servidor web de nuestra propiedad, en nuestro caso lo alojaré en la máquina Kali Liinux que estamos utilizando para las pruebas. Al visitar el servidor web que aloja dicho archivo, este provocará que cree un comentario en el primer post del blog, en este caso es el post “Hello world”:
Como requisito previo a visitar dicho archivo, es necesario que la víctima tenga iniciada sesión en WordPress:
El siguiente paso, será visitar el código malicioso desde el equipo donde la víctima haya iniciado sesión en WordPress:
Al visitar dicho sitio web, automáticamente se redirigirá al WordPress de la víctima y creará un comentario con el valor “HACK”:
1.2. XSS stored.
En este caso, para realizar un XSS y realizar un ByPass de los protocolos de sanitización de código de WordPress (wp_filter_post_kses) ya que WordPress es muy estricto con las etiquetas en los comentarios, realizaremos la siguiente modificación en nuestro código malicioso:
Esto permitirá tener un array de los atributos con dobles comillas, que sería lo necesario para realizar el ByPass de las medidas de WordPress. Por otra parte, este código al ser visitado el enlace, generará una alerta con el valor 0. Si volvemos a visitar la web, nos generará el comentario de la siguiente manera (se ha cambiado de navegador debido a que Safari detecta el XSS):
1.3. RCE.
El siguiente paso que vamos a intentar, será la ejecución de código remoto, en este caso, vamos a intentar ejecutar el siguiente código a través de la vulnerabilidad XSS:
Este código, permite gracias a la vulnerabilidad CSFR, generar un token de autenticación para posteriormente mediante la funcionalidad de modificación de plugins, modificar el plugin de Akismet para introducir en el plugin “<?php system($_GET[cmd];)” lo cual permitirá mediante el navegador realizar una ejecución de código remota y así realizar una reverse shell. El primer paso que vamos a realizar es modificar nuestro archivo “malcode.html” el cual visitará la víctima para explotar CSFT + XSS y ejecutar nuestro código malicioso para modificar el plugin de akismet para provocar un RCE:
Como se puede observar, se ha modificado el contenido de “onclick”, en nuestro caso, para poder añadir las cadenas de texto, lo hemos realizado concatenando sus valores en ASCII. Antes de que la víctima visite esta web maliciosa, nuestro WordPress no tendrá ningún comentario:
Y el archivo index.php del plugin “akismet” tendrá el siguiente contenido:
Cuando la víctima visite el sitio web malicioso, automáticamente, se creará un comentario en su WordPress explotando CSFR y XSS Stored:
Tras visitar el sitio web, veremos que nos redirige y nos muestra el comentario que se ha creado:
Al inspeccionar dicho elemento, vemos que dicho comentario viene con “paquete”, el cual es la ejecución de nuestro código malicioso:
En el momento en el que hacemos click sobre el comentario, este llamará al archivo malicioso para modificar el archivo index.php de akismet:
Tras ejecutar nuestro código malicioso, podremos observar que se ha modificado el archivo index.php de nuestro plugin:
De esta manera, podemos acceder vía URL e interactuar con el sistema gracias a la función System():
En caso de querer una Reverse Shell, podemos utilizar Netcat para ello. Lo primero que vamos a realizar, será poner nuestro servidor a la escucha:
Posteriormente buscamos un URL encoder online para pasar nuestro comando Linux y que pueda ser interpretado a través de una URL:
Copiamos el resultado y lo pasamos por nuestro interprete de comando vía web:
Obteniendo como resultado nuestra Shell:
Considero que esta práctica demuestra que el conocimiento de diferentes técnicas de ataque es algo muy importante, debido a como se ve en esta explotación, gracias a diversas técnicas, una vez entrelazadas y comunicadas se puede llevar a exponer un sistema.