动网论坛上传文件漏洞的原理以及攻击的代码实现
发布时间:2020-12-24 22:10:35 所属栏目:Asp教程 来源:网络整理
导读:创建时间:2004-05-17 文章属性:原创 文章提交:suei8423 (suei8423_at_163.com) 动网论坛上传文件漏洞的原理以及攻击的代码实现 ----Zwell ---http://www.54nb.com 最近一段时间比较忙,没什么时间为组织做贡献(实在是没实力,呵呵).刚好前一段时间听小猪说
创建时间:2004-05-17 文章属性:原创 文章提交:suei8423 (suei8423_at_163.com) 动网论坛上传文件漏洞的原理以及攻击的代码实现 ----Zwell ---http://www.54nb.com 最近一段时间比较忙,没什么时间为组织做贡献(实在是没实力,呵呵).刚好前一段时间听小猪说动网 论坛出了一个上传任意文件的漏洞,当时没怎么明白.但是我看到最近NB论坛上全部都在讨论有关这方面的 问题,就研究了一下,发现这个漏洞确实存在,而且非常严重,用小猪的话说是DVBBS7.0 SP2以下通杀.虽然有些 人已经知道了攻击方法,但是还是存在一些问题.下面我就动网的这个漏洞做一下讲解.(不知道会不会被人 骂,因为这个漏洞实在太大了). 我们先看一下动网论坛上传文件的相关代码: '===========无组件上传(upload_0)==================== sub upload_0() set upload=new UpFile_Class ''建立上传对象 upload.GetDate (int(Forum_Setting(56))*1024) '取得上传数据,不限大小 iCount=0 if upload.err > 0 then select case upload.err case 1 Response.Write "请先选择你要上传的文件 [ <a href=# onclick=history.go(-1)>重新上传</a> ]" case 2 Response.Write "图片大小超过了限制 "&Forum_Setting(56)&"K [ <a href=# onclick=history.go(-1)>重新上传</a> ]" end select exit sub else formPath=upload.form("filepath") ''在目录后加(/) if right(formPath,1)<>"/" then formPath=formPath&"/" for each formName in upload.file ''列出所有上传了的文件 set file=upload.file(formName) ''生成一个文件对象 if file.filesize<100 then response.write "请先选择你要上传的图片 [ <a href=# onclick=history.go(-1)>重新上传</a> ]" response.end end if fileExt=lcase(file.FileExt) if CheckFileExt(fileEXT)=false then response.write "文件格式不正确 [ <a href=# onclick=history.go(-1)>重新上传</a> ]" response.end end if randomize ranNum=int(90000*rnd)+10000 filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt if file.FileSize>0 then ''如果 FileSize > 0 说明有文件数据 file.SaveToFile Server.mappath(filename) ''保存文件 ' response.write file.FilePath&file.FileName&" ("&file.FileSize&") => "&formPath&File.FileName&" 成功!<br>" response.write "<script>parent.document.forms[0].myface.value='"&FileName&"'</script>" iCount=iCount+1 end if set file=nothing next set upload=nothing session("upface")="done" Htmend iCount&" 个文件上传结束!" end if end sub 在上面代码中可以看到这样一句: filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt 这里,filename是保存的文件名,它是依照上传时间来命名的,最后扩展名是表单中提交过来的文件的扩展名.但是 程序中对提交文件的类型做了限制,显然想直接上传ASP文件是不可行的.但是我们来看一下做为后辍的依据从哪里 来的呢?我们可以在reg_upload.asp中找到这样的代码: <form name="form" method="post" action="upfile.asp" enctype="multipart/form-data" > <input type="hidden" name="filepath" value="uploadFace"> <input type="hidden" name="act" value="upload"> <input type="file" name="file1"> <input type="hidden" name="fname"> <input type="submit" name="Submit" value="上传" onclick="fname.value=file1.value,parent.document.forms[0].Submit.disabled=true, parent.document.forms[0].Submit2.disabled=true;"> </form> 这样,我们知道了,程序是提取file1表单和fname表单中的值来做判断的.也就是说直接从页面递交我们的ASP文件 也是行不通了,但是,如果是我们自己构造数据包的话就不一样了.欲望之翼提出的方法就是自已构造数据包来达到欺骗的目的. 将提交的file1表单和fname表单项的值改成合法的文件名称.这样就可以绕过文件类型的检测了. 当然,主要的问题不在这里,如果我们只是要上传那些代码的话,我们完全可以直接改文件名就好了.我们的目的 是要让我们上传的文件名改成ASP,这样我们才可以利用.关键就在这一句了: formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt 这句话将一段字符串合并起来.我们能改的就是formPath这个参数.在计算机中检测字符串的关键就是看是否碰到' (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |