精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖软件开发〗>>● ASP>>小心 "/" !!!!!!!

主题:小心 "/" !!!!!!!
发信人: michael_g(皮皮)
整理人: lonelyboy.cc(2002-12-20 11:23:31), 站内信件
大家也许会问为什么?看下去就知道了

大概做网站的人可能都写过上传文件的网页吧。也许你们不知道就在你的的上传组件中或上传页面中就存在一个很危险的漏洞!就是在你的网站上任意位置上传文件!

在微软的 windows 里 / 与 \ 都可做路径的分隔符也就是这一点才导至这个漏洞。
我看过一些 ASP 写的上传文件的程序大都是这样来分离文件名的

filename=mid(fullfilepath,InStrRev(fullfilepath, "\")+1) (fullfilepath 是完整的路径字符串)

可以看出这里都是用 \ 来做分隔符的。还有上传后给文件加上前缀的。如
filename= 日期 + filename

下面我就来举个例子

有一个上传网页它只允许上传jpg 或 gif 文件并且将文件名前加上传日期。上传位置为 images\upfile\img 
假如我们想在 imgaes\  上传一个文件 logo.jpg .这个文件是首页上的一个 LOGO 图片。

首先将一个做好的 logo.jpg 放在任意的一个目录中,并点击浏览找到它(如 E:\images\logo.jpg)
然后手动将文件路径改为 E:\images\temp\temp\temp\temp\../../../../logo.jpg
最后上传。
现在我们看看服务器端是怎样理这个文件名的。
首先它将文件名分离出  "../../../../logo.jpg" ,再加上前缀 "20021220../../../../logo.jpg"
然后与路径名相加得到 "images\upfile\img\20021220../../../../logo.jpg"
最后由 Server.MapPath 转换得到 "D:\wwwroot\images\logo.jpg" 至于为什么我想也不用说了。

我曾经在一些网站上做过试验给果.... 。
这个漏洞存在是相当普遍的。其中也包括一些很有名的上传组件。

具体的解决办法就是只要遇到 / 或 \ 就认为是路径的分隔符。
此文章仅供学习,请要不利用此漏洞做一些损人不利已的事!

Michael_g 2002.12.20

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]