首页 Asp系统上传原理分析

Asp系统上传原理分析

举报
开通vip

Asp系统上传原理分析 Asp系统上传原理分析 上传漏洞,这是一种比注入更有杀伤力的漏洞。它可以把ASP、JSP、CGI、PHP等格式的木马上传至网站目录内,所得到的权限最低也是 WEBSHELL,如果碰到的是安全意识不强的管理员,还可以通过传送权限提升的工具给自已搞个管理员玩玩,对于上传漏洞的查找,仍是从源文件入手,目标有两个,一个是FilePath(文件路径),另一个则是FileName(文件名称)。 一、FilePath 说到FilePath,有些朋友可能感到陌生,但要提到动网6...

Asp系统上传原理分析
Asp系统上传原理分析 上传漏洞,这是一种比注入更有杀伤力的漏洞。它可以把ASP、JSP、CGI、PHP等格式的木马上传至网站目录内,所得到的权限最低也是 WEBSHELL,如果碰到的是安全意识不强的管理员,还可以通过传送权限提升的工具给自已搞个管理员玩玩,对于上传漏洞的查找,仍是从源文件入手,目标有两个,一个是FilePath(文件路径),另一个则是FileName(文件名称)。 一、FilePath 说到FilePath,有些朋友可能感到陌生,但要提到动网6.0的上传漏洞,大家一定不陌生吧!其上传漏洞就是由于FILEPath过滤不严引起的。虽然动网已不存在此漏洞了,但采用此上传源码的程序还是大有人在的,比如我手头这款“万豪下载程序”,其ADS(广告)版块中的Upfile.asp(上传),就有Filepath过滤不严的漏洞,来分析一下其部分源码: <% dim upload,file,formName,formPath,iCount,filename,fileExt '//定义上传变量 set upload=new upload_5xSoft '//建立上传对象JM的测试代码 formPath=upload.form("filepath") '//第一步、获取文件路径,此处是关键。 if right(formPath,1)<>"/" then formPath=formPath&"/" for each formName in upload.file '//用For读取上传文件 set file=upload.file(formName) '//生成一个文件对象jmdcw …………………… '//省略部分代码 fileExt=lcase(right(file.filename,4)) '//从文件名中截取后4位,并转换为小写字符。 if fileEXT<>".gif" and fileEXT<>".jpg" and fileEXT<>".zip" and fileEXT<>".rar" and fileEXT<>".swf"then '//文件扩展名判断 response.write "文件格式不正确 [ 重新上传 ]" 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 '//第二步、filename由提交的文件路径+年月日的随机文件名+转换后的扩展名组成 if file.FileSize>0 then file.SaveAs Server.mappath(FileName) '//保存文件jmdcw end if set file=nothing next %> 在这段源码中,要关键的就这两句: 1、formPath=upload.form("filepath") 2、filename=formPath&year(now)& month(now)&day(now)&hour (now)&minute(now)&second(now)&ranNum&fileExt 广告插播。变量与常量:所谓变量就是指在程序的运行过程中随时可以发生变化的值;而常量则恰恰相反,指的是在程序的运行过程中始终保持不变的值。 下面来看一下漏洞是如何形成的。在第一句代码中,从变量filepath中获取文件的保存路径,然后在第二句中,用路径变量formPath加随机生成的数字及经过判断的扩展名合成为一个新的变量,这个变量Filename就是上传文件保存的路径及名称。这样说有些笼统,下面举例说明。比如选择 “111.jpg”文件上传,在上传过程中,随文件一起上传的还有一个FilePath变量,假设其值为“image”,当这些值传到 upfile.asp中,filename就变成了:“image/200512190321944973.jpg”,上传成功后,该111.jpg就被保存到image文件夹内,文件名字也被改成了:“200512190321944973.jpg”。这段流程,看起来无懈可击,但还是被牛人研究出了突破方法,什么方法呢?很简单,突破点就在变量身上,如果将其FilePath值改为“image/aa.asp□”,其后的“□” 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示二进制的00(空的意思),这样,该变量提交入upfile.asp后,Filename值就变成了 “image/aa.asp□/200512190321944974.jpg”,服务器在读取这段变量时,因为“□”是二进制的00,认为该变量语句已经结束了,于是“□”后面的字符也就被忽略掉了,这样一来,Filename就成了:“image/aa.asp”,程序再用file.SaveAs进行保存的话,这个文件就保存成了aa.asp文件,瞧!漏洞出现了。 对于这个漏洞的利用,可以使用桂林老兵的上传工具,也可以采取用WinSock抓包,然后用记事本保存提交数据并增加、修改相关内容,再用WinHex修改空格为二进制,最后用NC提交的方法。以上两种的使用方法,请参阅相关的文章(刺猬2005作品)。 二、FileName 介绍过FilePath(上传路径)过滤不严的漏洞,再来看一看FileName(上传文件名)过滤不严造成的漏洞,上传文件名过滤不严的形式是多种多样的,偶这里介绍两种: 1、动易文章 2005.10期中的《再现昔日漏洞——沁竹音乐程序的疏忽》,所涉及的上传漏洞就是动易的上传漏洞,下面以此为例,来看一下其上传文件Upfile_Article.asp中的部分源码: <% Const UpFileType="rar|gif|jpg|bmp|swf|mid|mp3" '//允许的上传文件类型jmdcw Const SaveUpFilesPath="../../UploadFiles" '//存放上传文件的目录,注:以上两个常量均在config.asp文件内定义'刺猬测试代码 dim upload,oFile,formName,SavePath,filename,fileExt //变量定义 …………………… FoundErr=false '//此为是否允许上传的变量,初始化为假,表示可以上传。 EnableUpload=false '//此为上传文件扩展名是否合法的变量,初始化为假,表示的是不合法。 SavePath = SaveUpFilesPath '//存放上传文件的目录 …………………… sub upload_0() '//使用化境无组件上传 set upload=new upfile_class '//建立上传对象 …………………… for each formName in upload.file '//用For循环读取上传的文件。 jmdcw set ofile=upload.file(formName) '//生成一个文件对象 …………………… fileExt=lcase(ofile.FileExt) '//将扩展名转换为小写字符 arrUpFileType=split(UpFileType,"|") '//读取后台定义的允许的上传扩展名 for i=0 to ubound(arrUpFileType) '//第一关,用FOR循环读取arrUpFileType数组。 if fileEXT=trim(arrUpFileType(i)) then '//如果fileEXT是允许上传的扩展名 EnableUpload=true '//EnableUpload为真,表示该文件合法。 exit for end if next if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then '// 第二关,验证fileEXT是否为asp、asa、aspx扩展名。 EnableUpload=false '//如果属于这三项之一,那么EnableUpload就定义为假,上传文件扩展名不合法。jm end if if EnableUpload=false then '// 第三关,验证关。如果传递到此的EnableUpload变量为假,则说明上传文件扩展名不合法。 msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType FoundErr=true '//注意:因为文件名不合法,就更改了FoundErr值,由初始的false改为true。 end if strJS="