cionará. Obviamente, hay que retrasar la ejecución del script.
Veamos el 'edit_post ()' código de nuevo:
Podemos ver que la variable '$' términos, controlado por nosotros, se convierte en una matriz mediante su división usando una coma ( ',') en caso de que sea una cadena. Posteriormente, el código recorre esa matriz, el tratamiento de cada elemento como un nombre de taxonomía, y trata de buscarla a la base de datos utilizando una instrucción "SELECT".
A pesar de todos los "Seleccionar" declaración lleva un par de microsegundos en un servidor bien administrada, de gran alcance, ya que en realidad podemos enviar 16MB (límite duro PHP para el parámetro de un "post") de los términos a buscar, en realidad podemos ejecutar alrededor de 16 millones tales consultas que se llevarán a un buen montón de tiempo para su ejecución. En mi lugar vacío DB situada en mi localhost, impulsado por 1 GB de RAM y un procesador i7, sólo se tarda alrededor de 100 mil consultas para causar un retardo de 30 segundos.
Esto ahora nos otorga una muy poderosa influencia determinista, para explotar nuestra condición de carrera con, sin embargo, nuestro trabajo no ha terminado y todavía tenemos un par de cosas que hacer antes de explotar al máximo esta vulnerabilidad en el menor determinista en cada instalación de WordPress en el mundo .
Debido a que estamos llamando 'wp_dashboard_quick_press ()' con el fin de recuperar el token de administrador que se necesita para que el código para llamar a 'edit_post ()', creamos realmente un proyecto rápido en el proceso. Como he mencionado anteriormente, 'wp_dashboard_quick_press ()' sólo crea un proyecto si no lo es ya, y ya que tenemos que llamar a esa misma función otra vez con el fin de crear nuestro puesto, mientras 'edit_post ()' se retrasa, ese proceso no ocurrió.
¿Cómo podemos crear un proyecto si se produce alguna ya existe? Pues bien, el proyecto creado por 'wp_dashboard_quick_press ()' hay proyecto común, es en realidad un proyecto rápido (también llamado un guardado automático). Como tal, el proyecto se supone que es sólo una forma temporal de almacenar el texto mensaje en caso de una repentina pérdida de datos. Debido a que estos proyectos son tratados como elementos temporales, consiguen auto borrado dentro de una semana.
Esto significa que tenemos que esperar una semana completa con el fin de explotar nuestra vulnerabilidad, ya que este es el período de tiempo que lleva ese proyecto que desea eliminar. Afortunadamente para nosotros, fichas suelen durar 24 horas, lo que nos permite recuperar los contadores un día antes de la fecha prevista de su eliminación, y utilizarlo con el fin de entrar en 'edit_post ()' después de que el proyecto se elimina.
Finalmente, después de pasar el token de validación, la validación de los privilegios, la validación básica de administración, y la validación posterior identificación, cambiar el estado posterior a 'basura' es tan sencillo como enviar un parámetro HTTP. Gracias a Dios.
La combinación de todos estos desvíos juntos, usamos una cadena de alrededor de una docena de diferentes insectos, un sistema de privilegios defectuosa, y casi todas las hipótesis falsa en el sistema para lograr privilegios de editor parciales. El camino hacia una vulnerabilidad crítica es aún largo, pero en su extremo que se encuentra tanto un SQLi y un XSS, que se describen en las próximas entradas.
POCO
Administrador de recuperación de testigo / creación de post
Condición de carrera
.