Найти тему

#11 SQL-инъекции. Поиск и эксплуатация слепых SQL-инъекций.

Здравствуйте, дорогие друзья.

Поговорим о слепой SQL-инъекции, и она относится к такому типу инъекций, который не показывает ошибки.

Для примера я перешел в веб-приложение DVWA, на вкладку «SQL Injection», и добавил в поле одну кавычку «'»:

-2

И после ввода, жмем на кнопку «Submit», и видим ошибку:

-3

Иными словами, я могу использовать эту уязвимость.

В то же время, слепая SQL инъекция не выводит никаких ошибок, и если мы протестируем аналогичный пример на вкладке «SQL Injection (Blind)», то не получим никакой ошибки:

-4
-5

Это не значит что страница не уязвима. Дело в том, что веб-сайт просто не показывает ошибки.

В реальной жизни нужно пытаться найти эксплойты к слепым SQL-инъекциям.

Разумеется, тестировать нужно не с помощью одной кавычки, а разными методами. Нужен творческий подход к делу. Алгоритм работы будет следующим: нужно попытаться вставить истинное и ложное утверждение, для того, чтобы найти инъекцию. При вставке истинного выражения, должна присутствовать правильная страница, а при ложном, неправильная. Неправильная страница будет выглядеть не так, как я ожидал.

Давайте попрактикуемся. Введем в поле цифру 1, и получим вывод:

-6

В первую очередь я попробую ввести истинное значение выражения, и оно будет выглядеть как: «1' and 1=1#». Если страница уязвима, то она не изменится.

Введем в адресной строке URL наше выражение:

-7

Истинное утверждение не влияет на страницу.

Теперь добавим ложное утверждение, которое имеет вид: «1' and 1=0#»:

-8

На первый взгляд, ничего необычного, но на самом деле страница не отображает то, что должна, так как мы передали id=1.

Можем протестировать уязвимость на столбцы, с помощью выражения «order by». Добавим истинное выражение: «1' order by1#»:

-9

Отображается правильная страница, как и в примере с «1' and 1=1#».

Также мы можем проверить ложное утверждение, которое будет выглядеть как: «1' order by 10000»:

-10

Вывода информации на странице не произошло, а это значит, что страница уязвима, даже если нет вывода ошибок SQL.

Зная, что на данной странице есть слепая SQL инъекция, можно воспользоваться выражением, например: «1' union select 1,2#»:

-11

Видим вывод информации id, first name, surname.

Модифицируем выражение в URL, и оно примет вид: «1' union select table_name, 2 from information_schema.tables»:

-12

Строка для обнаружения простой и слепой SQL инъекции абсолютно такая же. Отличие только в том, как ее обнаружить.

Нужно придумывать способы обнаружения инъекций, но некоторые примеры я Вам предоставил.

На этом все. Всем хорошего дня.