En este articulo les enseñaré todo lo que aprendí y una metodología sobre cómo empezar a hackear plugins de wordpress. Tengan en cuenta que no voy a enseñar diferentes tipos de vulnerabilidad, sólo voy a enseñar cómo buscar vulnerabilidades. Lo aprendí yo mismo y es divertido. Es una buena manera de conseguir una cve y empezar a revisar el código también.
Requerimientos:
- Pagina Web – Una pagina web para realizar las pruebas
- Programación – Conocimientos de programación
Resposabilidad:
En este tutorías utilizaremos técnicas de hacking, con el único fin de aprendizaje. No promovemos su utilización ni con fines lucrativos o incorrectos. No nos hacemos responsables de cualquier daño o menoscabo que pueda generar en los sistemas utilizados. La responsabilidad es absoluta del usuario de este tutorial.
Conocimientos:
- Linux – Alto
- Programación – Alto
- Kali Linux – Alto
- Windows – No aplica
- Redes – Medio
Nivel general del Tutorial: Alto
Ideal para: Analistas de seguridad en Paginas webs y desarrolladores web (WordPress)
Siguiendo las entradas de los usuarios
Una buena manera de empezar a hackear un plugin de wordpress es rastreando las entradas del usuario. Hay múltiples formas de obtener entradas de usuario en PHP
$_POST se utiliza para obtener parámetros de publicación
$_GET se utiliza para obtener parámetros de obtención
$_REQUEST se utiliza para obtener parámetros de publicación o de obtención
$_SERVER se utiliza para obtener el valor de varias cabeceras de peticiones http
$_COOKIE se utiliza para obtener el valor de las cookies y
$_FILES es para los archivos
Estas son las siguientes formas en que los desarrolladores pueden obtener las entradas del usuario. Así que cuando se hackea un plugin de wordpress, o simplemente se hackea cualquier código php en general, es bueno empezar a buscar en estos, y seguir las entradas del usuario desde allí. Podemos hacerlo por grepping.
Ejemplo
Como ejemplo, vamos a hackear y reproducir una inclusión de archivos locales en Mail Masta 1.0. Este es el informe original https://www.exploit-db.com/exploits/50226
Empezamos buscando $_GET para encontrar todo el código php que acepta la entrada del usuario. Mientras lo hacemos, un archivo php parece interesante.
inc/campaign/count_of_send.php
Así que lo abrí con mi editor de código
El código es bastante simple, en la línea 4, obtiene el valor del parámetro get ‘pl’, luego lo pasa a la función include. Incluir puede llevar a lfi por lo que tenemos un lfi aquí. Ahora, vamos a tratar de reproducirlo.
Puedes ver que funciona. Tenemos un lfi. Así es como se encuentran las vulnerabilidades siguiendo las entradas del usuario.
HOOKS
En wordpress, tenemos algo llamado hooks. Los ganchos son formas para que los desarrolladores enganchen funciones a puntos predefinidos en wordpress. Se puede hacer con la función add_action(). Para más información, recomiendo este https://developer.wordpress.org/plugins/hooks/ y https://developer.wordpress.org/reference/functions/add_action/
Ahora bien, al probar, hay ciertos ganchos que busco.
wp_ajax_$action_name usado para enganchar al ajax (admin-ajax.php)
admin_post_$action_name utilizado para enganchar al admin-post.php
wp_ajax_nopriv_$action_name, admin_post_nopriv_$action_name igual que el anterior pero no requiere autenticación
admin_init utilizado para enganchar en cada carga de la página de administración
wp_loaded utilizado para enganchar cuando el plugin se instala
admin_action_ no estoy seguro de esto todavía, pero aún así, manténgase atento a esto
profile_update & personal_options_update llamados cuando un usuario edita su cuenta.
Ahora, al igual que antes, tenemos que encontrar si hay funciones enganchadas a estos ganchos. Esto se puede hacer con grepping
Ejemplo
Para este ejemplo, reproduciremos el sqli de Double Opt-In for Download 2.0.9. El informe original se puede encontrar aquí. https://www.exploit-db.com/exploits/39896
Así que empezamos por encontrar cualquier acción enganchada a wp_ajax usando grep
Encontramos wp_ajax_populate_download_edit_form en public/class-doifd.php. Vamos a abrir el archivo y analizar el código.
Aquí, podemos ver que está enganchado a la función populate_download_edit_form. Analicemos la función
Aquí, podemos ver que obtiene el valor del parámetro id del post y lo almacena en la variable $value, luego la variable $value es usada en una consulta sql sin filtrar o preparar la sentencia haciéndola vulnerable a sqli. Ahora vamos a reproducirlo. El hook ajax es
wp_ajax_populate_download_edit_form así que el parámetro de la acción ajax es populate_download_edit_form y también proporcionaremos el parámetro id
Utilizaremos la carga útil and 1=1 para un poc basado en booleanos. El uso de and 1=1 arroja una respuesta normal
Pero usando y 1=2 responden con un nulo que significa que nuestro sqli realmente existe
Así es como se comprueban los hooks cuando se hackean plugins de wordpress. Recuerde que también debe comprobar otros ganchos que no sean wp_ajax cuando las pruebas.
Este es el final de la escritura. Para aprender los diferentes tipos de vulnerabilidad, tienes que aprenderlo tú mismo. https://www.wordfence.com/wp-content/uploads/2021/07/Common-WordPress-Vulnerabilities-and-Prevention-Through-Secure-Coding-Best-Practices.pdf aquí hay un buen artículo que te enseñará algunos de los tipos de bug en php y en wordpress. Tengo 3 posibles cve pronto con wordpress hacking solo y me enseñó revisión de código php por eso me gusta mucho wordpress hacking
Actualización: Tengo un cve reservado ahora https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24800
Espero que les sea de ayuda.