Найти тему
Антон Крылосов

SQL-инъекции и что это такое. Часть первая.

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

Но я считаю, что одного прочтения статьи будет мало, так как нам нужны живые примеры.

Внимание! Статья написана в информативных и ознакомительных целях! Автор не несёт ответственности за ущерб, нанесённый в результате прочтения данной статьи. Приятного чтения!

Что такое SQL-инъекция?

Говоря проще - это атака на базу данных, которая позволит выполнить определённое действие, которое не планировалось создателем скрипта. Инъекция появляется из входящих данных, которые не фильтруются. Самая старая и распространённая ошибка - это не фильтрация передаваемого ID. Грубо говоря, это подставление кавычек во все поля, будь это GET или POST запрос или даже Cookie-файл!

Как вычислить уязвимость, позволяющую внедрять SQL-инъекции?

Понять, уязвим ли тот или иной сайт к SQL-инъекциям довольно просто. Для примера возьмём сайт example.com. На сайте расположена страница, расположенная по адресу example.com/?id=1. То есть, переменная id передаёт значение 1 через GET запрос. Так вот, заходим на эту страницу, добавляя к концу адресной строки одинарную или двойную кавычку (то есть заходим на example.com/?id=1' или на example.com/?id=1"). Если при заходе на страницу появляется ошибка, в которой присутствует sql, mysql и другие значения, связанные с SQL-инъекцией, то поздравляю! Вы нашли SQL-инъекцию!

Итак, возвращаемся к ранее упомянутому сайту example.com. Теперь допустим, что на сайте есть вторая страница, которая находится по адресу example.com/?id=2. Далее нам потребуется перебирать возможные варианты запросов. Тестируем следующие варианты:

example.com/?id=2+OR+1

example.com/?id=2+--

example.com/?id=2+UNION+SELECT+*+FROM+pages+WHERE+id=2

В адресной строке + выполняет роль пробела, так что не пугайтесь.

Если первая страница содержит определённый текст, а вторая страница его содержит, но не отображает, а при использовании любого из перечисленных выше вариантов запросов для второй страницы текст отображается, то сайт также уязвим к SQL-инъекциям.

Защита от SQL-инъекций

Самым лучшим способом защитить свой сайт от SQL-внедрений - это постоянно проверять всё - числа, даты, строки, данные в специальных форматах и так далее.

Можно ли сейчас найти SQL-уязвимость?

К сожалению, в нынешних реалиях найти SQL-инъекцию среди обычных сайтов сложно, а среди сайтов крупных компаний (например, microsoft.com, google.com, apple.com, yandex.ru, mail.ru, bing.com, vk.com, ok.ru, youtube.com и так далее) - почти невозможно. Связано это с тем, что сайты крупных компаний с первой половины 2010-х стали принимать необходимые меры для защиты своих сайтов. Именно поэтому в 2007-2012 годах поиск SQL-инъекции не составлял труда. Сейчас, в 2020 году, ситуация совсем другая.

Ну, а на этом всё. Дальнейший обзор SQL-инъекций и их использование с помощью sqlmap будет в следующей статье.