Демонстрация атаки с использованием SQL-инъекции.
Как показано на рис.1, SQL-инъекция использует введенные пользователем некорректные данные для получения разрешения на прямое взаимодействие с внутренней базой данных. Теперь проведем эксперимент на веб-сервере. В качестве площадки для проведения демонстрационного тестирования мы будем использовать веб-сайт вымышленного банка Altoro Mutual (http://demo.testfire.net). Банк применяет производственную версию веб-сервера, которая имеет естественные уязвимости. Для начала откроем в своём веб-браузере этот целевой сайт.
Рисунок 2. Пример стартовой страницы сайта. Вы увидите страницу приветствия, показанную на рис.2. В правой части верхней строки находится ссылка Sign In, которая является нашей целью в этом примере. При нажатии на эту ссылку вы попадаете на страницу входа в систему. Рисунок 3. Страница входа в систему.
На странице входа в систему, как показано на рис.3, с помощью плагина Firebug браузера Mozilla Firefox можно увидеть, что веб-сайт выполняет валидацию полей с помощью JavaScript-функции confirminput. При попытке ввести пробелы в любом из этих полей появляется сообщение о недопустимости использования пробелов для полей. Проработаем эту идею более детально. Попробуйте ввести в поле пароля произвольное имя пользователя и специальный символ, чтобы увидеть реакцию приложения. В данном конкретном случае, что иллюстрирует рис.4, я ввел тестовое имя пользователя (donald) и пароль, состоящий из символа ('). Рисунок 4. Сообщение веб-страницы об ошибке
Вместо краткого сообщения о некорректном сочетании имени пользователя и пароля веб-сервер великодушно предоставляет подробную информацию о SQL-запросе. В частности, использование символа (') нарушило синтаксис запроса для параметра password к внутренней базе данных. Мы видим ошибку в конструкции WHERE, которая показана в следующем SQL-запросе: query = SELECT User FROM Users WHERE Username = 'donald' AND Password = ''' Мы можем воспользоваться этим знанием, чтобы оценить уязвимость этого процесса. В языке SQL символы (--) служат признаком комментария. Признак комментария дает указание SQL-базе данных проигнорировать остальную часть текущей строки. С целью успешного выполнения запроса без знания пароля можно попытаться использовать SQL-комментарий для отбрасывания фрагмента запроса - а именно, фрагмента с паролем. Из предыдущего примера мы знаем, что ввод символа (') нарушил запрос. С учетом этого измените запрос, вставив определенный SQL-код в поле Username. В данном случае я ввел don'-- в поле Username, а затем произвольную информацию в поле Password. В результате веб-сервер выдал сообщение об ошибке, показанное ниже на рис.5.
Рисунок 5 Ошибка с отсутствием ваших данных.
Вместо того чтобы вызывать исключение (как я показал на рис. 4), теперь я изменяю запрос таким образом, чтобы он воспрепятствовал намерениям разработчика. Теперь внутри системы этот запрос будет выглядеть следующим образом: query = SELECT User FROM Users WHERE Username = 'don'--' AND Password = '*' Очевидно, что простое добавление символов ('--) в поле Username сделало фрагмент запроса с паролем несущественным, тем не менее, этот запрос передается в базу данных как успешный. Опираясь на эту информацию, предположим, что в системе имеется административная учетная запись с именем admin. Если вы выполните эту же операцию, но с именем пользователя admin'--, то сможете успешно войти в систему по этой учетной записи и увидеть имя пользователя admin, найти другие сведения об учетной записи admin и использовать учетную запись admin в качестве собственной учетной записи. Итак, с помощью скромных познаний в области SQL мы успешно обошли внутреннюю проверку на ошибки незащищенного веб-сайта и аутентифицировали себя в качестве его администратора без знания соответствующего пароля. Если учетная запись admin не существует (или недоступна извне), мы можем получить доступ к первой учетной записи в таблице Users с помощью немного усложненного имени пользователя. В этом случае мы изменим запрос таким образом, чтобы предоставляемое условие всегда имело значение true. Этот результат достигается вводом имени пользователя вида «'OR 1 = 1-- ». Хотя эта уязвимость и не предоставит вам привилегий администратора, она обеспечит более глубокий доступ к веб-сайту и возможность поиска дальнейших уязвимостей.
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (203)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |