Один из наших сайтов на Joomla был взломан, и злоумышленник заменил index.php моего шаблона своей уродливой страницей - заголовок «Взломан» и несколько арабских строк красного цвета.По-видимому, злоумышленник каким-то образом сбросил пароль (и адрес электронной почты тоже) первого пользователя в таблице пользователей, который был суперпользователем, и получил доступ к панели администрирования.
После быстрого восстановления я искалnet, чтобы предотвратить будущие попытки взлома, и нашел эту статью: Security News- [20080801] - Ядро - Функциональность напоминания пароля
Я поместил код из этой статьи, чтобы исправить мой reset.php
Но у меня все еще есть сомнения.В статье ничего не говорится о том, как на самом деле работает эксплойт.Но я кое-где читал в Интернете, что это уязвимость SQL-инъекции в reset.php
Строка, выполняющая SQL для проверки токена:
$db->setQuery('SELECT id FROM #__users
WHERE block = 0
AND activation = '.$db->Quote($token));
использует JDatabase :: Quote() метод.Тогда как становится возможным внедрение SQL-кода?Разве Цитата не должна предотвращать SQLi?Joomla версия атакованного сайта - 1.5.18.
Еще одно сомнение заключается в проверке исправления только для проверки длины строки 32. Как это может предотвратить эксплойт.
Мне интересно, еслиSQLi действительно может передать метод Quote, тогда не будет ли длины строки 32 более чем достаточной, чтобы обойти это предложение WHERE?
if(strlen($token) != 32) {
$this->setError(JText::_('INVALID_TOKEN'));
return false;
}