Перейти к контенту

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


Рекомендуемые сообщения

  • Ответы 1,2k
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

Счастье в том, что вот что то типа этого :  http://damagelab.org/files/ipb_by_WJ.txt

 

работать не будет.

если отключит сторонние ссылки?

Ссылка на комментарий
Поделиться на других сайтах

Счастье в том, что вот что то типа этого :  http://damagelab.org/files/ipb_by_WJ.txt

 

работать не будет.

если отключит сторонние ссылки?

 

У некоторых это просто нереально, как у меня например.

Ссылка на комментарий
Поделиться на других сайтах

http://www.securitylab.ru/vulnerability/241796.php

Сразу говорю - для использования этой уязвимости нужен доступ в админку. Так что не стоит резко требовать заплаток.

 

На секьюритилаб это кто-то невменяемый запостил...

Ссылка на комментарий
Поделиться на других сайтах

Хм. А если в post_parser.php код

 

    if ( substr_count( $row['bbcode_replace'], '{content}' ) > 1 )
   {
  	 //-----------------------------------------
  	 // Slightly slower
  	 //-----------------------------------------
  	 
  	 if ( $row['bbcode_useoption'] )
  	 {
     preg_match_all( "#(\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\])(.+?)(\[/".$row['bbcode_tag']."\])#si", $t, $match );
     
     for ($i=0; $i < count($match[0]); $i++)
     {
    	 $tmp = $row['bbcode_replace'];
    	 $tmp = str_replace( '{option}' , $match[2][$i], $tmp );
    	 $tmp = str_replace( '{content}', $match[3][$i], $tmp );
    	 $t   = str_replace( $match[0][$i], $tmp, $t );
     }
  	 }
  	 else

 

модифицировать как

 

//    if ( substr_count( $row['bbcode_replace'], '{content}' ) > 1 )
   {
  	 //-----------------------------------------
  	 // Slightly slower
  	 //-----------------------------------------
  	 
  	 if ( $row['bbcode_useoption'] )
  	 {
     preg_match_all( "#(\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\])(.+?)(\[/".$row['bbcode_tag']."\])#si", $t, $match );
     
     for ($i=0; $i < count($match[0]); $i++)
     {
    	 $tmp = $row['bbcode_replace'];
// вот ниже идет то, что изменено
    	 if ( is_numeric($match[2][$i]) && (intval($match[2][$i]) == floatval($match[2][$i])) ) {
        	 $tmp = str_replace( '{option}' , $match[2][$i], $tmp );
    	 }
// конец изменения
    	 $tmp = str_replace( '{content}', $match[3][$i], $tmp );
    	 $t   = str_replace( $match[0][$i], $tmp, $t );
     }
  	 }
  	 else

 

Я пытался написать проверку на то, что введенный {option} является числом. Поможет?

 

Первая строка процитирована не зря. И закомментирована не зря -- идущий ниже по файлу "более быстрый" парсер я закомментировал. Ибо пхп не знаю и аналогичную проверку там вставить не смог.

Ссылка на комментарий
Поделиться на других сайтах

*SHADOW* странно у меня 1.3 модиф. и таких тегов нет в панели UB code я так понял они не используются по назначению если этот момент важный то что с пармером делать чтоб запретить именно их ?
Ссылка на комментарий
Поделиться на других сайтах

*SHADOW* странно у меня 1.3 модиф. и таких тегов нет в панели UB code я так понял они не используются по назначению если этот момент важный то что с пармером делать чтоб запретить именно их ?

ЧТО? :D

Ссылка на комментарий
Поделиться на других сайтах

Я пытался написать проверку на то, что введенный {option} является числом. Поможет?

 

Первая строка процитирована не зря. И закомментирована не зря -- идущий ниже по файлу "более быстрый" парсер я закомментировал. Ибо пхп не знаю и аналогичную проверку там вставить не смог.

 

сделал такую же проверку, потому что отключать теги не хотелось...

по-моему, у меня немного красивее вышло и быстрый парсер отключать не надо:

все в том же post_parser.php в том же месте заменить строку

 

$tmp = str_replace( '{option}' , $match[2][$i], $tmp );

 

на

 

							if( preg_match("#^[0-9]+$#", $match[2][$i]) ) {
							$tmp = str_replace( '{option}' , $match[2][$i], $tmp );
						}

 

и чуть ниже строку

 

$t = preg_replace( "#\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\]#si", str_replace( '{option}', "\\1", $replace[0] ), $t );

 

на

						if( preg_match("#\[".$row['bbcode_tag']."=(?:"|&\#39;)?([0-9]+?)(?:"|&\#39;)?\]#si", $t) ) {
						$t = preg_replace( "#\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\]#si", str_replace( '{option}', "\\1", $replace[0] ), $t );
					}

 

сразу надо сказать, что если проверять все доп. бб-теги на цифры, то и работать будут только те, где нужны именно цифры...

 

хотя, можно в шаблоны добавить все символы, кроме []<>

Изменено пользователем cthulhu
Ссылка на комментарий
Поделиться на других сайтах

на античате появилась якобы уязвимость... http://video.antichat.net/videos/Silveran/defiz.rar ("место возможного переноса")

 

проверил на многих форумах... настройка не включена....

ACP - > Security and Privacy - > Remove chr(0xCA) from input?

Can be used as a 'hidden' space to emulate registered names - but can cause problems in non Western character sets.(так как "место возможного переноса" не отображается как символ, то визуально ник состоящий только из этих символов будет выглядеть как пустое место или можно регаться именами админов например)

 

при помощи этого можно страндартно бороться с регистрацией чела с ником состоящим из символов "мест возможного переноса", но я предлагаю заменять этот сомвол на обычное тире:

в файле register.php после

 

  //-----------------------------------------
 // Remove multiple spaces in the username
 //-----------------------------------------

 $in_username = preg_replace( "/\s{2,}/", " ", $in_username );

 

 

вставить

  $in_username = str_replace( chr(173), '& #8211;' , $in_username );

 

естетвенно & и # без пробела

Ссылка на комментарий
Поделиться на других сайтах

естетвенно & и # без пробела

А зачем тогда в коде с пробелом написал?

 

 

//-----------------------------------------

// Remove multiple spaces in the username

//-----------------------------------------

 

$in_username = preg_replace( "/\s{2,}/", " ", $in_username );

 

Внизу вставить это?

 

$in_username = str_replace( chr(173), '& #8211;' , $in_username );

да?

Ссылка на комментарий
Поделиться на других сайтах

добавлю ка я эту замену в свой проверяльщик данных)) этот символ не нужен ни в каких входных данных :D
Ссылка на комментарий
Поделиться на других сайтах

Кто-то может составить регексп для вырезания всех вариаций обратной кавычки и преобразования ее в какой нить безопасный вариант? если я вставлю в свой преобработчик такой регэксп, то есть вероятность, что можна покончить со всякими XSS одним махом... Изменено пользователем Vic'er
Ссылка на комментарий
Поделиться на других сайтах

Вроде нашел решение, конечно на форумах, где постят много кодов скриптов это не очень удачное решение, но все же...

 

Создаем фильтр мата и вписываем

background =  backgr__ound   -   Точный 
cookie	 =	 coo__kie		   -   Точный 
document  =   docu__ment	  -   Точный 
images   =	  ima__ges		  -   Точный 
javascript  =   ja__vasc__ript  -   Точный

 

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

Ссылка на комментарий
Поделиться на других сайтах

Исправление уязвимостей форумов

А обновление темки ожидается? :D

 

 

Я присоединяюсь к вопросу. Т.к. моих способностей не хватает, чтобы вникнуть в мануал по функции preg_replace, очень прошу сильных мира сего (в лице GiV) выложить официальный патч для всех версий, если данная уязвимость имеет место быть.

Изменено пользователем Anna
Ссылка на комментарий
Поделиться на других сайтах

и чуть ниже строку

 

$t = preg_replace( "#\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\]#si", str_replace( '{option}', "\\1", $replace[0] ), $t );

 

на

						if( preg_match("#\[".$row['bbcode_tag']."=(?:"|&\#39;)?([0-9]+?)(?:"|&\#39;)?\]#si", $t) ) {
						$t = preg_replace( "#\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\]#si", str_replace( '{option}', "\\1", $replace[0] ), $t );
					}

 

хм а у меня тут ошибку выдает при проверке

Ссылка на комментарий
Поделиться на других сайтах

хм а у меня тут ошибку выдает при проверке

 

хмм... я скопировал ровно то, что сейчас стоит у меня в коде...

так что у меня ошибок нема...

Ссылка на комментарий
Поделиться на других сайтах

Vic'er

 

немного затрудняюсь ответить что такое "регексп" но думаю что вот это имеловь ввиду:

 

$text = str_replace( '"', '& quot;' , $text );
$text = str_replace( chr(180), "& acute;" , $text );
$text = str_replace( "‘", "& lsquo;" , $text );
$text = str_replace( "’", "& rsquo;" , $text );
$text = str_replace( "“", "& ldquo;" , $text);
$text = str_replace( "”", "& rdquo;" , $text);
$text = str_replace( "‚", "& sbquo;" , $text);
$text = str_replace( "„", "& bdquo;" , $text);
$text = str_replace( "`", "& lsquo;" , $text );

Ссылка на комментарий
Поделиться на других сайтах


×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.