近期公司大量网站受到***,造成很的损失。经过反复分析,发现原来是FCKEditor存在上传漏洞。这里,我针对此上传漏洞进行了修正,具体情况请见以下分析:

***表现:
  接收上传的目录,发现有以“.asp;jpg”为扩展名的***文件。

***分析:
  执行上传目录的“.asp;jpg”文件,发现它被当做一个正常的ASP文件执行,这应该是IIS本身的漏洞,虚机用户根本就没办法处理。那么,我们只能从文件创建的角度处理了。于是我就开始分析FCKEditor的上传功能。FCKEditor上传检测,是通过黑色单/白名单的方式检测允许和不允许上传的文件类型。

上传支持文件:class_upload.asp

Private Function IsAllowed(sExt)
   Dim oRE
   Set oRE = New RegExp
   oRE.IgnoreCase = True
   oRE.Global   = True

   If sDenied = "" Then
    oRE.Pattern = sAllowed
    IsAllowed = (sAllowed = "") Or oRE.Test(sExt)
   Else
    oRE.Pattern = sDenied
    IsAllowed = Not oRE.Test(sExt)
   End If

   Set oRE = Nothing
End Function

通过上面的代码,我们明显可以看出,FCKEditor白名单检测不够严谨,所有文件扩展名里包含白名色单列表值的,都可以通过此验证,这就造成了类似“.asp;jpg、.asp;gif”等文件可以通过FCKEditor的图片上传功能传至网站,而IIS本身又有无法正常识别“.asp;jpg”的漏洞。结果自然也就不需要我说了。

解决办法:
本文以ASP版为例,上传支持文件地址:
  fckeditor\editor\filemanager\connectors\asp\class_upload.asp
知道了漏洞,那么我们处理起来,也就相对简单起来。只要完善FCKEditor的上传检测即可。

 

上传支持文件:class_upload.asp

Private Function IsAllowed(sExt)
   Dim oRE
   Set oRE = New RegExp
   oRE.IgnoreCase = True
   oRE.Global   = True

   If sDenied = "" Then
    oRE.Pattern = "^("&sAllowed&")$"
    IsAllowed = (Not sAllowed = "") And oRE.Test(sExt)
   Else
    oRE.Pattern = sDenied
    IsAllowed = Not oRE.Test(sExt)
   End If

   Set oRE = Nothing
End Function

引用:http://www.antsoftcn.com/Experience/201005/FCKEditorUploadBug.html

 

http://hi.baidu.com/gzqsd/blog/item/d0485ffd669aecf4fc037fdd.html

 

http://www.cnblogs.com/downmoon/archive/2008/05/23/1205784.html