月光博客

青青子衿, 悠悠我心, 但为君故, 沉吟至今

« 百度要往哪里走—潜规则还是透明化?遭遇猎头公司 »

五行代码实现ASP无组件上传

  目前有很多无组件上传类,大多写的相当复杂,有的居然还只能传文本,最关键的是没有10行代码以下的。

  其实无组件上传最核心的代码就是ADODB.Stream,实际只用五行代码就可以实现了无组件上传。

  Set objStream = Server.CreateObject("ADODB.Stream")
  objStream.Type = 1
  objStream.Open
  objStream.LoadFromFile Request("upfilename")
  objStream.SaveToFile Server.MapPath("test.gif"),2

  使用方法:

  把上面的代码写成upload.asp,在浏览器里面输入http://localhost/upload.asp?upfilename=c:\test\test.gif

  localhost为你的主机地址,执行完后你会看到你的目录下面多了一个test.gif,他就是你要文件拉。

  根据原理我们可以扩展以下代码,算一个最小的ASP木马吧,有一点值得注意,上传的本地文件路径不能包含中文字符,否则会出错。

  upload.asp文件

<%
  Function GetFileName(ByVal strFile)
  If strFile <> "" Then
   GetFileName = mid(strFile,InStrRev(strFile, "\")+1)
  Else
   GetFileName = ""
  End If
  End  function
 
  strFileName = Request.Form("upfilename")
  If strFileName<>"" Then
  Set objStream = Server.CreateObject("ADODB.Stream")
  objStream.Type = 1
  objStream.Open
  objStream.LoadFromFile strFileName
  objStream.SaveToFile Server.MapPath(GetFileName(strFileName)),2
  objStream.Close
  response.write "OK!"
  Else
%>
  <form action='<%= Request.ServerVariables("URL") %>' method='post'>
  <input type='file' name='upfilename'> <input type='submit'></form>
<%
  End if
%>



原创文章如转载,请注明:转载自月光博客 [ http://www.williamlong.info/ ]

本文链接地址:http://www.williamlong.info/archives/380.html
  • 文章排行:
  • 1.ashi
  • 这是我见过最愚蠢的源码

    客户端和服务器不是一回事,用ADO读客户端的文件,你以为微软会让这么大的一个漏洞存在么?!
  • 2006-2-12 22:49:20
  • 3.efei
  • 同感,这的确是最愚蠢的代码!最基本的服务器和客户端都没有分清楚。

    楼上说运行过,只不过你运行时,服务器就是你当时用着的那台电脑,就是说,客户端和服务器端在同一台电脑上,而这几句代码,只不过把东西从一个目录复制到另外一个目录
  • 2006-2-22 20:20:59
  • 5.machine
  • http://spaces.msn.com/30km/
  • 你使用本机作服务器并且本机浏览吧?这样并没有实现上传,读的是服务器上的文件,只不过刚好你服务器和客户端都是同一台机,所以能读出来,我晕~

    这个帖子快点删掉吧,怪搞笑的……
  • 2006-3-19 14:11:40
  • 7.想起时正是忘记
  • http://aaa.aaa.aaa
  • <%
    Class FileUploader
    Public File
    Private Sub Class_Initialize()
    Set File = Server.CreateObject("Scripting.FileSystemObject")
    End Sub
    Private Sub Class_Terminate()
    set File=nothing
    End Sub
    Public Property Get Form(sIndex)
    Form = ""
    End Property
  • 2006-7-5 17:12:23
  • 8.想起时正是忘记
  • http://aaa.aaa.aaa
  • Public Default Sub Upload()
    Dim biData, sInputName
    Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
    Dim nPosFile, nPosBound
    biData = Request.BinaryRead(Request.TotalBytes)
    nPosBegin = 1
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
    If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
    vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
    nDataBoundPos = InstrB(1, biData, vDataBounds)
    Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
    nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
    nPos = InstrB(nPos, biData, CByteString("name="))
    nPosBegin = nPos + 6
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
    sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
    nPosBound = InstrB(nPosEnd, biData, vDataBounds)
  • 2006-7-5 17:13:33
  • 9.想起时正是忘记
  • http://aaa.aaa.aaa
  • If nPosFile <> 0 And nPosFile < nPosBound Then
    Dim oUploadFile, sFileName
    Set oUploadFile = New UploadedFile
    nPosBegin = nPosFile + 10
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
    sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
    nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
    nPosBegin = nPos + 14
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
    oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
    nPosBegin = nPosEnd+4
    nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
    oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
    set File=oUploadFile
  • 2006-7-5 17:14:38
  • 11.想起时正是忘记
  • http://aaa.aaa.aaa
  • Private Function CByteString(sString)
    Dim nIndex
    For nIndex = 1 to Len(sString)
    CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
    Next
    End Function
    Private Function CWideString(bsString)
    Dim nIndex
    CWideString =""
    For nIndex = 1 to LenB(bsString)
    CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1)))
    Next
    End Function
    End Class
  • 2006-7-5 17:16:11
  • 12.想起时正是忘记
  • http://aaa.aaa.aaa
  • Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData
    Public Property Get FileSize()
    FileSize = LenB(FileData)
    End Property
    Public Sub SaveToDisk(sPath)
    Dim oFS, oFile
    Dim nIndex
    If sPath = "" Or FileName = "" Then Exit Sub
    If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
    Set oFS = Server.CreateObject("Scripting.FileSystemObject")
    If Not oFS.FolderExists(sPath) Then Exit Sub
    Set oFile = oFS.CreateTextFile(sPath & FileName, True)
    For nIndex = 1 to LenB(FileData)
    oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
    Next
    oFile.Close
    End Sub
    End Class
    %>
  • 2006-7-5 17:16:47

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过抓虾订阅本站
  • 通过电子邮件订阅本站

站内搜索


热文排行

最新评论及回复

最近发表

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.

This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.