在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后缀获取