今日精选 ·绝对解密 XP系统中隐藏的10个秘密 ·Windows系统文件详解【大全】 ·配置Windows Server 2008高级防火墙 ·带你现场体验专业服务器机房 ·屏蔽五项功能 让Windows XP极速狂飙 ·木马免杀技术大盘点 ·如何让无线路由信号更强更广 ·各大路由器默认密码(完美汇总经典版) ·如何构建安全的入侵检测系统 ·电脑故障维修判断指导大全(联想内部文件) >>>>
编程开发  Java | .Net | C/C++ | Delphi | VC/VB | XML | ASP | PHP
数据库  Oracle | Mysql | DB2 | Sql server
应用方案 无线网络方案 | 有线网络方案 

网管天地  网吧管理 | 路由器 | 交换机 | 服务器
网络安全  黑客技术 | 病毒漏洞 | 网站安全 | 服务器安全 | 入侵防御 | 防火墙
操作系统 Linux/Unix | Windows 
您现在的位置: 企业网络安全 >> 文章·资讯 >> 互联网安全 >> 网站安全 >> 文章正文
浅析上传漏洞的形成
作者:寂寞的刺… 文章来源:黑秀才 点击数: 更新时间:2007-5-21 8:28:19
在简单介绍过注入漏洞的查与补后,下面偶再介绍一种漏洞--上传漏洞,这是一种比注入更有杀伤力的漏洞。通过注入所得到的往往是数据库中的一些敏感信息,如管理员名称、密码等等(注:此处注入指的是MDB数据库),但上传漏洞就不同了,它可以把ASP、JSP、CGI、PHP等格式的木马上传至网站目录内,所得到的权限最低也是WEBSHELL,如果碰到的是安全意识不强的管理员,(刺猬2005作品)呵呵!那就可以客串一把管理员了!心动了吧!OK!那就LET'S GO!

对于上传漏洞的查找,仍是从源文件入手,目标有两个,一个是FilePath(文件路径),另一个则是FileName(文件名称)。

一、FilePath
说到FilePath,有些朋友可能感到陌生,但要提到动网6.0的上传漏洞,大家一定不陌生吧!其上传漏洞就是由于FILEPath过滤不严引起的。虽然动网已不存在此漏洞了,但采用此上传源码的程序还是大有人在的,比如我手头这款“万豪下载程序”,其ADS(广告)版块中的Upfile.asp(上传),就有Filepath过滤不严的漏洞,(刺猬2005作品)来分析一下其部分源码:
引用
<%
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 "<font size=2>文件格式不正确 [ <a href=# onclick=history.go(-1)>重新上传</a> ]</font>"
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

广告插播。变量与常量:所谓变量就是指在程序的运行过程中随时可以发生变化的值;而常量则恰恰相反,指的是在程序的运行过程中始终保持不变的值(刺猬2005作品)。

下面来看一下漏洞是如何形成的。在第一句代码中,从变量filepath中获取文件的保存路径,然后在第二句中,用路径变量formPath加随机生成的数字及经过判断的扩展名合成为一个新的变量,这个变量Filename就是上传文件保存的路径及名称。这样说有些笼统,下面举例说明。比如选择 “111.jpg”文件上传,在上传过程中,随文件一起上传的还有一个FilePath变量,假设其值为“image”,当这些值传到 upfile.asp中,filename就变成了:“image/200512190321944973.jpg”,上传成功后,该111.jpg就被保存到image文件夹内,文件名字也被改成了:“200512190321944973.jpg”。这段流程,看起来无懈可击,但还是被牛人研究出了突破方法,什么方法呢?很简单,突破点就在变量身上,如果将其FilePath值改为“image/aa.asp□”,其后的“□”表示二进制的00(空的意思),这样,该变量提交入upfile.asp后,Filename值就变成了 “image/aa.asp□/200512190321944974.jpg”,服务器在读取这段变量时,因为“□”是二进制的00,认为该变量语句已经结束了,于是“□”后面的字符也就被忽略掉了,这样一来,Filename就成了:“image/aa.asp”,程序再用file.SaveAs进行保存的话,这个文件就保存成了aa.asp文件,瞧!漏洞出现了。

对于这个漏洞的利用,可以使用桂林老兵的上传工具,也可以采取用WinSock抓包,然后用记事本保存提交数据并增加、修改相关内容,再用WinHex修改空格为二进制,最后用NC提交的方法。以上两种的使用方法,请参阅相关的文章(刺猬2005作品)。

[1] [2] [3] 下一页


免责声明:作品版权归所属媒体与作者所有!!本站刊载此文不代表同意其说法或描述,仅为提供更多信息。如果您认为我们侵犯了您的版权,请告知!本站立即删除。有异议请联系我们。
文章录入:admin    责任编辑:admin 
  • 上一篇文章:
  • 下一篇文章:
  • 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 |