A-A+

空格、点与 Windows 命名机制产生的漏洞

2013年01月15日 计算机技术 暂无评论 阅读 92 views 次

在“9Cool九酷网络个人主页空间管理系统 v4.1 免费版”程序中,似乎只要禁止了各种类型的文件后缀,从 asp、php 到 cer、asa、cdx,以及 stm、shtml、shtm,程序就可以保证安全了。但真是这样吗?

在“9Cool九酷网络个人主页空间管理系统 v4.1 免费版”程序中,由于程序设计者的程序逻辑错误,导致了另一个上传漏洞的存在,更令人感到意外。

1,加一个点,9Cool九酷的另一个漏洞

同样地,依然登录“9Cool九酷网络个人主页空间管理系统 v4.1免费版”程序,进入个人网站管理页面,选择上传一个 asp 后门文件。这次,不修改上传的 ASP 后门文件名后缀,直接浏览选择 asp 后门文件,假设文件名为“asp.asp”。

在上传文件框中,修改一下已经指定的文件名,将“asp.asp”修改为“asp.asp.”,注意最后面多加了一个点,现在文件后缀名是“.asp.”而不是“.asp”。

单击[上传]按钮,可以看到提示文件上传成功。

2 ,windows 命名机制与程序漏洞

为什么在上面加上一个点后,asp 文件就可以顺利上传了呢?

我们先来做一个小实验。

在 Windows 系统中批开资源管理器,新建一个文件,文件名为“asp.asp.”,注意最后有一个点。回车确认修改文件名后,会出现一个奇怪的事情,最后的那个点被 windows系统“吃掉”了,文件名依旧变成了“asp.asp”。如果在文件后缀名后添加上两个点,改为“asp.asp..”,这两个点也会被“吃掉”。添加 3 个点、4个点,结果也是一样的。

在文件后缀名后添加一个空格,将“asp.asp”改为“asp.asp ”,请注意,最后有一个空格,修改文件名后,空格同样会被 windows 系统“吃掉”。

由此可知,修改文件名后缀,在后面添加空格和点后,因为 windows 文件命名原则,会自动去除后面的空格和小数点,保存的就是 asp 格式了。

再来看看“9Cool九酷网络个人主页空间管理系统 v4.1 免费版”程序的文件上传“upfile.asp”,其中的关键过滤代码如下:

[cc lang="asp"]
for i=0 to ubound(filtrate)
if instr("|"&types"","|"&filtrate(i)"") > 0 then response.
redirect "error.asp?error=filetype"
next
[/code]

该语句最重要的作用就是,获得用户输入的文件名后缀,与“filtrate”变量中定义的值相比较,如果相同的话则提示禁止文件上传类型。“filtrate”变量中定义的值为“asp/php/stm/shtml/sthm/asa/cer/cdx”等,因此,直接上传一个.asp后缀的文件是肯定会出错的。

当在.asp文件名后缀后添加了一个点时,文件名后缀就变成了“.asp”,由于“.asp.”不等于“filtrate”变量中定义的“asp/php/stm/shtml/sthm/asa/cer/cdx”任意一个值,因此“.asp.”的文件可以成功上传。这样就绕过了“9Cool九酷网络个人主页空间管理系统 v4.1 免费版”程序的文件上传过滤限制。

当文件上传到服务器上并被保存时,由于前面已知的 windows 文件命名原则,会自动去除后面的空格和小数点,于是上传的“.asp.”后缀文件又被去掉后面的点,还原保存为 asp 格式文件了。这就是“加点”上传漏洞的根本原理。

明白了上面的原理,就知道为何加空格与点可以绕过程序限制的实现了。

标签:

给我留言