Solución al pequeño desafio
Con un poco de retraso (como se va haciendo costumbre en este blog) asi como después de poco mas de 6 días en linea, se da por terminado el “Pequeño Desafió”.
Por increíble que parezca solo 1 persona pudo resolver el desafío de manera satisfactoria, los demás se acercaron bastante pero les falto un poco mas de ganas (o tiempo) para dar el paso final; al principio creí que era por que nadie participo (o nadie tuvo tiempo), cosa que descarte ya que según mis registros, si hubo participación (tanto así que hubo gente usando scanners de seguridad así como algunas aplicaciones conocidas -como lo es el WP-Scanner-).
Sin embargo aun con todas estas utilidades, solo 1 pudo encontrar/enumerar la versión exacta de WordPress que usaba, sin seguir alargando la introducción pasemos a la solución…
Fase 1: ¿A que nos enfrentamos?
La primera parte del desafío consistía en averiguar ante cual de todas las ramas de WordPress nos estamos enfrentando, un usuario conocedor (o bien experimentado) de WordPress fácilmente podría reducir este numero a 2, ya que son solo 2 las ramas usadas hoy en día, las cuales son la rama 2.0.x y la ultima (la cual en estos momentos es la 2.6.x), sabiendo esto la búsqueda se acorta a tan solo un par de comprobaciones que podían irse desde checar mis anteriores entradas y deducir que seguramente estaré usando la ultima rama o bien ir por diferenciación de archivos entre las 2 ramas ya mencionadas (verbo y gracia: como se aproximo Armonth), para efectos del desafío se obtenía la rama 2.6.x con lo que mudamos nuestras teorías hacia esta rama.
Fase 2: A la búsqueda de $wp_version
Ahora conociendo a los que nos estamos enfrentado la teoría mas lógica era ir a buscar donde guarda WordPress su versión (o bien como lo guarda) así como en que puntos hace uso de esta.
WordPress controla/guarda su versión en el archivo version.php dentro de wp-includes, en este archivo se define una variable llamada “wp_version” donde se guarda la cadena con el numero de versión, con esto en la mano solo hacia falta sacar la relación de que archivos hacen uso de la misma, para esto hacíamos uso de cualquier aplicación que pueda buscar la cadena “$wp_version” dentro de todos los archivos de WordPress, claro tanto windowseros como linuxeros tienen sus soluciones incluidas en sus sistemas operativos…
Windowseros:
findstr /S "$wp_version" X:\directorio\donde\esta\wordpress\* > resultado.txt
Linuxeros:
grep -r "\$wp_version" /directorio/donde/esta/wordpress/ > resultado.txt
(para mayor comodidad se manda la salida hacia el fichero “resultado.txt”)
Una vez que vemos los resultados podemos encontrar alrededor de 8 archivos donde se hace referencia a la variable así como una funcion para obtenerla, sin embargo sobre todos los resultados/archivos destaca el archivo gears-manifest.php en wp-admin, ya que este solo carga lo necesario (carga script-loader.php y version.php ambos en wp-includes) y no hace alguna comprobación de seguridad por lo que queda abierto al publico en general, así que siguiendo la teoría visitamos…
http://g30rg3x.com/wp-admin/gears-manifest.php
Y nos encontramos con toda la lista de archivos que debe “Cachear” Google Gears localmente, entre ellos se destacan las hojas de estilo ya que estas al no tener un numero de versión por estilo se les define la variable “wp_version”, por lo que (en el momento del reto) se podía ver que la versión era “2.6.1-beta1-8615″ (hoy en día obviamente ya es otro, el cual no pongo para animarlos a que vean por su cuenta cual es) y con esto resolvíamos el pequeño desafío.
Conclusiones y un poco mas…
Como se puede observar esta es una nueva forma de enumerar versiones en WordPress la cual fue incluida en la versión 2.6 de WordPress, lo característico de este “vector” es que el archivo “gears-manifest.php” no carga ninguna modificación dinámica realizada por los plugins (me imagino que no lo hace por cuestiones de rendimiento) por lo que soluciones como esta o esta otra, quedan totalmente inservibles.
Por consecuente es necesario ir y reemplazar directamente las llamadas hacia la variable wp_version para poder evitar este “vector” o bien manejar dinámicamente el numero de la versión, cambiando la variable wp_version en wp-includes/version.php y creando un plugin que cambie cuando se encuentre dentro de admin hacia la versión correcta, así no perderías las notificaciones de nuevas versiones dentro de panel de administración.
Desde este blog felicito a Sky, el único que fue capaz de tomarse un tiempo y responder a este desafió de manera satisfactoria, sin mas que añadir les dejo un saludo y un para la próxima a todos los que hayan participado en este pequeño desafío.
Saludos
PD: Dejare sin modificar el fichero gears-manifest.php durante al menos 1 semana, para que todos pueda ir comprobar que realmente no les estoy engañando.
PD2: Y por si aun no me creen basta con que sigan cualquiera de estas ligas.
PD3: Como puede observar a mis versiones les “añado” hasta que commit tengo actualizado mi WordPress, esto lo hago para tener la referencia y no perder la pase lo que pase, así que como quien dirían “por seguridad guardo mi versión exacta de WordPress de la vista publica”.













PingBack de: g30rg3 Blog » Un pequeño desafio…
17 de Agosto del 2008 a las 2:29 am