Inyección de Shell Remota (Cache) en WordPress

  • Posted on: 3 August 2015
  • By: ReYDeS

WordPress es un software web el cual puede ser utilizado para crear sitios webs o blogs. Es al mismo tiempo libre y sin costo. WordPress y sus componentes asociados; como los plugins; tienen un extenso registro de vulnerabilidades de seguridad, los cuales son identificados y parcheados constantemente. Para la siguiente demostración se utiliza la versión de WordPress incluida en la Máquina Virtual OBWAP.

Las versiones de WordPress iguales o inferiores a 2.0.2 contienen una falla la cual permite a los usuarios maliciosos comprometer el sistema vulnerable. Este problema es activado debido a la ausencia de una limpieza apropiada de diversos campos cuando se registra o actualizar el perfil de un usuario, antes de ser almacenado en scripts PHP en los directorios /wp-content/cache/userlogins/ y /wp-content/cache/users/ dentro del directorio raíz. Esto permite a un atacante inyectar y ejecutar código PHP arbitrario mediante un caracter de nueva línea generando una perdida de integridad.

Descargado el código de explotación, el cual esta escrito en PHP, se procede a ejecutarlo utilizando la opción “-q” el cual define un modo silencioso. La opción “-d” define una variable para cualquier directiva permitida en el archivo php.ini, para este caso la variable “short_open_tag” la cual evalúa si la forma corta de las etiquetas de apertura de PHP deben ser permitidas.

$ php -q -d short_open_tag=on 6.php

Expuesta la forma de uso, se ejecuta el exploit definiendo la dirección IP del objetivo de evaluación, el directorio donde reside WordPress, un usuario y contraseña válidos y el comando a ejecutar en caso la explotación sea exitosa.

$ php -q -d short_open_tag=on 6.php 192.168.0.33 /wordpress/ user user ls -la

Los resultados expuestos indican una explotación fallida. La razón de esto es porque contraseña de la bases de datos no es vacía. El cual es uno de los requisitos previos para un primer intento de explotación.

Si la constante de nombre DB_PASSWORD no está vacía, se debe intentar averiguar su valor realizando un ataque por diccionario. Para esto se utiliza la opción “-D” del exploit.

$ php -q -d short_open_tag=on 6.php 192.168.0.33 /wordpress/ user user ls -la -D/home/samurai/Wordlists/john.txt

Si el ataque por diccionario es exitoso, la explotación se realiza satisfactoriamente.

Ahora es factible ejecutar comandos mediante la URL indicada en el mensaje expuesto.

Adicionalmente se ha creado una “backdoor” o puerta trasera de nombre “suntzu.php” en la misma carpeta.

Adicionalmente el exploit permite definir el número de puerto utilizando la opción “-p”, y un proxy utilizando la opción “-P”.

Fuentes:

https://www.exploit-db.com/exploits/6/
http://sourceforge.net/p/owaspbwa/tickets/6/
http://sourceforge.net/projects/owaspbwa/
http://php.net/manual/en/features.commandline.options.php

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Curso de Informática Forense