1. Усеките содержимое запроса
Если вы хотите игнорировать сценарии в запросе. Например, для обработки ниже запрос требует условия active=1, но мы можем комментировать (--, -- -, -+, #, /*, /**/, // , ;%00…) и игнорируй это. При майнинге мы часто не знаем, что делает оставшееся содержимое запроса, поэтому использование комментариев в этом случае очень эффективно.
После комментариев наш запрос будет выглядеть следующим образом:
2. Обход фильтрации ключевых слов
а. Встроенные комментарии
Встроенные комментарии очень эффективно используются для обхода фильтрации пробелов. Для обхода фильтрации пробелов можно использовать следующие символы: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Например:
Или обойти фильтрацию ключевых слов (доступно в MySql). В приведенном ниже примере ключевые слова объединение и пароль находятся в черном списке, поэтому они заблокированы. Мы можем обойти это следующим образом:
б. Заменить ключевые слова
При использовании SQL-инъекции мы часто используем такие ключевые слова, как: Union, Select, Information_schema... Во многих случаях программисты просто заменяют эти ключевые слова:
Мы легко видим, что приведенный выше код обработки отсутствует. Если это просто сопоставление с образцом, то обходной путь чрезвычайно прост. Давайте применим учет регистра, когда прописные и строчные буквы интерпретируются по-разному.
Теперь вместо использования ключевого слова:
select, union…
Мы будем использовать:
SeLEcT, UniOn…
В основе этого обхода лежит то, что системы управления базами данных не различают регистр и ключевые слова case.
В некоторых случаях веб-приложение отфильтровывает все или часть определенных ключевых слов (объединение, выбор...). Обойдемся следующим образом:
id=1+uniunionon+SeLselectecT+1,2,3-- -
После того, как веб-приложение отфильтрует объединение и выбор, у нас останется правильный запрос:
id=1+union+SeLecT+1,2,3-- -
в. Кодировка символов
Мы можем обойти блокировку ключевых слов WAF (брандмауэром веб-приложений), закодировав их. Многие приложения WAF декодируют запрос только один раз и отфильтровывают ключевые слова в черном списке, а затем закодируют запрос дважды, чтобы в этом случае его можно было обойти.
3. Обход блоков одинарных и двойных кавычек
- Давайте рассмотрим пример, прежде чем изучать конкретно этот обход.
В этом сценарии у нас есть таблица в базе данных с именем пользователей. Следующая задача — узнать имя столбца в таблице, чтобы получить информацию о нем. Как и в приведенном выше запросе, мы используем условие: table_name='users'. Но если WAF блокирует как одинарные кавычки ('), так и двойные кавычки (""), мы больше не сможем использовать "пользователи" или "пользователи". Так как же решить эту проблему? Встроенная система баз данных предоставляет нам функцию, которая Очень хорошо решает эту проблему функция CHAR( ) (для Oracle это CHR()). Например, в приведенном выше запросе мы обойдем ее следующим образом:
Программисты PHP хорошо знакомы с функцией addslashes(). Функция addslashes() добавляет перед специальными символами, такими как одинарная кавычка ('), двойная кавычка ("), обратная косая черта (\), символ NUL (нулевой байт) "\", чтобы помочь системе управления базой данных. Есть ли никаких сложностей и путаницы при обработке строк, содержащих эти символы?Таким образом, когда мы хотим внедрить в запрос по сценарию: name='someName' или '1'='1'-- результаты уже не такие, как мы ожидали.
Однако существует способ обойти функцию addslashes() и вставить символы одинарных кавычек ('). Этот метод был общедоступен уже довольно давно, и реализовать его довольно сложно, поскольку он привязан к стилю кодирования, примененному к веб-сайту.
4. Обход ошибки «Недопустимое сочетание параметров сортировки для операции UNION».
В некоторых системах управления (обычно встречающихся в MySql), когда для баз данных и таблиц задан режим сортировки, при использовании ключевого слова UNION будет сообщаться об ошибке «недопустимое сочетание параметров сортировки для операции UNION». Настройка параметров сортировки может быть обусловлена намерением разработчика базы данных или настройками MySql по умолчанию. В случае использования объединения мы должны убедиться, что условие выбора значения в каждом поле должно иметь соответствующий тип кода. На мой взгляд, эта ошибка довольно распространена, особенно для CMS под управлением Apache MySql. Дополнительную информацию можно узнать по адресу: http://bugs.mysql.com/bug.php?id=57926.
В этом случае мы можем использовать способы преобразования в соответствующий тип кодировки.
Например, в следующем случае:
В приведенном выше запросе, если для столбца1 установлено, например, параметры сортировки Unicode-UTF8 или _latin1, то то, что выбрано из столбца2, необходимо будет преобразовать в соответствующий код. Мы можем принудительно применить стиль следующим образом:
Мы видим недостаток в этом методе обхода: мы должны знать, что сопоставленный код — _latin1. На мой взгляд, лучший способ обойти это — использовать функции шестнадцатеричного и нешестнадцатеричного кодирования и декодирования.
Есть много других функций, которые можно использовать вместо шестнадцатеричных и нешестнадцатеричных.