设为主页 | 加入收藏 | 繁體中文

最新公布的动易4.03上传漏洞

  影响版本: 动易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的,而对.......
  (待续)
  补充 的部分 :一个变量的堕落招致上传毛病的产生。原理都是利用加个空格,由于asp (后面有空格)是不等于asp的,而对
  于windows对付碰到有空格的他会自动去失空格,所以当我们上传一个asp 文件就会变成一个asp
  文件。
  利用的方法,主要是在于对channelID的突破,其它的好办,只要可以结构一下不为空的id就可以了。
  encType=multipart/form-data>
 
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: