Как работает этот эксплойт сброса пароля Joomla? - PullRequest
3 голосов
/ 22 мая 2011

Один из наших сайтов на 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;
    }

1 Ответ

4 голосов
/ 22 мая 2011

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

SELECT id FROM #__users WHERE block = 0 AND activation = ""
...