Hola amigos, conozco la comunidad DragonJAR desde hace mas de 4 años
donde llegue a ser de los usuarios mas activos, pero en este tiempo de
conocer a la comunidad es la primera vez que publico algo en el blog
principal. Quería fuera algo especial y espero poder llenar las
expectativas del publico exigente en calidad de artículos técnicos que
visita DragonJAR.
La idea del articulo conforme fui desarrollando e investigando sobre
el tema, cambio radicalmente de como se contemplo al principio, así que
lo dividiré en dos secciones.
- Como es la enumeración de Usuarios de wordpress hoy en día.
- Dar a conocer el script que escribí wp_users.sh
Pero como suelo hacer, primero quiero dar a conocer un poco del
contexto sobre por que me metí a este tema; Realmente yo no tenia
contemplado hacer un script para esta tarea, puesto que ya existen
programas, plugins y scripts que hacen la misma tarea.
Todo esto empezó
cuando mi blog personal (Neobits.org) que hace uso del famoso gestor de contenido wordpress fue atacado. En ese momento me metí bastante a estudiar
“Hardening para wordpress”, aunque mi blog tenia medidas de
seguridad
suficientes para creerlo “seguro”, fui vulnerado. Hoy en día las
medidas de seguridad que implemente en mi Blog son mucho mayores a ese
entonces y creo hasta ahora me funcionan bien.
En este punto varias personas me han pedido les comparta un manual de
Hardening, y aunque en internet hay varios y varios tips, decidí crear
mi propia cadena de tips, en las que me baso yo. Algunas recomendaciones
son las que wordpress oficialmente nos recomienda, otras son de
desarrolladores de plugins, otras de profesionales de la Seguridad
Informática y las demás son en base a mi experiencia.
Todos estos tips y manual que voy creando espero poder presentarlo a
la comunidad informática en “Campus Party México 4″. Si es que logro
contactar al encargado de Área de Redes y Seguridad. Así que si les
interesa pueden ayudarme para que lo presente en #CPMx4 =P
En mi investigación me encontré con este tema taaaaaaan sonado y
“común”. Donde se dice es muy sencillo sacar los usuarios de wordpress
(Y realmente lo es). Y aunque existen varias soluciones para lograr este
objetivo, me di cuenta que varios de ellos no me ofrecen los resultados
que esperaría…Aquí fue donde decidí crear mi pequeño script (Unas 3
líneas) como PoC.
Para unos días mas tarde el script creció a 100+ Líneas y ofrece
buenos resultados (Mejores que algunas herramientas conocidas en ciertos
casos).
Sin mas preámbulo entremos en tema.
Enumeración de Usuarios
¿Para que obtener los usuarios de wordpress de una página?
-obtener los nombres de usuario es una parte muy importante en una
prueba de intrusión, ya que obteniendo estos, podemos dirigir un ataque
de fuerza bruta a esos usuarios para ver si podemos ingresar al portal y
de ahí tratar de escalar privilegios, subir una webshell etc…
Encontré varias opciones para lograr enumerar usuarios y aquí probaremos algunas de las mas “usadas y recomendadas”
- Flunym0us (Flu-project y enelpc.com)
- Metasploit (Con el modulo wordpress_login_enum)
- wpbf.py
- w3af (Plugin wordpress_enumerate_users)
Flunym0us
Flunym0us es un script programado en python creado por
Flu-project.com y enelpc.com. Donde solo hace unas semanas salió la
versión 2.0
Este programa es un Scanner de vulnerabilidades para WordPress y
Moodle. Hace un completo fingerprinting a la plataforma identificando
versión de la plataforma, plugins instalados y desactualizados, y LOS
USUARIOS REGISTRADOS…
En la siguiente captura de pantalla podemos observar como funciona
flunym0us y obtiene los usuarios de la pagina muyseguridad.net
Trabaja bien ¿no? sin embargo Flunym0us tiene unos pequeños
inconvenientes en cuanto a los usuarios. Obtiene muy pocos, y Cuando
encuentra algunos, se basa en el <title> de la pagina…Podemos ver
un ejemplo a continuación con el blog de daboblog.com

Click para Agrandar
Dice encontrar 5 usuarios pero solo 1 es real. Los demás son el <title> del sitio.
Metasploit (wordpress_login_enum)
Muchos profesionales de la seguridad recomiendan el uso de metasploit
para enumerar usuarios ya que tiene todo un modulo dedicado a esto, y
es bastante configurable.
El modulo lo podemos encontrar en:
auxiliary/scanner/http/wordpress_login_enum
Podemos hacer uso de el fácilmente simplemente configurando el Host
remoto. Y claro podemos ver todas las opciones con “show options”. Lo
probaremos ahora contra los creadores de flunym0us.
>use auxiliary/scanner/http/wordpress_login_enum
>set RHOSTS flu-project.com
>exploit

Click para Agrandar
Como vemos no me devolvió ningún usuario valido. La verdad no se por
que, por mas que intente con varias paginas, con servidores dedicados,
en local, configuración de parámetros, etc…En ninguna de mis pruebas
logre obtener un solo resultado exitoso. (Si alguien logra realizar esto
con éxito, favor de hacérmelo saber)
WPBF.py
WordPress BruteForce es un script, igualmente programado en python
que me agrado bastante, pero que igualmente NO ME DEJO COMPLETAMENTE
CONVENCIDO. Podemos descargar este script desde github donde su autor
“Andres Tarantini” lo alojo. http://atarantini.github.com/wpbf/
Este es un script de fuerza bruta para probar las contraseñas, detectar plugins y enumerar usuarios.
Aunque tiene una gran cantidad de opciones yo solo mostrare la
enumeración de usuarios. En esta ocasión la pagina “afortunada” es el
famoso sitios de tecnología, gadgets, y ¿Seguridad? -> g3ekarmy.com
$python2.7 wpbf.py -eu -mu 40 http://g3ekarmy.com
La opción -eu es para (enumerate uses)
La opción -mu 40 es para definir la cantidad máxima de usuarios a obtener

Click para Agrandar
Le dijimos que obtuviera un máximo de 40 usuarios y obtuvo con éxito
12. Pinta bien el programa =) Sin embargo veremos después que con
wp_users podemos obtener mas de 12 usuarios
Sin duda wpbf es una buena opción a tener en cuenta.
w3af
w3af no necesita presentación, si estas leyendo esto, seguro conoces w3af a fondo y en modo “console”
Dentro de los muchos plugins de w3af tenemos en el área de
“discovery” el plugin “wordpress_enumerate_users” el cual usaremos.
Veamos dos ejemplos uno ahora con la pagina de seguridad infospyware.com
y de nuevo con daboblog.com
Si corremos el plugin contra daboblog.com vemos que solo encuentra al usuario “admin”, como lo hizo flunym0us.

Click para Agrandar
Ahora si lo corremos contra infospyware.com vemos que nos devuelve una gran cantidad de usuarios exitosamente.
Conclusión:
- Flunym0us Sin duda es un gran Scanner de vulnerabilidades y que en el futuro seguramente mejorara la enumeración de usuarios.
- Metasploit no pude hacerlo funcionar de ningún modo, será que ¿Necesito clases personalizadas?
- wpbf.py un gran script que nos puede ayudar en ciertas cosas, pero que al final no es la elección definitiva.
- w3af es la mejor opción para enumerar usuarios…¿O por lo menos lo era hasta ahora?
¿Como funcionan estos programas para enumerar usuarios?
Manera 1:
Es realmente sencillo, hace tiempo se descubrió que wordpress tenia
una “vulnerabilidad/utilidad” donde si uno pone en una pagina que este
usando wordpress… pagina.com/?author=1 nos devuelve todas las entradas
de este usuario, y claro en el cuerpo del html vendría el nombre de
usuario.
También puede venir en el title, así es como lo maneja Flunym0us.
Entonces la manera obvia de obtener usuarios es ir iterando sobre
este parámetro y si nos contesta el servidor exitosamente, buscamos el
usuario (Esa es la lógica que varios de estos programas usan).
Manera 2:
Esta forma de obtener los usuarios es realmente el mismo que la
manera 1, la única diferencia es que cuando ingresamos a
pagina.com/?author=1 nos redirige a pagina.com/author/usuario de esta
manera podemos obtener el usuario desde la URL, o también desde el
cuerpo HTML.
Manera 3:
Podemos obtener los post de los usuarios con el parámetro
pagina.com/?author_name=usuario donde usuario es el nombre del autor.
Esta manera no es muy buena puesto que tendríamos que estar fuzzeando
mucho, o con un diccionario ya bien establecido podríamos obtener
algunos usuarios, pero no tiene para nada el mismo impacto que la manera
1.
Cada uno de los métodos es valido, complementario y funcional. El
éxito del ataque dependerá de como el blog lo maneje y esto a su vez
depende mucho del TEMA que el blog este usando, también depende del
idioma y/o de si el blog se encuentra dentro de una carpeta que no sea
la principal.
Y así nace: wp_users.sh
wp_users.sh a diferencia de los otros programas vistos anteriormente esta programado en Bash.
./wp_users enumera y obtiene los usuarios registrados en WordPress
Trate de que tenga la mayor compatibilidad posible con los sistemas
(Las expresiones regulares son del tipo a-zA-Z y no a-Z para que no
hubiera problemas en sistemas Mac OS), no usa muchos programas externos,
sino al contrario usa muchos programas que ya vienen instalados en
muchos sistemas *nix por default o de comandos internos. Por el momento
fue probado en BackTrack 5 R3 sin ningún tipo de problema.
Hago uso de
“echo, egrep, cut, tail, read, head, declare, let”
El único programa que podría no venir por default en tu sistema es
“GET” que pertenece a las utilidades de “lwp-mirror – Simple Mirror
Utility”.
Características:
- 100% Editable y personalizable
- Tiene 2 maneras de poder Enumerar usuarios (Método 1 y 2)
- Puede identificar si una pagina usa wordpress o no.
- Identifica la Versión de wordpress si es posible.
- Puedes definir cuantos INTENTOS (no usuarios) deseas realizar
- Hace por defecto “User Agent Spoofing”, el cual puedes modificar o eliminar desde el codigo.
- A diferencia de los demás, wp_users DEVUELVE el ID de los usuarios encontrados
- ES SOFTWARE LIBRE
Contras:
- Puede ser muy lento, por la programación estructurada manejada y por el UA spoofing
- Aun no es 100% compatible con todos los blogs (A mejorar las expresiones regulares en un futuro)
Ejemplos:
Ej1)
Lo corremos contra g3ekarmy.com con 40 intentos (Numero hasta donde llegara la iteración del ciclo).

Click Aqui para Agrandar
A diferencia de wpbf.py, wp_users.sh nos devuelve en 40 intentos mas
usuarios que lo que logro wpbf.py, así mismo el formato es mas vistoso.
Ej2)
Recuerdan como flunym0us y w3af solo nos devolvía un usuario (admin) con el blog de daboblog.com? Veamos que hace wp_users.sh
Lo lanzamos con 100 intentos.

Click Aqui para Agrandar
Genial no? =) Sabia había mas usuarios de lo que w3af y flunym0us nos decía…Os empieza a gustar wp_users.sh o no?
Profundizando:
Debemos entender como funciona el método 1 y 2 explicados anterior mente e implementados en wp_users.sh
Cuando corremos wp_users.sh pagina.com #Intentos lo que hace el
programa es pedir pagina.com/?author=#Intentos para cada pagina si nos
contesta Ok, busca la palabra author-$USUARIO. Donde $USUARIO es lo que
extraemos y obtenemos…
Sin embargo en varias paginas, nos contestara un 200, pero no nos
devolverá nada… ¿Por qué? Por que puede que exista una redirección de
pagina.com/?author=#ID a pagina.com/author/USUARIO en este caso wp_users
identificara si lo que devuelve esta vacío y después de 10 intentos nos
recomendara que usemos el método 2:
./wp_users.sh --inurl
En este método ingresaremos de nuevo la pagina y numero de intentos e
intentara obtener los usuarios de una manera diferente…buscando ahora $
web/author/$USUARIO/
y extrayendo $USUARIO, si encuentra esto nos devolverá los usuarios, de
lo contrario también saldrá vacío y esto querrá decir que el programa
no fue capaz de obtener los usuarios por que la pagina puede estar
manejando la url de manera diferente:
Ej: Fallara si el blog en vez de redirigir a
pagina.com/author/USUARIO, redirige a
pagina.com/autor/USUARIO…(Próximamente se agregara mas compatibilidad)
Ejemplo de cuando usar el método 2 –inurl…Por ejemplo daboblog.com es
una de esas paginas donde con el método 1 no obtendremos nada, pero con
el 2 si.
Y esto señores es wp_users.sh, les parece ¿interesante? o ¿útil?.
Nota: Los blogs que fueron usados para ejemplos
fueron sacados de los participantes en los premios bitácoras por mejor
blog a seguridad parcial III
http://bitacoras.com/premios12/clasificaciones/mejor-blog-sobre-seguridad-informatica/3
Espero ningún webmaster se moleste por esta situación, pero me pareció
interesante probar mi herramienta con los blogs de seguridad que
compiten y usan wordpress. Cualquier malentendido favor de tratarlo
directamente conmigo (
@hecky)
Comentarios finales:
¿Por qué escribiste wp_users?
Primeramente para demostrar que a veces las herramientas mas famosas
no nos resuelven todo, y sirve de mucho INVESTIGAR, PROBAR y poder CREAR
nuestras herramientas manualmente.
¿Por qué escribirlo en bash y no en python, perl, ruby?
Los que me conocen saben que soy fanático de Bash, y lo que intento
demostrar desde hace tiempo es que no es nada difícil como muchos creen,
que facilita muchísimas tareas y es sumamente útil aprenderlo.
¿Habrá actualizaciones?
Creo eso dependerá de la demanda, para mi esta muy bien así, y si
necesito acoplarlo a un escenario en especifico no se tardara nada en
hacerlo manualmente. La parte esencial del programa no pasa de unas 8
líneas, sin embargo creció tanto por manejo de errores, explicación del
programa, etc…
¿Existe una manera de Protegerme?
¡SI! Hay dos maneras MEGA EFICIENTES para protegernos de que nos
hagan este “dump” de usuarios…Pero eso lo quiero exponer en CampusParty
México 4, si desean saber como, podrían apoyarme para dar la conferencia
que tengo pensada como “Hardening WordPress – The technical,easy and
useful way” donde dare varios tips de este tipo.
Pueden descargar wp_users.sh desde mi repositorio en github:
Articulo escrito por Hecky de Neobits.org para La Comunidad DragonJAR
Hecky es un apasionado e interesado en “Researching,
Steganalysis, Hardening, Linux, Vulnerability Assesment & Digital
Forensics”, miembro de la comunidad DragonJAR y pueden ubicarlo en
Twitter (@hecky)