Страницы

06 апреля 2013

Повторный взлом сайта на Joomla и его защита

История восстановления сайта на Joomla после взлома, которая описывалась ранее, на этом не закончилась. Через некоторое время я обнаружил, что снова не могу зайти в административную панель системы. Чтобы проверить данные доступа, используя панель управления хостингом, запустил программу управления базами данных phpMyAdmin. В таблице "jos_users", базы данных, опять был скинут логин ("username") на "admin" и изменен пароль пользователя "Super Administrator".

Трудно сказать, было ли это последствием предыдущего взлома или же просто использовали те же методы. Если была та же схема, то выдвинутое мною предположение, что при взломе использовалась система регистрации пользователей для сброса-восстановления логина и пароля входа в административную панель Joomla не подтвердилось. Ранее, я снял с публикации модуль регистрации.

На этот раз каких-либо изменений в состоянии самого сайта я не заметил. Вероятно, помогла установка пароля на папке "administrator", дополнительное ограничение доступа к ней через аутентификацию по ip-адресу или изменения прав доступа к некоторым файлам и папкам. Таким образом, в этот раз остался прежним файл "index.php", изменить который можно было через админку, получив к ней доступ. Придется дальше искать дырку в системе.

Как защитить сайт на Joomla от SQL-инъекций?
Так как изменения сделаны в базе данных MySQL, логично было бы предположить, что применялась SQL-инъекция. Этот распространённый способ взлома основан на получении доступа к файлам базы данных, в том числе и к логину с паролем администратора. Для защиты сайта решил сменить префикс к таблицам в базе данных. Устанавливать различные расширения для этой цели пока воздержусь, зачем использовать дополнительный компонент, если можно обойтись и без него.

Восстановив доступ к административной панели Joomla, я попытался изменить префикс таблиц базы данных в блоке "Настройки базы данных" вкладки "Сервер" общих настроек. При сохранении обнаружил, что изменения не принимаются системой:


Ранее, я действительно установил запрет записи в файл конфигурации configuration.php, применив права доступа 444. После изменения этих прав на 644, и замены префикса, на перезагруженной странице появилась надпись:

Table 'user_jos1.yyy_session' doesn't exist SQL=INSERT INTO `yyy_session` (`session_id`, `client_id`, `time`) VALUES ('488ba3b00ac7424aed2977406de8a924', 0, '1365338499') ,

где yyy_ - введенный мною новый префикс.

Такая же запись отображалась и вместо сайта. Причем, после этого, восстановить прежний префикс уже не получалось, так как страницу я закрыл, а с ней и возможность воспользоваться кнопкой браузера, загружающей предыдущие страницы. Забегая вперед, скажу, что замена префикса в админке, изменяет префикс 'jos_' в строке "public $dbprefix = 'jos_';" файла configuration.php. Поэтому для восстановления исходного состояния системы, можно указать прежний префикс в этом файле. Обратите внимание, что замена префикса в админке не меняет префиксы таблиц в базе данных.

Экспорт-импорт таблиц базы данных
Вообще, материал по этой теме в интернете устарел, очевидно привязка была к устаревшей версии phpMyAdmin, так как все говорили о необходимости сделал экспорт таблиц базы на свой компьютер и уже там поменять все префиксы с последующим импортом файла обратно. Позже, я сделал все это способом, который гораздо легче, но сначала, делал как советовали другие.

С помощью phpMyAdmin сделал экспорт нужной базы на свой компьютер, оставив настройки по-умолчанию - "быстрый способ экспорта" и формат "SQL". Скачанный файл продублировал и сохранил копию. Файл базы, по-умолчанию, открывался в приложении "Блокнот", однако заменить все префиксы там мне не удалось. Блокнот как-то зависал и не заканчивал операцию. К тому же, визуально, в программе отображался код в виде неструктурированной абракадабры. Совсем другое дело, редактировать в Notepad++. Открыв файл в этой программе, нажмите комбинацию Ctrl+H, в появившемся окне, на вкладке "Заменить", введите нужные префиксы и щелкните кнопку "Заменить все".

Так как я раньше не особо работал с базами, тут началась путаница. По идеи, прежде чем загружать отредактированные таблицы базы обратно на хостинг, надо удалил существующие таблицы, и именно таблицы, а не саму базу. Для этого, в выбранной базе, внизу всех ее таблиц нажал ссылку "Отметить все" и в выпадающем окне "С отмеченными" выбрал пункт "Удалить" Сама исходная база осталась с ее оригинальным именем, в котором все тот же префикс 'jos_' но без ее таблиц. В принципе, можно было уже делать импорт, но я посчитал, лучше вообще удалить базу данных и создать новую, с нужным префиксом в названии. А вместе с базой, там удалился еще и ее пользователь. В общем, по какой-то причине, после успешного импорта файла, сайт не восстановился.

Как заменить префикс таблиц посредством программы phpMyAdmin?
Далее, я загрузил, оригинальную копию базы, вернул прежний префикс в строке "public $dbprefix = 'jos_';" файла configuration.php. и система восстановилась. Самое интересное началось, когда я обнаружил функцию замены префикса таблицы в самой программе phpMyAdmin, в выпадающем меню "С отмеченными":
   

Спрашивается, и нафига весь этот цирк, если все так просто! Замена префикса прошла успешно. В итоге, я имею старое название базы данных, тоже имя пользователя базы и тот же пароль доступа к ней, но новый префик таблиц. Я, надеюсь, взлом сайта с помощью SQL-инъекции не означает получение доступа к имени и паролю пользователя базы, но в любом случае, я пароль пока не меняю. Посмотрю, поможет ли изменение префикса от сброса и замены данных доступа в панель управления сайта. Да, вернул поставил права доступа 444 на файл configuration.php.

Комментариев нет:

Отправить комментарий