PathSentinel Article

Me han cambiado la contraseña de administrador de WordPress: cómo recuperar el control

Cómo volver a entrar en tu WordPress cuando el atacante ha cambiado la contraseña o el correo, y cómo echarlo de verdad, no solo cerrarle una puerta.

Metes tu contraseña de siempre en el panel de WordPress y te dice que es incorrecta. Pides restablecerla y el correo no llega, porque el correo de tu cuenta ya no es el tuyo. O entras y ves un administrador nuevo con un nombre que no reconoces. Estás fuera de tu propia web y el que está dentro no eres tú. Se recupera el acceso casi siempre, y en menos de una hora, pero recuperar el acceso es solo la mitad del trabajo: si te limitas a cambiar la contraseña, el atacante vuelve a entrar esa misma noche. Aquí tienes las dos partes, en orden.

Recuperar el acceso desde el hosting cuando el correo ya no es tuyo

El truco habitual del atacante es cambiar el correo del administrador para que el enlace de «¿Has olvidado tu contraseña?» le llegue a él. Da igual: por debajo de WordPress está tu hosting, y ahí sigues mandando tú.

Opción 1: cambiar la contraseña desde la base de datos

Entra en el panel de tu alojamiento y abre phpMyAdmin. Selecciona la base de datos de tu web —si tienes varias y no sabes cuál es, el nombre está en wp-config.php, en la línea DB_NAME— y abre la tabla wp_users. El prefijo wp_ puede ser distinto en tu instalación; lo tienes en la línea $table_prefix de ese mismo fichero.

Localiza tu usuario, pulsa Editar y haz dos cosas:

  • En user_email, pon otra vez tu correo real.
  • En user_pass, escribe una contraseña nueva y en el desplegable de función elige MD5. WordPress acepta ese formato antiguo y lo reemplaza por un cifrado moderno la primera vez que entras.

En SQL directo es una línea:

UPDATE wp_users SET user_pass = MD5('AquiTuContrasenaNueva'), user_email = 'tucorreo@tudominio.es' WHERE user_login = 'tuusuario';

Opción 2: crearte un administrador nuevo con WP-CLI

Si tu hosting te da acceso SSH y tiene WP-CLI instalado, es más rápido y más limpio:

wp user list --role=administrator
wp user update 1 --user_pass='ContrasenaNueva' --user_email='tucorreo@tudominio.es'

Opción 3: el hosting lo hace por ti

Muchos alojamientos españoles tienen un botón de «restablecer contraseña de WordPress» en su panel, o te lo hacen desde soporte con una llamada. Aprovecha para pedirles los registros de acceso, que te van a hacer falta más adelante.

Revisar la lista de usuarios: cuentas que no aparecen en el listado

Ya estás dentro. Vete a Usuarios > Todos los usuarios y filtra por Administrador. Anota todo lo que no reconozcas: nombre de usuario, correo, fecha de alta.

Antes de borrar nada, guarda esa información en un documento aparte. Las fechas de alta son la referencia con la que después buscarás ficheros modificados, y si el incidente acaba en una reclamación al hosting o en una denuncia te la van a pedir.

Ahora la parte que casi nadie hace: comprobar que el listado del panel te está diciendo la verdad. Hay puertas traseras que filtran la consulta de usuarios para que su propia cuenta no aparezca en pantalla. La cuenta existe, tiene permisos de administrador y es invisible. Compruébalo desde phpMyAdmin:

SELECT u.ID, u.user_login, u.user_email, u.user_registered, m.meta_value AS permisos
FROM wp_users u
JOIN wp_usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities'
ORDER BY u.user_registered DESC;

Cuenta las filas y compáralo con lo que muestra el panel. Si sobra alguna, tienes un usuario oculto y, casi con seguridad, un fichero en wp-content/mu-plugins/ o un plugin modificado que lo esconde. Ese fichero es una puerta trasera y hay que encontrarlo: el procedimiento está en cómo buscar puertas traseras en tu web.

Cuando borres un usuario falso, WordPress te preguntará qué hacer con su contenido. Elige atribuir todo el contenido a tu usuario en lugar de borrarlo, revísalo después con calma y borra entonces lo que sea suyo. Si borras de golpe, te puedes llevar por delante contenido tuyo que él editó.

Cerrar todas las sesiones abiertas y cambiar las claves de seguridad

Cambiar la contraseña no echa a nadie. WordPress mantiene la sesión mediante una cookie: quien tenga una sesión abierta sigue dentro aunque cambies la clave veinte veces. Hay que invalidar las cookies existentes, y eso se hace tocando las claves de seguridad.

Abre wp-config.php por FTP o desde el gestor de archivos y busca el bloque de ocho constantes que empieza así:

define('AUTH_KEY',         'una cadena larga aleatoria');
define('SECURE_AUTH_KEY',  '...');
define('LOGGED_IN_KEY',    '...');
define('NONCE_KEY',        '...');
define('AUTH_SALT',        '...');
...

Ve a https://api.wordpress.org/secret-key/1.1/salt/, que genera un bloque nuevo cada vez que lo cargas, y sustituye las ocho líneas enteras. En cuanto guardes, todas las sesiones del mundo —incluida la tuya— quedan cerradas. Vuelve a entrar con tu contraseña nueva.

En tu perfil (Usuarios > Perfil) hay un botón Cerrar sesión en el resto de sitios, pero solo afecta a tu cuenta: las claves de wp-config.php las cierran todas.

Contraseñas de FTP, base de datos y panel: el orden correcto

Aquí es donde mucha gente se queda corta: cambia el WordPress y deja intactas las credenciales por las que entró de verdad. El orden que funciona es de fuera hacia dentro:

  1. Panel del hosting (cPanel, Plesk o el que sea). Es la llave maestra: desde ahí se accede a ficheros, base de datos y correo. Cámbiala primero y activa la verificación en dos pasos si el proveedor la ofrece.
  2. FTP y SFTP. Cambia la contraseña de la cuenta principal y borra las cuentas FTP secundarias que no uses. Es muy habitual encontrar cuentas creadas por una agencia hace años y olvidadas ahí. Si tu hosting permite desactivar el FTP plano y dejar solo SFTP, hazlo.
  3. Base de datos. Cambia la contraseña del usuario de MySQL y actualiza DB_PASSWORD en wp-config.php. Hazlo en ese orden y con el fichero abierto y listo para guardar, porque entre un paso y el otro la web da error de conexión.
  4. WordPress. Tu usuario y el de cualquier persona que trabaje contigo.
  5. El registrador del dominio. Se olvida siempre y es el acceso más peligroso de todos: quien controla el dominio puede llevarse tu web y tu correo a otro sitio.

Usa contraseñas distintas para cada uno y guárdalas en un gestor de contraseñas. Si reutilizas la misma en dos de esos cinco puntos, estás repitiendo el error que probablemente causó esto.

Cómo entró: fuerza bruta, contraseña reutilizada o tu propio ordenador infectado

Si no averiguas la vía de entrada, estás reparando el agujero de la pared sin saber que la puerta sigue abierta. Hay tres causas que cubren la gran mayoría de casos.

Fuerza bruta contra wp-login.php

Miles de intentos automáticos probando contraseñas. Se ve en el registro de accesos de tu hosting (en cPanel, Métricas > Accesos sin procesar). Busca peticiones POST a /wp-login.php o a /xmlrpc.php:

grep "POST /wp-login.php" access_log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

Si una misma IP aparece con cientos de intentos y luego un acceso correcto, ya sabes por dónde fue.

Contraseña reutilizada y filtrada

Si en los registros solo hay uno o dos intentos y el segundo acierta, no ha habido fuerza bruta: tenía la contraseña. Normalmente porque la usabas también en otro servicio que sufrió una filtración. Comprueba tus correos en un servicio de filtraciones conocidas y cambia esa contraseña en todos los sitios donde la repitieras.

Tu propio ordenador

La posibilidad que menos gusta oír. Existe un tipo de programa malicioso —los llamados infostealers— cuyo único trabajo es robar las contraseñas guardadas en el navegador y las credenciales FTP almacenadas en programas como FileZilla, que las guarda en claro. Si tu equipo está infectado, puedes cambiar las contraseñas cincuenta veces: se las lleva otra vez.

Señal típica: los accesos vienen de IPs distintas, no hay rastro de fuerza bruta y la reinfección llega a los pocos días de cada limpieza. Antes de dar el caso por cerrado, pasa un análisis completo al ordenador desde el que administras la web. Y a los de quien más trabaje con ella.

Comprobar el correo del dominio y los reenvíos automáticos

Quien ha entrado en tu panel de hosting ha tenido acceso a tu correo. Y una jugada muy rentable es dejar puesto un reenvío automático: todos tus correos siguen llegándote a ti, pero también a él. Puede pasar meses ahí.

En cPanel, entra en Correo electrónico > Redireccionadores y revisa la lista entera. No debería haber ninguna dirección externa que tú no hayas puesto. Mira también Filtros de correo electrónico a nivel de cuenta y a nivel global: se puede montar un reenvío como regla de filtro, que es más discreto que un redireccionador.

Otras dos comprobaciones en el mismo sitio:

  • Cuentas de correo que no reconozcas, sobre todo con nombres plausibles tipo info2@ o admin@.
  • Respuestas automáticas que tú no hayas configurado.

Y revisa los registros DNS del dominio: si alguien ha tocado los registros MX o ha añadido un include extraño a tu registro SPF, tu correo está pasando por un servidor que no es el tuyo. Eso ya no es solo un problema de tu web: es correo saliendo en tu nombre.

Qué hacer si el atacante sigue dentro mientras trabajas

Pasa más de lo que parece. Cambias la contraseña y a los diez minutos vuelve a haber un usuario nuevo. Significa que hay un fichero puerta trasera ejecutándose que no depende de ninguna contraseña, y mientras esté ahí no vas a ganar la partida cambiando claves.

En ese punto, corta el tráfico y trabaja con la web apagada:

  • Restringe el acceso por IP. En el .htaccess de la raíz, deja pasar solo la tuya mientras trabajas. Con Apache moderno:
    <RequireAll>
      Require ip 88.20.30.40
    </RequireAll>

    Sustituye esa IP por la tuya real, que la ves buscando «cuál es mi ip» en Google.

  • O pide al hosting que suspenda temporalmente el sitio mientras lo limpias. Es un mal rato para tu negocio, pero mejor que estar sirviendo malware a tus clientes durante tres días.
  • No restaures una copia de seguridad y te olvides. Si la copia es posterior a la intrusión, restauras la puerta trasera con ella. Y si es anterior, pero el agujero era un plugin sin actualizar, vuelven a entrar por el mismo sitio.

Con el acceso ya recuperado, el trabajo pendiente es la limpieza completa: núcleo, plugins, temas y base de datos. Lo tienes desglosado en la guía para limpiar un WordPress hackeado paso a paso, y el contexto general de todo el incidente, en el manual de qué hacer cuando te hackean la web.

Una última cosa que sí depende de ti: si hay datos personales de clientes en esa web —un formulario de contacto, una tienda, una lista de suscriptores— esto ya no es solo un problema técnico. Hay plazos legales que empiezan a contar desde que tienes conocimiento del incidente, y conviene saber cómo se denuncia un ataque informático en España y qué documentación hay que conservar antes de seguir tocando el servidor.

¿Y si ya lo has arreglado todo? Merece la pena mirarlo desde fuera antes de respirar tranquilo. Comprueba gratis si además dejaron algo publicado en tu web: el análisis es externo, no requiere registro y no toca nada de tu instalación. En unos minutos sabes si tu dominio sigue sirviendo contenido que no es tuyo.