Enumeración de Usuarios en WordPress (Fingerprinting) – Presentando wp_users.sh

DragonJAR 336x280 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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.

Screenshot 016 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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.

  1. Como es la enumeración de Usuarios de wordpress hoy en día.
  2. 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

Screenshot 006 300x194 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

Click para Agrandar

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

Screenshot 007 300x158 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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
Screenshot 005 300x95 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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

Screenshot 008 300x72 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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 icon wink Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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” icon wink Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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.

Screenshot 013 300x119 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

Click para Agrandar

Ahora si lo corremos contra infospyware.com vemos que nos devuelve una gran cantidad de usuarios exitosamente.

Screenshot 014 300x199 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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.

Screenshot 015 300x134 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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

Screenshot 0161 300x155 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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).

Screenshot 009 300x206 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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.

Screenshot 011 300x247 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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.

Screenshot 010 300x294 Enumeración de Usuarios en Wordpress (Fingerprinting)   Presentando wp users.sh

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)


Si te ha gustado el post, compartelo y ayudanos a crecer.

Unete a nuestra Fanpage Siguenos en Twitter

Autor: Colaborador

La cuenta colaborar agrupa a todas las personas que des interesadamente han colaborado añadiendo contenidos de seguridad informática a La Comunidad DragonJAR y ayudando a la difundir más estas temáticas en nuestro idioma. si deseas ser un colaborador envía un mail a contacto (arroba) dragonjar.org y manda tu material.

Compartir este Artículo
  • Pingback: Bitacoras.com

  • Aldrin

    Gracias por enseñarnos cosas nuevas hecky, un abrazo.

    • http://neobits.org hecky

      No tiene por que agradecer..abrazo para ud

  • http://c1b3rh4ck.blogspot.com c1b3rh4ck

    Muy buena entrada,tiene muchos detalles y eso es lo que retroalimenta.felicitaciones,si es posible optimizar el regex.

    • http://neobits.org hecky

      Tocayo tiene razon, es muy posible mejorar el regex para hacerlo mas compatible.

  • http://c1b3rh4ck.blogspot.com c1b3rh4ck

    Muy buena entrada,tiene muchos detalles y eso es lo que retroalimenta.felicitaciones.

  • jomdever

    De verdad muy buen post. Es algo que pudiste comentar en una entrada de 6 lineas como el método 1 hace esto y el 2 esto, y cada cual pudo programarlo a su manera en lo que quisiera. Pero te has tomado todas las molestias para dejarlo lo más claro, y por su puesto, ese bash tiene mucho que enseñar. Excelente trabajo.

  • http://nouian.com Julio Oliva

    Me encanta como escribes amigo, lo haces de tal manera que hasta alguien que no sabe mucho de esto lo entienda de una manera muy amigable…

    • http://neobits.org hecky

      Gracias Julio y esa es la idea y la manera en la que escribo es muy al estilo neobits.org =P

  • Michael

    Soy tan novato que sólo puedo agradecer por este maravilloso trabajo. Ese bash es hermoso.
    Felicidades. Excelente trabajo.

    • http://neobits.org hecky

      Bash es un lenguaje tan incomprendido pero tan padre ^.^

  • MannuDark

    Excelente post, felicitaciones de verdad muy bueno, no se actualmente como estará la seguridad en WordPress y si ya tomaron medidas con varias de las vulnerabilidades que tiene, pero esta bien detallado y documentado tu post, vi que hacías referencia con entusiasmo de esta publicación en twitter y me dio curiosidad, no hay mas que decir, congrats!

    • http://neobits.org hecky

      Muchas gracias!!

      Y claro que wordpress sabe todo esto, pero es el clasico…”no es un bug, es una utilidad”

  • ran153

    Enhorabuena por la herramienta, funciona perfectamente y nos va a facilitar mucho la vida en las labores de pentesting.
    Dado que joomla es una plataforma parecida, seria posible adaptar el script para que funcione en joomla?
    Nuevamente gracias, sencilla y eficaz tool.

    • http://neobits.org hecky

      Hola ran153!!

      Jejeje la idea es que ayude, aunque no se si realmente les facilitare la vida…

      Mmmm pues habria que investigar sobre joomla =P

  • http://www.flu-project.com Juan Antonio

    Hola Hecky, en primer lugar felicitaciones tanto por la herramienta como por el post, muy instructivos :)

    En segundo lugar comentarte que Flunym0us 2.0 extraía únicamente los usuarios registrados con el perfil “autores”, tal y como indicamos con el mensaje de la herramienta “Registered WordPress Authors”. En la versión 2.1 que publicaremos proximamente ya se extraen los usuarios registrados sean o no autores, además de otras cosas. Ya os iremos desvelando pronto.

    De nuevo, gracias por el feedback amigo.

    Un saludo!

    • http://neobits.org hecky

      Hola Juanan!!

      Muchisimas gracias por la aclaración y perdona por no haberme percatado de ese detalle del perfil de autores y no haberlo especificado…me alegra que el proximo flunym0us ya venga “reloaded”y ya sabe que si necesita ayuda con algo, estoy como siempre dispuesto a ayudar tanto a ud como a pablo ;)

      Abrazo!!!

  • S4L0M0N

    Muy muy bueno!!!!! nada mas que decir!!1

  • tazita

    disculpen ..una pregunta pero me parece o de nuevo an desfaceao su blog¿¿¿??

    • http://www.dragonjar.org DragoN

      al parecer entraron al blog de nuestro amigo hecky, seguro se repondrá de esta.

    • http://neobits.org hecky

      Pues si sufrí un ataque, pero seguimos adelante!!

  • atarantini

    Buenas! Soy el desarrollador de wpbf y de wp_enumerate_users para w3af (que actualmente no estoy manteniendo). Queria feedback sobre el uso de la herramienta y por que no te dejo completamente convencido. Queria aclarar que los usuarios que te muestra en pantalla estas validados que existan contra wp-login.php, la lista completa de usuarios enumerados te queda en wpbf.log y esa lista “filtrada” va a ser la que el script usara para realizar el ataque de fuerza bruta (ya que utilizar usuarios que no existen es una perdida de tiempo).

    Saludos y espero tu comentario para poder mejorar mi herramienta!

    • http://neobits.org hecky

      Hola atarantini!!

      Antes que nada disculpa la demora, segundo un honor comentara este post y sobre mi pequeño PoC…

      Por ejemplo en la imagen de daboblog.com puede probar cualquiera de los usuarios y vera que si existen!!!

      No es necesario probarlos, que tal vez no tengan artículos, no significa no existan…tampoco es necesario probarlo contra wp-login.php

      wpbf.py prueba, si los usuarios que encuentra y poniendo una contraseña aleatoria devuelve “ERROR”,”Error”,”login_error”, o “incorrect”…Sin embargo yo puedo ponerle a mi wordpress que no muestre ningun error de ningun tipo, y esto ya causaria muchos falsos positivos…

      Realmente me gusto mucho su trabajo como lo dije anteriormente, y seria genial que también devolviera los ID…

      Saludos ;)

      • https://github.com/atarantini atarantini

        Gracias por el feedback!

        Voy a agregarle que muestre tambien el ID.

        Con respecto a la respuesta del WordPress ante un login, supongo que voy a mantener el comportamiento actual que es mas “automagico” para hacer todo de una pasada (buscar usuarios e inmediatamente hacer fuerza bruta sobre ellos).

        Saludos! :)

        • http://neobits.org hecky

          No tiene por que @atarantini para mi un honor viera mi herramienta…Y bueno al final wp_users.sh solo se dedica a la enumeración de usuarios

          wpbf.py ya esta mas enfocada a otra cosa y como dije me agrado bastante, pero para enumeración de usuarios yo sin duda usaria:

          wp_users.sh + w3af + wpbf.py == Mayor satifacción.

          Un placer conocerle y compartir este mundo virtual.

          Atentamente: @hecky

  • gr1s0n

    cojonudo!

  • http://g3ekarmy.com Saúl

    Felicidades, la verdad realizaste un excelente trabajo… buen artículo, aplausos!

    • http://neobits.org hecky

      Muchas gracias!!!

  • http://www.sunplace.com.ar Juan Lucas Armendares

    Me sumo a las Felicitaciones, muy buen post !!

    Att: Juan Lucas Armendares

    • http://neobits.org hecky

      Gracias Juan Lucas =)

  • Ne0b1ll

    Acaso escribiste?? …”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.”

    Aparte de mi haz despertado un leve cosquilleo en las mentes de algunos otros más… U.U

    • http://neobits.org hecky

      si si lo escribí y lo sostengo..¿por qué?

      Esas medidas que tome, lograron que pudiera localizar a mi atacante de manera rápida, lograron perfilar el ataque de manera clara, y completo, lograron mantenerme a salvo de muchos otros ataques que sufro a diario.

      No pido que lo entienda, pero se que las medidas que tengo yo, no muchos las tienen, son bien estudiadas, fundamentadas e implementadas y si…me funcionan bien.

      Tal vez cuando libere mi “guia” de hacer hardening a un wordpress lo entienda mas, y si no comparte opinión, simplemente sera eso, “no compartimos opiniones”.

      Saludos!!

  • ALEXANDER

    Muy buen post felicitaciones. Muy valiosa la información que comparte

  • Pingback: Scanner de vulnerabilidades en WP y ataque por fuerza bruta

  • Pingback: Lo mejor del 2012