Разница между ошибочными и логическими и временными слепыми инъекциями? - PullRequest
0 голосов
/ 08 марта 2019

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

1 Ответ

0 голосов
/ 08 марта 2019

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

Для лучшего понимания давайте рассмотрим пример ниже:

На сервере Microsoft SQL есть функция SQL, называемая convert (), которая используется для преобразования второго параметра в тип данных, указанный в первом параметре.Посмотрите на синтаксис: convert (,)

Это означает, что если мы используем convert (int, '145'), результат будет 145. Но что если мы попытаемся преобразовать значение, котороенедопустимый тип данных, подобный этому convert (int, 'abcd'). Как и следовало ожидать, сервер выдаст сообщение об ошибке: «Невозможно преобразовать строку« abcd »в int»

Итак, наш мотивэто выполнить SQL-инъекцию.Это означает, что вместо использования convert (int, 'abcd) мы просим сервер SQL преобразовать (int, db_name ()).Как вы знаете, db_name () - это то же самое, что и database (), и предположим, что имя базы данных - «secret_database».Если мы попытаемся преобразовать его, сервер выдаст сообщение об ошибке: «Невозможно преобразовать« secret_database »в int»

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

Булевские слепые инъекции: Чтобы понять внедрение, давайте разберемсяэто как логические + слепые инъекции.Итак, Boolean в терминах программирования просто означает True или False.Это означает, что при выполнении этих инъекций мы могли бы попросить сервер ответить нам как истинное или ложное.Теперь вторая часть - слепые инъекции или слепые SQL-инъекции.Как следует из названия, эти инъекции используются там, где мы можем успешно получать критически важные данные, но каким-то образом извлеченные данные не видны на веб-сайте (следовательно, имя слепое), что может быть связано с тем, как создается веб-сайт.Таким образом, объединяя обе эти части в слепых инъекциях на основе логического выражения, мы выполняем SQL-инъекции, задавая серверу вопросы True или False, и на основе ответа мы можем извлечь важную информацию.Давайте рассмотрим приведенный ниже пример. Предположим, что если мы хотим получить имя студента с веб-сайта, мы просто воспользуемся этим SQL-запросом

Выберите имя из студентов, где id = 121

* 1020.* Результатом будет имя студента против идентификатора 121.

Теперь, чтобы выполнить слепые инъекции на основе булевой логики, мы используем оператор AND.Посмотрите на приведенный ниже запрос, где мы использовали слепую инъекцию на основе логического выражения для получения имени студента.

Выберите имя из студентов, где id = 121 AND 1 = 1 +

As 1равняется 1 общеизвестному истинному значению, в результате будет получено имя студента.Итак, чем эта инъекция отличается от других, поскольку мы просто извлекаем одну и ту же информацию другим способом.Что ж, если мы вместо этого используем этот запрос.

Выберите имя из студентов, где id = 121 И 1 = 0 +

Теперь 1 никогда не может быть равен нулю, это означает, что результат будетбыть пустымТаким образом, в таких случаях в игру вступают слепые инъекции на основе логического выражения.Вот как будет выглядеть запрос:

Выберите имя из учащихся, где id = 121 AND (get_first_character_of (password)) = 'a' - +

Посмотрите внимательно, на этот раз мыпопросить сервер сообщить нам первый символ как «истинный» или «ложный». Если в выходных данных отображается имя учащегося, это означает, что пароль начинается с «a», и мы можем продолжить аналогичным образом, чтобы получить полный пароль, а если выходных данных нет, это означает, что пароль должен начинаться с какой-то другой буквы. Вот как выполняются слепые инъекции на основе логического выражения.

слепые инъекции, основанные на времени: Эти инъекции используются в тех случаях, когда нам не удается извлечь данные с помощью инъекций SQL на основе UNION или ERROR и мы не можем задавать вопросы веб-сайта как True или False. Поэтому для извлечения критической информации мы вмешиваемся в время отклика сервера. Всякий раз, когда на сервер поступает запрос, требуется некоторое время для получения информации и ее доставки нам, это называется временем отклика. Теперь, если мы вмешаемся в это время отклика, мы можем извлечь некоторую важную информацию.

Синтаксис слепых инъекций, основанных на времени, аналогичен слепым инъекциям, основанным на булевых значениях. Посмотрите на запрос для слепых инъекций, основанных на времени.

Выберите имя из студентов, где id = 121 AND (если 1-й символ пароля = «a», то спите в течение 10 секунд) - +

Здесь, как вы видите, мы просим сервер сообщить нам первый символ пароля. Если пароль начинается с «a», сервер будет находиться в спящем режиме в течение 10 секунд, что означает увеличение времени отклика на 10 секунд. И, если пароль не начинается с «а», сервер примет обычное время ответа. Аналогичным образом мы можем предсказать весь пароль. Вот как выполняются слепые инъекции на основе времени.

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

...