Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

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

Уязвимость возникает из-за того что 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;
	}
}

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

Нет сообщений для отображения
Гость
Эта тема закрыта для дальнейших сообщений.

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.