23
2010
07

FCKeditor漏洞总结以及修补方法

FCKeditor介绍
FCKeditor是一款功能强大的开源在线文本编辑器(DHTML editor),它使你在web上可以使用类似微软Word 的桌面文本编辑器的许多强大功能。它是轻量级且不必在客户端进行任何方式的安装。 FCKeditor兼容Firefox, Mozilla, Netscape 和IE。
FCKeditor官司方网址:http://www.fckeditor.net/
FCKeditor在线DEMO:http://www.fckeditor.net/demo
FCKeditor下载直址:http://www.fckeditor.net/download
确认程序为FCKeditor
要对漏洞进行测试,首先我们要确认网站中使用的编辑功能是不是由FCKeditor进行支持的。确认的方法很简单,打开网站带有编辑功能的页面,通常是发表文章或帖子的页面。单击IE菜单栏上的“查看”按钮,选择“源文件”,以“FCKeditor”为关键 字进行搜索,如果能搜索到,那么基本上可以确认该编辑功能使用的是FCKeditor。例如著名的博客程序Pjblog就可以通过这种方法得知其使用的就是FCKeditor。不过确认是FCKeditor并不代表其就有漏洞,因为这个漏洞只存在于之前的版本中,但是目前存在漏洞的 FCKeditor还是比较多的。
Google搜索:inurl:Fckeditor/editor
上传asp木马
确定网站中使用的是FCKeditor后,可以直接在IE地址栏中输入:http://www.***.com/FCKeditor /_samples/default.html。默认情况下可以打开一个FCKeditor编辑页面,有些精简版的FCKeditor会将 _samples文件夹删除,因此可能出现“找不到网页”的情况。在出现的页面中点击“插入/编辑图像”图标,打开“图像属性”窗口,点击其中的“浏览服 务器”服务器按钮,将出现一个文件上传页面。我们在这个页面上单击鼠标右键,选择“属性”,在“地址”一项中将找到这个页面的真实地址:

http://www.***.com/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/asp/connector.asp。

将 找到的地址复制到IE地址栏中打开,出现一个上传文件管理页面,此时我们就可以上传我们的asp木马了,不过在上传之前我们需要将asp木马的后缀名改为 asa,因为FCKeditor限制了asp文件的上传,却没有限制asa文件的上传,而asp文件和asa文件的执行效果是一样的,这就是 FCKeditor的漏洞所在——上传文件的过滤不严。
上传asp木马完成后,就可以在浏览器中执行木马,此时我们得到的是一个webshell,可以对网站中任意文件进行操作,如果想黑掉网站,也是轻而易举的事。可见,虽然FCKeditor功能做得很强大,在安全性方面却很薄弱。

如果通过上面的步骤进行测试没有成功,可能有以下几方面的原因:
1.FCKeditor没有开启文件上传功能,这项功能在安装FCKeditor时默认是关闭的。如果想上传文件,FCKeditor会给出错误提示。
2.网站采用了精简版的FCKeditor,精简版的FCKeditor很多功能丢失,包括文件上传功能。
3.FCKeditor的这个漏洞已经被修复。
FCKeditor上传路径
比如输入:

http://[target]/[path]/FCKeditor/editor/filemanager/browser/default/browser.html?Type=all&Connector=connectors/asp/connector.asp

上传文件地址是UserFiles/all/1.asa
“Type=all” 这个变量是自己定义的,在这里创建了all这个目录,而且新的目录没有上传文件格式的限制.
type=xxx
所传的文件就到了http://[target]/[path]/UserFiles/xxx/下了
type=../
所传文件就到网站根目录了.
FCKeditor的JSP版漏洞
查看配置和列出目录下的文件:

http://www.xxx.com/fckeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=FileUpload&Type=Image&CurrentFolder=%2F

上传shell的地址:

http://www.xxx.com/fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector

跟版本有关系.并不是百分百成功.
FCKeditor的PHP版漏洞
1. 上传文件漏洞,适用版本2.4.2以下:
fckeditor/editor/filemanager/upload/php/upload.php 61行未对Media类型进行上传文件类型的控制,导致用户上传任意文件。修补办法:更新到最新的2.5版本。或者在config.php文件中,添加对Media类型的文件类型限制。
2. 被动过滤:
config.php:

$Config['AllowedExtensions']['File'] = array() ;
$Config['DeniedExtensions']['File'] = array(‘html’,'htm’,'php’,'php2′,’php3′,’php4′,’php5′,’phtml’,'pwml’,'inc’,'asp’,'aspx’,'ascx’,'jsp’,'cfm’,'cfc’,'pl’,'bat’,'exe’,'com’,'dll’,'vbs’,'js’,'reg’,'cgi’,'htaccess’,'asis’) ;

字典越来越大啊 。我们先测试先以前的exp,上穿aa.php. 这样的文件结果变成了 aa_php. 看来还有其他变化啊:

function FileUpload( $resourceType, $currentFolder )
{
$sErrorNumber = ’0′ ;
$sFileName = ” ;

……….
// Replace dots in the name with underscores (only one dot can be there… security issue).
if ( $Config['ForceSingleExtension'] ) //多了个$Config['ForceSingleExtension']的配置 默认是ture
$sFileName = preg_replace( ‘/\\.(?![^.]*$)/’, ‘_’, $sFileName ) ; //这里替换了文件名里多余的. 即:1.1.php–>1_1.php

$sOriginalFileName = $sFileName ;

// Get the extension.
$sExtension = substr( $sFileName, ( strrpos($sFileName, ‘.’) + 1 ) ) ;
$sExtension = strtolower( $sExtension ) ; //替换后取后缀,因为上面的替换所以保证了文件名里只有一个. 即:1_1.php—>php

$arAllowed = $Config['AllowedExtensions'][$resourceType] ;
$arDenied = $Config['DeniedExtensions'][$resourceType] ;

if ( ( count($arAllowed) == 0 || in_array( $sExtension, $arAllowed ) ) && ( count($arDenied) == 0 || !in_array( $sExtension, $arDenied ) ) )//判断
{
………….

if ( is_file( $sFilePath ) )

{
$iCounter++ ;
$sFileName = RemoveExtension( $sOriginalFileName ) . ‘(‘ . $iCounter . ‘).’ . $sExtension ;

/*
这里判断有没有相同的文件名,如果有这改为在后缀前加一个(n). 如:_phs–>(1)._phs
那么我们可以利用产生的这个(n).不呢?答案是:NO 因为我们提交_php 经过
// Get the extension.
$sExtension = substr( $sFileName, ( strrpos($sFileName, ‘.’) + 1 ) ) ;
$sExtension = strtolower( $sExtension ) ;
这里时strrpos($sFileName, ‘.’)为空所以 还是:_php–>php 这个是没有办法通过上面的判断语句的
*/

$sErrorNumber = ’201′ ;

}
else
{
move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;

通过上面的分析,好象没办法了?。呵呵 我们可以不用.嘛,在win下还有一个空格呢 提交1.php+空格 就可以过去所有的。不过空格只支持win系统 *nix是不支持的[1.php和1.php+空格是2个不同的文件]

最后说明下,默认fckeditor是不让上传文件的:config.php:
// SECURITY: You must explicitelly enable this “connector”. (Set it to “true”).
$Config['Enabled'] = false ;

漏洞的修复
FCKeditor的漏洞因上传功能而起,因此只要我们将上传功能彻底关闭就可以了。打开位于FCKeditor安装目录 editor/filemanager/browser/default/connectors/asp/文件夹中的config.asp文件,将其中的 ConfigIsEnabled参数后面的值改为False,这样做的目的是将FCKeditor的文件上传功能关闭,漏洞当然也就无法被黑客利用了。
其实最简单的方法就是升级FCKeditor的版本,升级后漏洞就不存在了。如果FCKeditor是嵌入在网站程序中的,那么可能升级后会比较麻烦,这时采用第一种方法即可。

« 上一篇 下一篇 »