Vamos a ver como auditar WordPress.
Lo primero que deberemos hacer en una auditoría de WordPress es comprobar la versión. La instalación por defecto de WordPress deja un fichero en la carpeta raíz, llamado «readme.html».
Como véis, se trata de un fichero html que podréis visitar sin problemas desde el navegador, y que muestra la información sobre la versión de WordPress que se encuentra instalada (obviamente será uno de los primeros archivos a eliminar tras instalar un WordPress, pero la inmensa mayoría no lo hace…).
Sabiendo la versión ya podréis googlear en busca de exploits que afecten a dicha versión de WordPress, pero eso lo dejaremos para la fase de explotación de vulnerabilidades, por ahora seguimos footprinteando 🙂
El siguiente paso será analizar el código fuente de algunas de las páginas del WordPress y buscar parámetros o comentarios que nos puedan dar más datos de la versión de WordPress para contrastarlos con el obtenido del readme.html (que podrían haber modificado a propósito para engañarnos)
En una instalación de WordPress habrá algunas carpetas importantes, la clave de todas ellas es la carpeta wp-content, y bajo la que colgarán las carpetas de la instalación de plugins o la de themes. Esto quiere decir que si buscamos en Google con el parámetro «inurl», por textos como «wp-content», «plugins» o «themes», encontraremos mucha información de utilidad. Además, podríamos acompañarlo del texto «index of» para ver si gentilmente nos ceden los fuentes de su wordpress en un listado de directorios.
Si hay algo que WordPress no hace muy bien (y los programadores de plugins no mejoran…) es gestionar los errores. Por ejemplo, si realizáis una petición a un archivo PHP de un plugin que espera recibir una serie de parámetros, y no le pasáis dichos parámetros, es muy posible que se produzca un error inesperado, que acabe en un Path Disclosure, con el que podremos ver la ruta de instalación del WordPress, lo que nos ayudará a ver si se trata de una instalación realizada en un Windows, un Linux, etc. entre otras cosas.
Además, si por casualidad, los bots indexan estos errores, nos encontraremos con problemas como el siguiente, al que llegaremos combinando las búsquedas anteriores con «Fatal error» o «Fatal error: Call to undefined function».
WordPress permite a través de los parámetros «?author_name=nombre» y “?author=ID”, añadidos a la raíz de la web (http://www.miwordpress.com/?author=1) ver la información y los artículos publicados por un usuario registrador. Nosotros lo utilizaremos con otro fin, el de comprobar si existe un usuario o no.
Podremos programarnos algunos scripts sencillos que recojan de un diccionario números y palabras con las que probar posibles nombres, pero para que la tarea sea más sencilla, W3af tiene ya entre sus utilidades un plugin para enumerar los usuarios, llamado «wordpress_enumerate_users«.
Una vez que hayamos enumerado los usuarios del WordPress ¿qué podremos hacer con ello?. Pues como ya os imagináis, los utilizaremos para intentar autenticarnos con ellos en el portal, bien intentando averiguar la contraseña por lógica o ingeniería social, probando algunas de las contraseñas más utilizadas o el propio nombre de usuario por ejemplo, o bien haciendo un ataque de fuerza bruta. En próximos posts de la cadena os explicaré como realizar un ataque de fuerza bruta con Metasploit para intentar averiguar las claves y por supuesto, también daremos algunos consejos para hacer que nuestro wordpress no sea vulnerable a los ataques de fuerza bruta.
¿Como hacerlo de forma automatica?
WPScan es una herramienta de seguridad de código abierto distribuida bajo licencia GPL que permite, a los profesionales de la seguridad y a los administradores web, evaluar las condiciones de seguridad de un sitio web mediante la exploración de las diversas vulnerabilidades conocidas dentro de una instalación de WordPress.
Con WPScan es posible definir los plugins instalados en WordPress con el siguiente comando:
wpscan --url http://localhost/laboratorio/ --enumerate p |
Para aquellos plugins que fueron detectados WPScan realiza un chequeo contra las vulnerabilidades conocidas en los mismos y en caso de que el resultado sea positivo, WPScan informa sobre la vulnerabilidad y suministra un enlace con más información, y en algunos casos, indica el exploit público para explotar la misma.
Otra funcionalidad permite enumerar a los usuarios que utilizan el gestor de contenidos.
wpscan --url http://localhost/laboratorio/ --enumerate user |
Si el proceso de enumeración de usuarios de WordPress es demasiado lento, podemos utilizar el argumento –threads para realizar multithreading. En el siguiente ejemplo, configuramos WPScan para enumerar todos los usuarios de WordPress en http://localhost/laboratorio/ utilizando 50 hilos.
wpscan --url http://localhost/laboratorio/ --enumerate user --threads 50 |
Si el gestor de contenidos WordPress tiene un gran número de usuarios, es recomendable dividir el proceso. Por ejemplo, en lugar de enumerar 1.000 usuarios a la vez, podemos enumerar los 100 primeros. Para ello especificamos el rango ID entre corchetes como en el siguiente ejemplo:
wpscan --url http://localhost/laboratorio/ --enumerate u[1-100] |
WPScan tiene un módulo que permite realizar fuerza bruta sobre aquellos usuarios que fueron enumerados con anterioridad mediante el uso de un listado de palabras o wordlist. Mediante este método es posible auditar la fortaleza de las contraseñas utilizadas por los usuarios del sistema. Es importante recordar que el talón de Aquiles de los usuarios siguen siendo las contraseñas.
También es capaz de especificar la versión de WordPress que se encuentra instalada en el servidor lo que puede utilizarse para verificar que se tenga la versión más actual del sistema de gestión de contenidos. Además, en caso de que se tenga instalado una versión vulnerable de WordPress, WPScan indica la información relevante sobre dichas vulnerabilidades.