当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

[代码分析]FCKEditor 2.6.8 ASP Version File Upload Protection

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

   今天在论坛看见一童鞋发关于fck上传漏洞的总结,这个说实话百度很多,但是他文中提到了关于fckeditor 2.6.8 asp的一个上传绕过 !

    在exploit-db上只有他的一个利用视频和修复建议,没有具体的代码分析,于是乎我百度了下,大多都是直接转载的exploit-db的内容,基本没有代码分析过程!

    于是抱着知其然更需知其所以然的态度,看了下代码。搜狗电脑知识网

=================================================

001'漏洞文件:editor/filemanager/connectors/asp/commands.asp

002'漏洞函数:

003

004Sub FileUpload( resourceType, currentFolder, sCommand )

005    Dim oUploader

006    Set oUploader = New NetRube_Upload

007    oUploader.MaxSize   = 0

008    oUploader.Allowed   = ConfigAllowedExtensions.Item( resourceType )

009    oUploader.Denied    = ConfigDeniedExtensions.Item( resourceType )

010    oUploader.HtmlExtensions = ConfigHtmlExtensions

011    oUploader.GetData

012    Dim sErrorNumber

013    sErrorNumber = "0"

014    Dim sFileName, sOriginalFileName, sExtension

015    sFileName = ""

016    If oUploader.ErrNum > 0 Then

017        sErrorNumber = "202"

018    Else

019        ' Map the virtual path to the local server path.

020        Dim sServerDir

021        sServerDir = ServerMapFolder( resourceType, currentFolder, sCommand ) '获取保存文件路径

022        Dim oFSO

023        Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )

024        if not (oFSO.FolderExists( sServerDir ) ) then '判断文件夹是否存在

025            sErrorNumber = "102"

026        else

027            ' Get the uploaded file name.

028            sFileName   = oUploader.File( "NewFile" ).Name '获取上传文件名(包含后缀)

029            sExtension  = oUploader.File( "NewFile" ).Ext  '获取上传文件后缀(获取方式是文件名倒数第一个点开始的后面的字符)

030            sFileName = SanitizeFileName( sFileName ) '对文件名进行处理,处理方式见文章下面的相关函数

031            sOriginalFileName = sFileName

032            Dim iCounter

033            iCounter = 0

034'*******************************************************************

035            Do While ( True )

036                Dim sFilePath

037                sFilePath = CombineLocalPaths(sServerDir, sFileName) '把文件路径和文件名合在一起

038                If ( oFSO.FileExists( sFilePath ) ) Then

039                    iCounter = iCounter + 1

040                    sFileName = RemoveExtension( sOriginalFileName ) & "(" & iCounter & ")." & sExtension 

041                                        '漏洞关键点 sFileName

042                    sErrorNumber = "201"

043                Else

044                    oUploader.SaveAs "NewFile", sFilePath

045                    If oUploader.ErrNum > 0 Then sErrorNumber = "202"

046                    Exit Do

047                End If

048            Loop

049'*********************************************************************

050'以上部分是一个循环,当sFilePath不存在时,就直接进入else中调用类中oUploader.SaveAs保存文件!这个过程就是我们第一次

051'上传时的代码执行流程,在第一个流程中我们sFilePath变量是sServerDir和sFileName两个变量合成的,此时的sFileName是

052'经过 SanitizeFileName()函数处理过后的变量,而当我们再次上传同名文件时,会进入if流程这个时候的sFileName将是用

053'sExtension的后缀,此时的sFileName将在下次循环中和sServerDir一起合成sFilePath,因此第二次上传的后缀是没有经过处理的

054'然后直接带入oUploader.SaveAs中进行保存,接下来看下oUploader.SaveAs保存文件和oUploader.File( "NewFile" ).Ext后缀获取

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1