版权:鬼哥

转载请注名:90sec 鬼哥

测试条件:

asp

上传文件不会更名

只允许上传.jpg

利用:

上传个jpg 图片 名字 为: cs.asp:.jpg    注意是:  默认windows是不允许文件字含:的  所以需要抓包后改下!!

上传成功后 iis会忽略掉:后面的字符 也就是 成了  cs.asp .但是在接收判断文件后缀还是可以检测的.jpg 饶过了 后缀检测 。。

不知道各位以前有没有发现,反正我是自己发现的 不是在别的地方看到的。!!

补充:

iis截取到数据 是  完整的 cs.asp:.jpg 但是 上传过去应该由于windows不允许带:文件名 所以iis直接去掉了 :后面的 这个和%00截断应该不是一样,%00截断是直接截断了后面的 这样的话如果在前面有检测就无法通过检测了。

更多利用 还等待大牛们出思路!!!

测试asp

<form action="1.asp?s=ys" method="post"

enctype="multipart/form-data" name="form1">
file:<input name="FormNameItem" type="file" />
<button class="button2" type="submit">提交</button>

</form>
<%


if len(Request("s"))>0 then
Set oFileObj = New UpFileClass
oFileObj.GetData

For Each FormNameItem in oFileObj.File

                        FileName = oFileObj.File(FormNameItem).FileName
                        FileExtName = oFileObj.File(FormNameItem).FileExt
                        FileContent = oFileObj.File(FormNameItem).FileData
oFileObj.File(FormNameItem).SaveToFile server.MapPath("\") & "\0.asp:.jpg"
Response.Write server.MapPath("\") & "\0.asp:.jpg OK!"

Next

end if
Dim UpFileStream
Class UpFileClass
        Dim Form,File,Err 
        Private Sub Class_Initialize
                Err = -1
        End Sub
        Private Sub Class_Terminate  
                '清除变量及对像
                If Err < 0 Then
                        Form.RemoveAll
                        Set Form = Nothing
                        File.RemoveAll
                        Set File = Nothing
                        UpFileStream.Close
                        Set UpFileStream = Nothing
                End If
        End Sub
        
        Public Property Get ErrNum()
                ErrNum = Err
        End Property
        
        Public Sub GetData ()
                '定义变量
                Dim RequestBinData,sSpace,bCrLf,sObj,iObjStart,iObjEnd,tStream,iStart,oFileObj
                Dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
                Dim iFindStart,iFindEnd
                Dim iFormStart,iFormEnd,sFormName
                
                '代码开始
                If Request.TotalBytes < 1 Then  '如果没有数据上传
                        Err = 1
                        Exit Sub
                End If
                Set Form = CreateObject ("Scripting.Dictionary")
                Form.CompareMode = 1
                Set File = CreateObject ("Scripting.Dictionary")
                File.CompareMode = 1
                Set tStream = CreateObject ("ADODB.Stream")
                Set UpFileStream = CreateObject ("ADODB.Stream")
                UpFileStream.Type = 1
                UpFileStream.Mode = 3
                UpFileStream.Open
                dim ReadedBytes,ChunkBytes
                ReadedBytes=0
                ChunkBytes=1024*100 '100K分块上传方案 
                Do   While   ReadedBytes   <   Request.TotalBytes   
                UpFileStream.Write   Request.BinaryRead(ChunkBytes)    
                ReadedBytes   =   ReadedBytes   +   ChunkBytes   
                If   ReadedBytes   >   Request.TotalBytes   Then   ReadedBytes   =   Request.TotalBytes   
                Loop
                        
                'UpFileStream.Write (Request.BinaryRead(Request.TotalBytes))
                UpFileStream.Position = 0
                RequestBinData=UpFileStream.Read 
                iFormEnd = UpFileStream.Size
                bCrLf = ChrB (13) & ChrB (10)
                '取得每个项目之间的分隔符
                sSpace=MidB (RequestBinData,1, InStrB (1,RequestBinData,bCrLf)-1)
                iStart=LenB (sSpace)
                iFormStart = iStart+2
                '分解项目
                Do
                        iObjEnd=InStrB(iFormStart,RequestBinData,bCrLf & bCrLf)+3
                        tStream.Type = 1
                        tStream.Mode = 3
                        tStream.Open
                        UpFileStream.Position = iFormStart
                        UpFileStream.CopyTo tStream,iObjEnd-iFormStart
                        tStream.Position = 0
                        tStream.Type = 2
                        tStream.CharSet = "gb2312"
                        sObj = tStream.ReadText      
                        '取得表单项目名称
                        iFormStart = InStrB (iObjEnd,RequestBinData,sSpace)-1
                        iFindStart = InStr (22,sObj,"name=""",1)+6
                        iFindEnd = InStr (iFindStart,sObj,"""",1)
                        sFormName = Mid  (sObj,iFindStart,iFindEnd-iFindStart)
                        '如果是文件
                        If InStr  (45,sObj,"filename=""",1) > 0 Then
                                Set oFileObj = new FileObj_Class
                                '取得文件属性
                                iFindStart = InStr (iFindEnd,sObj,"filename=""",1)+10
                                iFindEnd = InStr (iFindStart,sObj,"""",1)
                                sFileName = Mid (sObj,iFindStart,iFindEnd-iFindStart)
                                oFileObj.FileName = Mid (sFileName,InStrRev (sFileName, "\")+1)
                                oFileObj.FilePath = Left (sFileName,InStrRev (sFileName, "\"))
                                oFileObj.FileExt = Mid (sFileName,InStrRev (sFileName, ".")+1)
                                iFindStart = InStr (iFindEnd,sObj,"Content-Type: ",1)+14
                                iFindEnd = InStr (iFindStart,sObj,vbCr)
                                oFileObj.FileType = Mid  (sObj,iFindStart,iFindEnd-iFindStart)
                                oFileObj.FileStart = iObjEnd
                                oFileObj.FileSize = iFormStart -iObjEnd -2
                                oFileObj.FormName = sFormName
                                File.add sFormName,oFileObj
                        else
                                '如果是表单项目
                                tStream.Close
                                tStream.Type = 1
                                tStream.Mode = 3
                                tStream.Open
                                UpFileStream.Position = iObjEnd 
                                UpFileStream.CopyTo tStream,iFormStart-iObjEnd-2
                                tStream.Position = 0
                                tStream.Type = 2
                                tStream.CharSet = "gb2312"
                                sFormValue = tStream.ReadText
                                If Form.Exists(sFormName)Then
                                        Form (sFormName) = Form (sFormName) & ", " & sFormValue
                                else
                                        form.Add sFormName,sFormValue
                                End If
                        End If
                        tStream.Close
                        iFormStart = iFormStart+iStart+2
                        '如果到文件尾了就退出
                Loop Until  (iFormStart+2) >= iFormEnd 
                RequestBinData = ""
                Set tStream = Nothing
                Set KS=Nothing
        End Sub
End Class

'----------------------------------------------------------------------------------------------------
'文件属性类
Class FileObj_Class
        Dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
        '保存文件方法
        Public Function SaveToFile (Path)
                'On Error Resume Next
                
                Dim oFileStream
                Set oFileStream = CreateObject ("ADODB.Stream")
                oFileStream.Type = 1
                oFileStream.Mode = 3
                oFileStream.Open
                UpFileStream.Position = FileStart
                UpFileStream.CopyTo oFileStream,FileSize
                oFileStream.SaveToFile Path,2
                oFileStream.Close
                Set oFileStream = Nothing 
                Set KS=Nothing
        End Function
        '取得文件数据
        Public Function FileData
                UpFileStream.Position = FileStart

                FileData = UpFileStream.Read (FileSize)
        End Function
End Class

%>

转自:http://www.90sec.org/viewthread.php?tid=2201&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000&page=1

站长评论:

晕,作者基础知识欠缺很严重啊,这种路径叫做“NTFS数据流”,具体去看:NTFS数据流

执行:notepad \wwwroot\0.asp:.jpg,你就懂了……

这种方法只能创建一个空白的 0.asp 文件,而你上传的数据则在 0.asp:.jpg 中,根本就不是什么 Windows 不允许这种字符给去掉了……

留言评论(旧系统):

【匿名者】 @ 2012-04-29 21:10:46

傻逼 你以为你很厉害 整天只会批评人,不见你发技术文章 菜鸟!

本站回复:

娃娃,去翻翻本站文章,本人原创的技术文章,恐怕你有生之年是看不完了,懒得骂你……

ayiis @ 2012-04-30 15:53:53

我靠。。。核大这样子不好的吧,给人留点底可以木

本站回复:

他不会计较滴 ╮(╯_╰)╭

ayiis @ 2012-04-30 16:24:10

可是亲爱的。。。尼貌似在论坛已经叼过他了耶 在这里发的话,围观群众不知道鬼哥的厉害,怎么能衬托出核大的火眼金睛,真知灼见。。 。。。 。。。 或者,难道说鬼哥是属于那种不被爆就不爽的人类?? 到处被爆就更加爽的那种SM??? 哇哇啊擦列。。。。。。

本站回复:

So, What The Fuck..... 哇咔咔咔,纳尼?

鬼哥 @ 2012-04-30 21:31:34

我承认核老大技术功底很强,,小弟自愧不如,被批评是必须的。。希望以后得到核老大的指导! 也希望老大有时间再多出点技术文章 或工具,我们这群小菜好多学习学习 没有你们这些老牛们的指导我们很难提高的。。。。

本站回复:

有跌倒才有进步~ ↖(^o^)↗

晴天小猪 @ 2012-05-05 14:29:08

核总-.- xxx.asp'1.jpg 这样能解释,我在黑客X档案看见的

本站回复:

又是一种方法,╮(╯_╰)╭

laterain @ 2012-09-05 09:49:20

看了,懂了,觉悟了,谢谢了

本站回复:

读了,明了,醒悟了,评论了

佚名 @ 2013-08-16 07:51:15

phpweb上传文件名加了冒号,内容没了。怎么办核总,旁站dz程序,uc插入一句话有狗,phpweb如果用分号解析也有狗咬。

本站回复:

先过狗再说……

佚名 @ 2013-08-16 08:00:22

又看了看你的评论,明白了。但是,问题本身还没解决,越过不去狗,我就越闹心。

本站回复:

先过狗 +10086

旭 @ 2013-08-23 17:08:40

学者习也...

本站回复:

╮(╯_╰)╭。。