Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие движки / фрейморки > Можно ли проверитьь на уязвимость форум IPB1.3


Автор: Jey_k 16.5.2006, 14:00
Сабж. 

Автор: 2man 19.5.2006, 15:33
Jey_k, в 1.3 все уже давно найдено и пофикшено.
Я опубликую те баги, которые нашли разработчики после релиза 1.3.

#1

Если стоит чистый IPB 1.3.x, то можешь скачать обновленный файл: http://forums.invisionpower.com/index.php?...pe=post&id=5691

В файле sources/lib/post_parser.php найти:

Код

else if ($IN['s'] == 'col')
 {
  return "<span style='color:".$IN['1']."'>".$IN['2']."</span>";
 }
 else if ($IN['s'] == 'font')
 {
  return "<span style='font-family:".$IN['1']."'>".$IN['2']."</span>";
 }

 
заменить на:

Код

else if ($IN['s'] == 'col')
 {
  $IN[1] = preg_replace( "/[^\d\w\#\s]/s", "", $IN[1] );
  return "<span style='color:".$IN['1']."'>".$IN['2']."</span>";
 }
 else if ($IN['s'] == 'font')
 {
  $IN['1'] = preg_replace( "/[^\d\w\#\-\_\s]/s", "", $IN['1'] );
  return "<span style='font-family:".$IN['1']."'>".$IN['2']."</span>";
 }
 


#2

Исправление уязвимостей найденных http://www.ibresource.ru/forums/index.php?showuser=8359.
Уязвимость связанная с extended тэгами [video], [sound]
Исправление производится в файле /sources/lib/post_parser.php
находим:

Код

$txt = preg_replace( "#\[video\](.+?)\[/video\]#is", "<embed width=\"400\" height=\"300\" src=\\1 type=\"application/x-shockwave-video\">", $txt );
$txt = preg_replace( "#\[sound\](.+?)\[/sound\]#is", "<param name=\"BACKGROUNDCOLOR\" <br /><embed src=\\1 align=\"baseline\" border=\"0\" width=\"275\" height=\"40\" type=\"audio/x-pn-realaudio-plugin\" console=\"Clip1\" controls=\"ControlPanel\" autostart=\"true\">", $txt ); 


заменяем на:

Код

$txt = preg_replace( "#\[video\](\S+?)\[/video\]#ies", "\$this->regex_build_src('\\1', 'video')", $txt );
$txt = preg_replace( "#\[sound\](\S+?)\[/sound\]#ies", "\$this->regex_build_src('\\1', 'sound')", $txt ); 


и перед

Код

function regex_build_url($url=array()) { 


добавляем

Код

function regex_build_src($src="", $type) {

if (!$src) return;
  
// clean up the ampersands
$src = preg_replace( "/&/" , "&" , $src );

// Make sure we don't have a JS link
$src = preg_replace( "/javascript:/i", "java script: ", $src );

// Do we have http:// at the front?

if ( ! preg_match("#^(http|ftp)://#", $src ) )
{
 $src = 'http://'.$src;
} 

switch ($type) {
 case 'video': $src="<embed width=\"400\" height=\"300\" src=\"{$src}\" type=\"application/x-shockwave-video\">"; break;
 case 'sound': $src="<param name=\"BACKGROUNDCOLOR\" <br /><embed src=\"{$src}\" align=\"baseline\" border=\"0\" width=\"275\" height=\"40\" type=\"audio/x-pn-realaudio-plugin\" console=\"Clip1\" controls=\"ControlPanel\" autostart=\"true\">"; break;
 default: return;
}

return $src;
 
} 



#3

Уязвимость связанная с вложением тэгов в [font], [color], [size]
Уязвимы форумы: IPB версий 1.х.x и 2.0.х
Исправление производится в файле /sources/lib/post_parser.php
находим:

Код

while ( preg_match( "#\[size=([^\]]+)\](.+?)\[/size\]#ies", $txt ) )
{
$txt = preg_replace( "#\[size=([^\]]+)\](.+?)\[/size\]#ies"    , "\$this->regex_font_attr(array('s'=>'size','1'=>'\\1','2'=>'\\2'))", $txt );
}
  
while ( preg_match( "#\[font=([^\]]+)\](.*?)\[/font\]#ies", $txt ) )
{
$txt = preg_replace( "#\[font=([^\]]+)\](.*?)\[/font\]#ies"    , "\$this->regex_font_attr(array('s'=>'font','1'=>'\\1','2'=>'\\2'))", $txt );
}
  
while( preg_match( "#\[color=([^\]]+)\](.+?)\[/color\]#ies", $txt ) )
{
$txt = preg_replace( "#\[color=([^\]]+)\](.+?)\[/color\]#ies"  , "\$this->regex_font_attr(array('s'=>'col' ,'1'=>'\\1','2'=>'\\2'))", $txt );
} 


заменяем на:

Код

while ( preg_match( "#\[size=([0-9]+)\](.+?)\[/size\]#is", $txt ) )
{
$txt = preg_replace( "#\[size=([0-9]+)\](.+?)\[/size\]#ies"    , "\$this->regex_font_attr(array('s'=>'size','1'=>'\\1','2'=>'\\2'))", $txt );
}
  
while ( preg_match( "#\[font=([a-zA-Z]+)\](.*?)\[/font\]#is", $txt ) )
{
$txt = preg_replace( "#\[font=([a-zA-Z]+)\](.*?)\[/font\]#ies"    , "\$this->regex_font_attr(array('s'=>'font','1'=>'\\1','2'=>'\\2'))", $txt );
}
  
while( preg_match( "#\[color=([a-zA-Z]+)\](.+?)\[/color\]#is", $txt ) )
{
$txt = preg_replace( "#\[color=([a-zA-Z]+)\](.+?)\[/color\]#ies"  , "\$this->regex_font_attr(array('s'=>'col' ,'1'=>'\\1','2'=>'\\2'))", $txt );
} 


Внимание: данный способ решения разрешает только стандартные теги цвета, размера и шрифта. Т.е. те теги которые есть в форме ответа. Тэги вида [color=#c4c4c4], [font='Arial New'], [size=small] работать не будут!

#4

в post_parser.php меняем это:

Код

$txt = preg_replace( "#\[email\](\S+?)\[/email\]#i"                                                                , "<a href='mailto:\\1'>\\1</a>", $txt );
 $txt = preg_replace( "#\[email\s*=\s*\"\;([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\s*\"\;\s*\](.*?)\[\/email\]#i"  , "<a href='mailto:\\1'>\\2</a>", $txt );
 $txt = preg_replace( "#\[email\s*=\s*([\.\w\-]+\@[\.\w\-]+\.[\w\-]+)\s*\](.*?)\[\/email\]#i"                       , "<a href='mailto:\\1'>\\2</a>", $txt ); 


на это:

Код

$txt = preg_replace( "#\[email\]\s*([0-9a-z]([-_.]?[0-9a-z])*@([a-z0-9\-]+\.)+([a-z0-9\-]{2}|net|com|gov|mil|org|edu|int|xxx))\s*\[/email\]#i"                                 , "<a href='mailto:\\1'>\\1</a>", $txt );
 $txt = preg_replace( "#\[email\s*=\s*\"\;\s*([0-9a-z]([-_.]?[0-9a-z])*@([a-z0-9\-]+\.)+([a-z0-9\-]{2}|net|com|gov|mil|org|edu|int|xxx))\s*\"\;\s*\](.*?)\[\/email\]#i" , "<a href='mailto:\\1'>\\5</a>", $txt );
 $txt = preg_replace( "#\[email\s*=\s*([0-9a-z]([-_.]?[0-9a-z])*@([a-z0-9\-]+\.)+([a-z0-9\-]{2}|net|com|gov|mil|org|edu|int|xxx))\s*\](.*?)\[\/email\]#i"                       , "<a href='mailto:\\1'>\\5</a>", $txt ); 



#5

в post_parser.php после этого:

Код

/**************************************************/
// regex_check_image: Checks, and builds the <img>
// html.
/**************************************************/

function regex_check_image($url="") {
global $ibforums;

if (!$url) return;

$url = trim($url);

$default = "[img]".$url."[/img]";

++$this->image_count;
 

добавляем:

Код

if (strpos(urldecode($url), "`") !== false)
{
 $this->error = 'no_dynamic';
 return $default;
} 



#6

sources/lib/usercp_functions.php (Строка: 705)
Найти:

Код

//-----------------------------------------
// Check to make sure we don't just have
// http:// in the URL box..
//-----------------------------------------

if ( preg_match( "/^http:\/\/$/i", $ibforums->input['url_avatar'] ) )
{
$ibforums->input['url_avatar'] = "";
}

if ( empty($ibforums->input['url_avatar']) ) 


Заменить на:

Код

//-----------------------------------------
// Check to make sure we don't just have
// http:// in the URL box..
//-----------------------------------------

if ( preg_match( "/^http:\/\/$/i", $ibforums->input['url_avatar'] ) )
{
$ibforums->input['url_avatar'] = "";
}

if ( preg_match( "#javascript:#is", $ibforums->input['url_avatar'] ) )
{
$ibforums->input['url_avatar'] = "";
}

if ( empty($ibforums->input['url_avatar']) ) 



# По материалам http://www.ibresource.ru  

Автор: Jey_k 19.5.2006, 18:17
2man, спасибо огромное. А я вот когда-то ставил заплатку, такого рода:

/login.php

 вместо строки: 
Код

$pid = $std->my_getcookie(pass_hash); 


вставить: 
Код

$pid = (!preg_match("/^([0-9A-Za-z] ){32}$/",$std->my_getcookie(pass_hash),$std->my_getcookie(pass_hash))); 

или
Код

$pid = (strlen(trim($std->my_getcookie('pass_hash')))==32)?$std->my_getcookie('pass_hash'):"";


и добавить в файл .htaccess (в корневой папке сайта) строку: 

Код

php_value magic_quotes_gpc 1


 

Автор: Opik 23.5.2006, 17:03
2man, 
Багов было куда больше. 

Автор: 2man 24.5.2006, 14:39
ИМХО, баги = уязвимости[/B] (неравно!)

Opik, смотря когда качался архив... 

Автор: Opik 24.5.2006, 15:17
2man, 
Какая разница когда он качался? 
Версия: IPB1.3.
С момента её выхода была куда больше багов smile

С таким же успехом я скачаю пропатченное, и скажу что там багов нет smile 

Автор: 2man 27.5.2006, 16:00
Цитата(Opik @  24.5.2006,  15:17 Найти цитируемый пост)
 момента её выхода была куда больше багов 

 smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)