WordPress - Introducción y Arquitectura
Comprender la arquitectura básica, estructura de archivos, roles de usuario y los componentes clave de WordPress, el CMS más popular del mundo.
🧩 ¿Qué es WordPress?
WordPress es un CMS (Content Management System) de código abierto escrito en PHP que utiliza MySQL como base de datos y normalmente corre sobre un servidor Apache.
Es usado por más del 30% de los sitios web del mundo, desde blogs hasta e-commerce.
⚙️ Usos comunes
-
📰 Blogs y foros
-
🛒 E-commerce
-
🗂️ Document y Project management
-
💬 Marketing y comunicación
💡 Características
| Categoría | Descripción |
|---|---|
| 🔧 Altamente personalizable | Miles de plugins y temas disponibles |
| 🧱 SEO Friendly | Estructura y metadatos optimizados |
| 👥 Gran comunidad | Constante desarrollo y soporte |
| 🔐 Riesgos | Vulnerabilidades en plugins/temas de terceros |
🧩 Ejemplos de plugins populares
-
WPForms → Formularios de contacto
-
MonsterInsights → Integración con Google Analytics
-
Constant Contact → Marketing por correo electrónico
💡 ¿Qué es un CMS?
Un Content Management System permite crear y gestionar sitios web sin escribir código directamente.
Separa el contenido de la estructura del sitio, simplificando el mantenimiento y la edición.
🧱 Componentes Clave
| Componente | Descripción |
|---|---|
| CMA (Content Management Application) | Interfaz donde el usuario crea, edita y organiza contenido (WYSIWYG). |
| CDA (Content Delivery Application) | Parte backend que ensambla y sirve el contenido al usuario final. |
⚙️ Funcionalidades de un buen CMS
-
Extensibilidad mediante plugins y temas
-
Gestión avanzada de usuarios y permisos
-
Manejo de medios (imágenes, vídeos, documentos)
-
Control de versiones y actualizaciones periódicas
-
Configuraciones de seguridad integradas
🧱 Estructura por Defecto de WordPress
WordPress puede instalarse en Linux, Windows o macOS.
En Linux, su ruta por defecto es:
📁/var/www/html
🗂️ Árbol de directorios principal
gorosolea@htb[/htb]$ tree -L 1 /var/www/html
.
├── index.php
├── license.txt
├── readme.html
├── wp-activate.php
├── wp-admin
├── wp-blog-header.php
├── wp-comments-post.php
├── wp-config.php
├── wp-config-sample.php
├── wp-content
├── wp-cron.php
├── wp-includes
├── wp-login.php
├── wp-settings.php
└── xmlrpc.php
🧩 Archivos Clave
| Archivo | Descripción |
|---|---|
| index.php | Página principal (home) del sitio. |
| license.txt | Información de versión y licencia. |
| wp-activate.php | Maneja la activación de usuarios nuevos. |
| wp-admin/ | Interfaz administrativa y dashboard. |
| wp-login.php | Página de autenticación de usuarios. |
| xmlrpc.php | Mecanismo antiguo de comunicación remota (reemplazado por REST API). |
| wp-config.php | Archivo de configuración principal (base de datos, claves, prefijos, etc.). |
Si wp-config.php es accesible públicamente, puede exponer credenciales del servidor.
Debe tener permisos restringidos (600 o 640) y no estar accesible desde el navegador.
🧠 Archivo de Configuración: wp-config.php
/** Database connection */
define( 'DB_NAME', 'database_name_here' );
define( 'DB_USER', 'username_here' );
define( 'DB_PASSWORD', 'password_here' );
define( 'DB_HOST', 'localhost' );
/** Authentication Keys and Salts */
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
/** Table Prefix */
$table_prefix = 'wp_';
/** Debug Mode */
define( 'WP_DEBUG', false );
🔐 Claves y Salts → Usadas para proteger cookies y sesiones.
🧱 Prefix (wp_) → Puede cambiarse por seguridad para evitar SQL injection genérica.
📁 Directorios Importantes
wp-content/
Contiene:
-
📦 plugins/ — extensiones instaladas
-
🎨 themes/ — plantillas de diseño
-
🖼️ uploads/ — contenido multimedia del sitio
gorosolea@htb[/htb]$ tree -L 1 /var/www/html/wp-content
.
├── index.php
├── plugins
└── themes
Plugins mal configurados o con fallos pueden permitir RCE (Remote Code Execution) o file upload arbitrario.
wp-includes/
Contiene los archivos núcleo del CMS, que no deberían modificarse manualmente.
gorosolea@htb[/htb]$ tree -L 1 /var/www/html/wp-includes
.
├── theme.php
├── update.php
├── user.php
├── vars.php
├── version.php
├── widgets/
└── wp-db.php
Incluye funciones esenciales, librerías y componentes internos (JS, PHP, fuentes, etc.).
👥 Roles de Usuario en WordPress
| Rol | Descripción |
|---|---|
| 👑 Administrator | Control total: gestiona usuarios, plugins, temas y código. |
| ✏️ Editor | Puede publicar y gestionar posts (propios y ajenos). |
| 🧑💻 Author | Publica y gestiona solo sus propios posts. |
| 🗒️ Contributor | Puede escribir, pero no publicar contenido. |
| 👀 Subscriber | Usuario básico: solo puede leer y editar su perfil. |
Escalar privilegios de Author → Admin suele ser el objetivo de un atacante, ya que desde un usuario administrador se puede lograr ejecución remota de código (RCE).
🧩 Resumen
| Concepto | Clave |
|---|---|
| CMS | Permite crear contenido sin escribir código directamente. |
| WordPress stack | PHP + MySQL + Apache (LAMP). |
| Archivo crítico | wp-config.php (contiene credenciales y configuración). |
| Directorio clave | wp-content/ (plugins, temas y uploads). |
| Usuarios | Roles jerárquicos con diferentes niveles de acceso. |