Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
andaril

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;
	}
}

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

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