动易4.03上传漏洞。2005-1-10 就出来了,一直没有公布。 看黑客防线的攻关第3关用的是动易所有公布出来了。 影响版本: 动易4.03 <%@language=vbscript codepage=936 %> <% option explicit response.buffer=true Server.ScriptTimeOut=9999999 %> <% const upload_type=0 '上传方法:0=无惧无组件上传类,1=FSO上传 2=lyfupload,3=aspupload,4=chinaaspupload dim ChannelID dim AdminName dim EnableUploadFile,MaxFileSize,UpFileType,SavePath,SavePath2 dim objUpload,oFile,FormName,strFileName,FileExt dim ImgWidth,ImgHeight,AlignType dim EnableUpload dim arrUpFileType dim ranNum,i,strJS,msg,dtNow '这些定义上传变量 AdminName=trim(session("AdminName")) '判断seesion值是否正确 UserName=trim(request.Cookies("asp163")("UserName")) '判断cookie msg="" FoundErr=false EnableUpload=false '上面这些定义了,如果seesion和cookie不合法,就出错 dtNow=Now() %> <% if AdminName="" and UserName="" then '如果admin和username为空就出错,如果假的不为空的用户名会怎么样呢,但是上面的要注意 response.Write("请登录后再使用本功能!") else select case upload_type case 0 call upload_0() '使用化境无组件上传类 case else 'response.write "本系统未开放插件功能" 'response.end end select end if call CloseConn() %> <% sub upload_0() '使用化境无组件上传类 set objUpload=new upfile_class ''建立上传对象 objUpload.GetData(104857600) '取得上传数据,限制最大上传100M if objUpload.err > 0 then '如果出错 select case objUpload.err case 1 response.write "请先选择你要上传的文件!" case 2 response.write "你上传的文件总大小超出了最大限制(100M)" end select response.end end if '开始了对ChannelID的判断 ChannelID=trim(objUpload.form("ChannelID")) if ChannelID="" then '判断了,如果为空就出错 response.write "频道参数丢失!" exit sub '原来平时丢失的原因是因为ID不合要求 end if ChannelID=Clng(ChannelID) sqlChannel="select * from PE_Channel where ChannelID=" & ChannelID set rsChannel=server.createObject("adodb.recordset") rsChannel.open sqlChannel,conn,1,1 if rsChannel.bof and rsChannel.eof then response.write "找不到此频道" FoundErr=True '变量出错 end if if rsChannel("Disabled")=True then response.write "此频道已经被禁用!" FoundErr=True '上面进行对频道出错的判断和处理 else EnableUploadFile=rsChannel("EnableUploadFile") MaxFileSize=rsChannel("MaxFileSize") SavePath=strInstallDir & rsChannel("ChannelDir") & "/UploadSoftPic/" '保存的路径 UpFileType=rsChannel("UpFileType") '成功上传对大小,路径,类型的处理 end if rsChannel.close set rsChannel=nothing if EnableUploadFile=False then response.write "本频道未开放文件上传功能" FoundErr=True end if if FoundErr=True then exit sub for each FormName in objUpload.file '列出所有上传了的文件 EnableUpload=False set ofile=objUpload.file(FormName) '生成一个文件对象 if ofile.filesize<100 then msg="请先选择你要上传的文件!" FoundErr=True end if if ofile.filesize>(MaxFileSize*1024) then msg="文件大小超过了限制,最大只能上传" & CStr(MaxFileSize) & "K的文件!" FoundErr=true end if FileExt=lcase(ofile.FileExt) '判断扩展名 arrUpFileType=split(UpFileType,"|") for i=0 to ubound(arrUpFileType) if FileExt=trim(arrUpFileType(i)) then EnableUpload=true exit for end if next if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then EnableUpload=false '哈哈,关键在这里啦,上传漏洞在这里啦 end if if EnableUpload=false then msg="这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType FoundErr=true end if strJS="" response.write strJS set ofile=nothing next set objUpload=nothing end sub %> 上面的是动易的上传代码,从上面分析,我们可以看到,它明显存在着上传漏洞。重要的漏洞代 码在于这一句 FileExt=lcase(ofile.FileExt) '判断扩展名 arrUpFileType=split(UpFileType,"|") for i=0 to ubound(arrUpFileType) if FileExt=trim(arrUpFileType(i)) then EnableUpload=true exit for end if next if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then EnableUpload=false 一个变量的出错导致上传漏洞的产生。原理都是利用加个空格,因为asp (后面有空格)是不等于asp的,而对 于windows对于碰到有空格的他会自动去掉空格,所以当我们上传一个asp 文件就会变成一个asp 文件。 利用的方法,主要是在于对channelID的突破,其它的好办,只要可以构造一下不为空的id就可以了。 encType=multipart/form-data> |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 13:14 , Processed in 0.167671 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.