Здравствуйте, дорогие друзья.
Поговорим о слепой SQL-инъекции, и она относится к такому типу инъекций, который не показывает ошибки.
Для примера я перешел в веб-приложение DVWA, на вкладку «SQL Injection», и добавил в поле одну кавычку «'»:
И после ввода, жмем на кнопку «Submit», и видим ошибку:
Иными словами, я могу использовать эту уязвимость.
В то же время, слепая SQL инъекция не выводит никаких ошибок, и если мы протестируем аналогичный пример на вкладке «SQL Injection (Blind)», то не получим никакой ошибки:
Это не значит что страница не уязвима. Дело в том, что веб-сайт просто не показывает ошибки.
В реальной жизни нужно пытаться найти эксплойты к слепым SQL-инъекциям.
Разумеется, тестировать нужно не с помощью одной кавычки, а разными методами. Нужен творческий подход к делу. Алгоритм работы будет следующим: нужно попытаться вставить истинное и ложное утверждение, для того, чтобы найти инъекцию. При вставке истинного выражения, должна присутствовать правильная страница, а при ложном, неправильная. Неправильная страница будет выглядеть не так, как я ожидал.
Давайте попрактикуемся. Введем в поле цифру 1, и получим вывод:
В первую очередь я попробую ввести истинное значение выражения, и оно будет выглядеть как: «1' and 1=1#». Если страница уязвима, то она не изменится.
Введем в адресной строке URL наше выражение:
Истинное утверждение не влияет на страницу.
Теперь добавим ложное утверждение, которое имеет вид: «1' and 1=0#»:
На первый взгляд, ничего необычного, но на самом деле страница не отображает то, что должна, так как мы передали id=1.
Можем протестировать уязвимость на столбцы, с помощью выражения «order by». Добавим истинное выражение: «1' order by1#»:
Отображается правильная страница, как и в примере с «1' and 1=1#».
Также мы можем проверить ложное утверждение, которое будет выглядеть как: «1' order by 10000»:
Вывода информации на странице не произошло, а это значит, что страница уязвима, даже если нет вывода ошибок SQL.
Зная, что на данной странице есть слепая SQL инъекция, можно воспользоваться выражением, например: «1' union select 1,2#»:
Видим вывод информации id, first name, surname.
Модифицируем выражение в URL, и оно примет вид: «1' union select table_name, 2 from information_schema.tables»:
Строка для обнаружения простой и слепой SQL инъекции абсолютно такая же. Отличие только в том, как ее обнаружить.
Нужно придумывать способы обнаружения инъекций, но некоторые примеры я Вам предоставил.
На этом все. Всем хорошего дня.