网站公告列表

  没有公告

加入收藏
设为首页
在线投稿

您现在的位置: IT知识网 >> IT知识 >> 网络安全 >> 黑客攻击 >> 文章正文

 

  动易上传漏洞分析[利用方法大家一起想]           

动易上传漏洞分析[利用方法大家一起想]
作者:佚名 文章来源:不详 点击数: 更新时间:2006-12-5 20:53:44
作者: Linzi 来源: 混客联盟 http://71345.com

影响版本: 动易4.03

<%@language=vbscript codepage=936 %>
<%
option explicit
response.buffer=true
Server.ScriptTimeOut=9999999
%>
<!--#include file="../conn.asp"-->
<!--#include file="../inc/function.asp"-->
<!--#include file="../inc/upfile_class.asp"-->
<%
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()
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
BODY{
BACKGROUND-COLOR: #E1F4EE;
font-size:9pt
}
-->
</style>
</head>
<body leftmargin="2" topmargin="0" marginwidth="0" marginheight="0">
<%
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()
%>
</body>
</html>
<%
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="<SCRIPT language=javascript>" & vbcrlf
if FoundErr<>true then
if ObjInstalled_FSO=True then
SavePath2=year(dtNow) & right("0" & month(dtNow),2) & "/"
SavePath=SavePath & SavePath2
if not fso.FolderExists(server.mappath(SavePath)) then
fso.createFolder server.mappath(SavePath)
end if
end if


randomize
ranNum=int(900*rnd)+100
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


ofile.SaveToFile Server.mappath(SavePath & strFileName) '保存文件


msg="图片上传成功!"
strJS=strJS & "parent.document.myform.SoftPicUrl.value='UploadSoftPic/" & SavePath2 & strFileName & "';" & vbcrlf
end if
strJS=strJS & "alert('" & msg & "');" & vbcrlf
strJS=strJS & "history.go(-1);" & vbcrlf
strJS=strJS & "</script>"
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><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>
<INPUT id=PhotoUrlID type=hidden value=0 name=PhotoUrlID>
 


说明: 具体利用方法暂时还没有想出来.大家一起努力! 想出来了大家分享一下.感谢Linzi提供的思路!


文章录入:wuyongjian    责任编辑:wuyongjian 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最 新 热 门
    相 关 文 章
    无组件上传图片到数据库
    上传(upload)文件的code
    如何在上传的图片上写字
    如何在上传的图片上加上
    计算上传的图片的宽和高
    将复合控件子控件事件上
    文件上传及下载
    给 SOHO 一族的安全建议
    听说上传主页需要 FTP ,
    巧用DOS命令上传文件
     
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    Copyright© ITZS.NET All Rights Reserved
    QQ:272895858   ICP备案编号:吉ICP备07000044号
    IT知识网 站长:博浪