Шаг 1. Найдите всех администраторов, включая скрытых
Вредоносный код часто прячет созданных им пользователей из списка в админке — через фильтр запроса пользователей. Поэтому доверять только странице «Пользователи» нельзя. Проверьте базу напрямую через phpMyAdmin:
SELECT u.ID, u.user_login, u.user_email, u.user_registered
FROM wp_users u
JOIN wp_usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities' AND m.meta_value LIKE '%administrator%'
ORDER BY u.user_registered DESC;
Если префикс таблиц у вас не wp_, замените его — он указан в wp-config.php. Или через WP-CLI: wp user list --role=administrator.
Сравните количество с тем, что показывает админка. Если в базе администраторов больше — на сайте есть код, который их скрывает.
Шаг 2. Удалите чужих пользователей
Удалите незнакомых администраторов через админку или WP-CLI, передав их записи своему аккаунту: wp user delete 183 --reassign=1. Затем проверьте записи и страницы, созданные этими пользователями, — часто это спам или страницы «hacked by».
Шаг 3. Закройте все способы входа
- Смените пароли всех настоящих администраторов.
- Удалите пароли приложений. Это отдельные токены для REST API, которые не отзываются при смене основного пароля. Они находятся в профиле пользователя внизу страницы, а в базе — в
wp_usermetaс ключом_application_passwords. - Обновите секретные ключи в
wp-config.php— это завершит все активные сессии. - Смените пароль базы данных, если есть подозрение, что
wp-config.phpбыл прочитан.
Шаг 4. Если администраторы появляются снова
Значит, у злоумышленника остался канал, который не зависит от паролей. Варианты по частоте:
Веб-шелл или бэкдор в файлах
Скрипт, который создаёт пользователя по запросу. Ищите по инструкции из статьи «Веб-шелл на сайте», а также код с функциями wp_create_user, wp_insert_user и set_role('administrator') в неожиданных местах:
grep -rlE "wp_(create|insert)_user|set_role\(\s*['\"]administrator" --include=*.php wp-content
Уязвимость в плагине
Многие уязвимости плагинов позволяют без авторизации изменить настройки сайта — например, включить регистрацию и назначить роль «Администратор» по умолчанию. Проверьте «Настройки» → «Общие»: поле «Роль нового пользователя» и галочку «Любой может зарегистрироваться».
REST API
Посмотрите журнал доступа на POST-запросы к /wp-json/ и ?rest_route= от незнакомых IP-адресов.
wp2_xxxx@wp2shell.invalid появлялись по несколько раз в день, хотя все пароли были сменены. В журнале нашлись сотни POST-запросов к пакетному эндпоинту /wp-json/batch/v1 с 13 разных IP — работал ботнет. После запрета пакетных запросов для неавторизованных посетителей новые администраторы перестали появляться.Шаг 5. Проверьте, что успели сделать
- новые плагины и темы, особенно в
wp-content/mu-plugins; - изменения в файлах темы, прежде всего
functions.php; - изменённые настройки: адрес сайта, почта администратора, главная страница;
- новые записи, страницы и пункты меню;
- вставки в контент страниц.
Если что-то нашлось — проведите полную чистку по инструкции «Вирус на сайте WordPress».
Как узнавать о новых администраторах сразу
FYZI Shield проверяет список администраторов напрямую в базе данных, поэтому видит и скрытых пользователей. Если появляется новый администратор, вы получаете сообщение в Telegram в течение нескольких минут, а не через неделю.
Частые вопросы
Может ли администратор быть создан плагином легально?
Некоторые плагины поддержки создают временного пользователя для доступа разработчика. Но это происходит только по вашему запросу. Если вы не помните, откуда пользователь, считайте его вредоносным.
Хватит ли удалить пользователя и сменить пароль?
Только если пользователь был создан через украденный пароль. В остальных случаях — при веб-шелле, уязвимом плагине или открытом API — администраторы будут появляться снова.
Можете остановить появление администраторов?
Да. Находим канал, через который их создают, закрываем его и удаляем все следы. Стоимость — от 4 990 ₽.