作者:Linzi
出处:www.71345.com[混客部落]
QQ:290329536
这个漏洞我发现很久了,很早都想公布出来了,发到杂志上去,但没有收到回复,所以现在公布出来.
还是先来读一下这个代码吧,可能因为是这个漏洞出来很久了,所以很少有人会再去看一下这个漏
洞的代码,我也是在一样无意中重读这个代码时发现这个漏洞的.
const UpFileType="rar|zip|exe|mpg|rm|wav|mid" 定义了可以上传的文件类型 ... dim EnableUpload 定义了是否允许上传的关键变量 ... FoundErr=false 默认FoundErr变量为假,即没有发现错误(哈哈,关键变量哦,看下面) EnableUpload=false 默认EnableUpload变量为假,即不能上传(哈哈,关键变量哦) ... for each formName in upload.file列出所有上传了的文件(!关键,注意这个FOR循环!) set ofile=upload.file(formName) 生成一个文件对象 ... arrUpFileType=split(UpFileType,"|") 取得定义的可以上传的后缀名 for i=0 to ubound(arrUpFileType) if fileEXT=trim(arrUpFileType(i)) then EnableUpload=true hoho,EnableUpload变量改变了! exit for end if next if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then 呵呵,只要是ASP,ASA,ASPX的后缀就废掉了,难怪海洋顶端上不去阿! EnableUpload=false end if if EnableUpload=false then msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType FoundErr=true hoho,FoundErr变量改变了! end if ... if FoundErr<>true then 又是一个重要地方,看来FoundErr变量是能否上传的关键,那如何决定FoundErr变量呢?(草草虫ps:偶可以瞪大了眼睛看啊) randomize ranNum=int(900*rnd)+100 生成一个随机数 filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt 没有改变上传文件的后缀,爽阿 ... ofile.SaveToFile Server.mappath(FileName) 保存文件 response.write "软件上传成功!软件大小为:" & cstr(round(oFileSize/1024)) & "K" strJS=strJS & "parent.document.myform.DownloadUrl1.value=" & fileName & ";" & vbcrlf 晕拉~还返回上传后改的名字,这回好了,不用猜了。 strJS=strJS & "parent.document.myform.SoftSize.value=" & cstr(round(oFileSize/1024)) & ";" & vbcrlf 注:...表示省略了部分代码
具体的漏洞原理分析,我不想多说了,因为有太多的人分析了,我这里只分析"if fileEXT="asp" or
fileEXT="asa" or fileEXT="aspx" 这一句,这一句他定义了上传的类型,很多人还在后面加个了
fileEXT="cer"等等等等,用来补上上传漏洞,但经过分析就会发现,这种补法是无济于事的.因为如果
我们上传的东西扩展名为asp.(后面有个.)根据windows中,windows会有自动吃掉吃"."的"好"习惯,
那么我们上传的asp.满足了代码中的要求,且上传后点会自动消失,这样的上传,即使你在后面加
了多少个cer等都无济于事.不过在对动力有的版本时,你上传有点的asp,他会自动生成一个无扩展
名的文件,所以如:我们上传的是newmm.asp.就会变成newmm这个没有扩展名的文件,那怎么办呢,
开始的时候我也郁闷,后来在课堂上想这个问题时,想着想着,突然有了灵感.如果我们在后面加上个
空格呢,asp (注意有空格)不就满足代码上的条件,而且上传之候windows又有吃掉空格的"好习惯",
所以我们构造的上传文件自然就会上传成功.另外如果加个#也一样,同样可以成功.用这个方法可
以突破大多数3.51的补丁限制,不过我说的这个补丁只是fileEXT="asp" or fileEXT="asa" or
fileEXT="aspx" 这种后面加上防上传扩展名的补丁,如果你把upfile.asp改成和3.6的一样的,就不会
有这个漏洞.
不要认为只有动力的文章有这个漏洞,要知道,网络上这种型的web程序非常多,例如武易传奇,还有
凡尘文学,各种OA办公的等等,总之有非常非常多,我试了好几种类型上传文件的全部成功.这样下
菜鸟们可以说又有一大堆的肉鸡了,对于文中所说到的利用,我做成了动画,另外再一下,如果是和动
网整合的动力,下载的数据库在dv_log可以有时可以查看没有加密过的密码.
| |