XSS инъекция через прикрепляемые файлы - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы настройки и администрирования форумов IPB 2.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 3.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

ipb 2.1.x ipb 2.2.x security update xss инъекция обновления безопасности уязвимость
Страница 1 из 1
  • Вы не можете создавать новые темы
  • Тема закрыта

XSS инъекция через прикрепляемые файлы

#1 Пользователь не на сайте   andaril 

 
 
  • -_-'
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 2 638
  • Регистрация: 24-Март 07
  • Откуда:Тат, Наб. Челны
  • IPB version:I have no IPB
 

  Отправлено 26 Апрель 2007 - 23:40

Уязвимость возникает из-за того что Invision Power Board позволяет пользователю загрузить изображение или PDF файл, содержащий JavaScript. Данный скрипт срабатывает при открытии прикрепления пользователем, так как это происходит в контексте браузерной сессии это позволяет злоумышленнику получить всю информацию о данной сессии.

Скачать измененный файл для версий 2.1.x: http://forums.invisionpower.com/index.php?...st&id=11582
Скачать измененный файл для версий 2.2.x: http://forums.invisionpower.com/index.php?...st&id=11583

Пример/Эксплоит: Нет

Исправление 2.1.7:
Открыть файл ./ips_kernel/class_upload.php, найти:

		if ( $this->make_script_safe )
		{
			if ( preg_match( "/\.(cgi|pl|js|asp|php|html|htm|jsp|jar)$/i", $FILE_NAME ) )
			{

				$FILE_TYPE				 = 'text/plain';
				$this->file_extension	  = 'txt';
			}
		}


Заменить на:

		$renamed = 0;
		
 		if ( $this->make_script_safe )
 		{
 			if ( preg_match( "/\.(cgi|pl|js|asp|php|html|htm|jsp|jar)/", $FILE_NAME ) )
 			{
 				$FILE_TYPE				 = 'text/plain';
 				$this->file_extension	  = 'txt';
				
				$renamed = 1;
 			}
 		}


Найти:

 	if ( ! @move_uploaded_file( $_FILES[ $this->upload_form_field ]['tmp_name'], $this->saved_upload_name) )
		{
			$this->error_no = 4;
			return;
		}
		else
		{
			@chmod( $this->saved_upload_name, 0777 );
		}


Добавить после:

		if( !$renamed )
		{
			$this->check_xss_infile();
			
			if( $this->error_no )
			{
				return;
			}
		}


Найти:

	/*-------------------------------------------------------------------------*/
	// INTERNAL: Get file extension
	/*-------------------------------------------------------------------------*/
	
	/**
	* Returns the file extension of the current filename
	*
	* @param string Filename
	*/
	
	function _get_file_extension($file)
	{
		return strtolower( str_replace( ".", "", substr( $file, strrpos( $file, '.' ) ) ) );
	}


Добавить перед:

	/*-------------------------------------------------------------------------*/
	// INTERNAL: Check for XSS inside file
	/*-------------------------------------------------------------------------*/
	
	/**
	* Checks for XSS inside file.  If found, sets error_no to 5 and returns
	*
	* @param void
	*/
	
	function check_xss_infile()
	{
		// HTML added inside an inline file is not good in IE...
		
		$fh = fopen( $this->saved_upload_name, 'rb' );
		
		$file_check = fread( $fh, 512 );
		
		fclose( $fh );
		
		if( !$file_check )
		{
			@unlink( $this->saved_upload_name );
			$this->error_no = 5;
			return;
		}
		
		# Thanks to Nicolas Grekas from comments at www.splitbrain.org for helping to identify all vulnerable HTML tags
		
		else if( preg_match( "#<script|<html|<head|<title|<body|<pre|<table|<a\s+href|<img|<plaintext#si", $file_check ) )
		{
			@unlink( $this->saved_upload_name );
			$this->error_no = 5;
			return;
		}
	}


Исправление 2.2.2:
Открыть файл ./ips_kernel/class_upload.php, найти:

		if ( $this->make_script_safe )
		{
			if ( preg_match( "/\.(cgi|pl|js|asp|php|html|htm|jsp|jar)$/i", $FILE_NAME ) )
			{
				$FILE_TYPE				 = 'text/plain';
				$this->file_extension	  = 'txt';
			}
		}


Заменить на:

		$renamed = 0;
		
 		if ( $this->make_script_safe )
 		{
 			if ( preg_match( "/\.(cgi|pl|js|asp|php|html|htm|jsp|jar)/", $FILE_NAME ) )
 			{
 				$FILE_TYPE				 = 'text/plain';
 				$this->file_extension	  = 'txt';
				$this->parsed_file_name	   = preg_replace( "/\.(cgi|pl|js|asp|php|html|htm|jsp|jar)(\.|$)/i", "$2", $this->parsed_file_name );
				
				$renamed = 1;
 			}
 		}


Найти:

 	if ( ! @move_uploaded_file( $_FILES[ $this->upload_form_field ]['tmp_name'], $this->saved_upload_name) )
		{
			$this->error_no = 4;
			return;
		}
		else
		{
			@chmod( $this->saved_upload_name, 0777 );
		}


Добавить после:

		if( !$renamed )
		{
			$this->check_xss_infile();
			
			if( $this->error_no )
			{
				return;
			}
		}


Найти:

	/*-------------------------------------------------------------------------*/
	// INTERNAL: Get file extension
	/*-------------------------------------------------------------------------*/
	
	/**
	* Returns the file extension of the current filename
	*
	* @param string Filename
	*/
	
	function _get_file_extension($file)
	{
		return strtolower( str_replace( ".", "", substr( $file, strrpos( $file, '.' ) ) ) );
	}


Добавить перед:

	/*-------------------------------------------------------------------------*/
	// INTERNAL: Check for XSS inside file
	/*-------------------------------------------------------------------------*/
	
	/**
	* Checks for XSS inside file.  If found, sets error_no to 5 and returns
	*
	* @param void
	*/
	
	function check_xss_infile()
	{
		// HTML added inside an inline file is not good in IE...
		
		$fh = fopen( $this->saved_upload_name, 'rb' );
		
		$file_check = fread( $fh, 512 );
		
		fclose( $fh );
		
		if( !$file_check )
		{
			@unlink( $this->saved_upload_name );
			$this->error_no = 5;
			return;
		}
		
		# Thanks to Nicolas Grekas from comments at www.splitbrain.org for helping to identify all vulnerable HTML tags
		
		else if( preg_match( "#<script|<html|<head|<title|<body|<pre|<table|<a\s+href|<img|<plaintext#si", $file_check ) )
		{
			@unlink( $this->saved_upload_name );
			$this->error_no = 5;
			return;
		}
	}

0

Сообщить об этой теме:


Страница 1 из 1
  • Вы не можете создавать новые темы
  • Тема закрыта

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Заказ дизайна форума

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2012 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна