Обход авторизации с помощью SQL-инъекции

SQL инъекции для обхода авторизации

SQL-инъекции — один из распространённых способов взлома сайтов (веб-приложений) и программ, работающих с базами данных. Метод основан на внедрении в запрос произвольного SQL-кода. В статье покажу, как работает обход авторизации с помощью SQL-инъекции и поделюсь шпаргалкой.

Еще по теме: Поиск и взлом сервера базы данных MSSQL

Обход авторизации с помощью SQL-инъекции

Авторизация на сайте работает следующим образом:

  1. Сайт (веб-приложение) запрашивает имя пользователя и пароль.
  2. Сайт делает запрос к базе данных: «У нас есть пользователь с именем «User »и паролем« user»?».
  3. Если в базе данных указано, что данные для входа верны, тогда сайт позволит войти пользователю User.

Пример простого PHP кода с авторизацией:

Уязвимости в коде

При попытке авторизации код получает данные введенные пользователем и помещает их прямо в SQL команду. Он не проверяет, какой тип данных представлен. Вот используемый SQL-запрос.

Для поиска уязвимости в коде проведем фаззинг.

Фаззинг — это передача сайту случайных данных. Длинные целые числа / строки и т.п. Мы знаем, для того чтобы сломать SQL зарос, нужно ввести апостроф или двойные кавычки. «.

Попробуем ввести имя пользователя user и пароь pass' ». Для кода данный запрос будет выглядеть следующим образом:

Что соответственно приводит к SQL ошибке:

Скрипт принимает наши данные и помещает их в кавычки. Если я введу в качестве пароля test, то sql запрос будет содержать password='test':

Это уже не вызовет ошибку.

Но после данной строки есть еще и другой код. (‘LIMIT 0,1)

Таким образом, соответствие правилам SQL синтаксиса это неверно. Это заставило сервер выдать ошибку. Подумайте, что будет, если я добавлю эту строку в качестве ввода.

Запрос будет иметь вид:

В SQL — — или — + в качестве символа для комментария. поэтому, если мы хотим что-то прокомментировать или заблокировать какую-то часть кода, мы можем использовать это. В этом запросе все последующее — игнорируется.

Но что будет если к SQL-запросу добавить такую строку:

Что интересно в операторе OR, так это то, что он проверяет два логических оператора и, если один из них или оба верны, он вернет true.

поэтому, если пароль похож на строковый тест или 1 = 1, он вернет true. Поскольку 1 всегда равен 1 (как не странно), этот запрос игнорирует неправильный пароль. Так мы смогли обойти проверку пароля.

Но, а что, если мы не знаем ни пароля, ни имени пользователя?

Мы можем использовать эту строку как имя пользователя и что угодно как пароль.

Запрос:

Поскольку после — — запрос все игнорирует — его не волнует пароль. Это даст нам доступ к сайту.

Шпаргалка по SQL-инъекциям для обхода авторизации

Следующий список может использоваться исследователями безопасности, тестировщиками на проникновение, разработчиками и ИТ-энтузиастами для проверки надежности разработанного приложения.

Полный список здесь.

Шпаргалка по XPath-инъекциям для обхода авторизации

Также можно использовать приведенный выше список с Burp Intruder для автоматизации обхода авторизации (см. также Автоматизация атак в Burp Suite).

РЕКОМЕНДУЕМ:

ВКонтакте
OK
Telegram
WhatsApp
Viber

Один комментарий

  1. Nikto

    Всем Привет! Ищу специалиста по кибербезопасности и хакингу
    Нужно обучать людей. Разработать программу обучения или на основе старой сделать доработки и вперёд. Достойные деньги. Моя телега — @sareuoi

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *