无组件上传文件-上传文件名漏洞

  • 上传漏洞-上传漏洞的原理
  • 上传漏洞-ASP 中 chr(0)
    文件上传漏洞原理及解决方法
  • 上传漏洞-EZA.Upload.QueryFileName(element) 有 chr(0)
    漏洞吗?
  • 上传漏洞-上传文件名漏洞

三、解决 chr(0) 漏洞的方法


在 IE6
中,上传文件框的文件地址是可以手写进去,也可以通过点击旁边的“浏览…”按钮选择文件的。

具体可参见上传文件时,如何正确获取文件名。

  • 上传漏洞-上传漏洞的原理
  • 上传漏洞-ASP 中 chr(0) 文件上传漏洞原理及解决方法
  • 上传漏洞-EZA.Upload.QueryFileName(element) 有 chr(0)
    漏洞吗?
  • 上传漏洞-上传文件名漏洞

如果客户端恶意上传一个含有 chr(0) 的文件名,那么
EZA.Upload
是不对其进行判断的,其 QueryFileName 方法取得的文件名中是含有 chr(0)
的。

这就是无组件上传程序的上传文件名漏洞,EZA.Upload
不存在该漏洞。


这里假设有一个 ASP 木马文件为 htmer.asp,我把它改名为 htmer.asp
.jpg,大家有没有看到中间有一个空格?我们在获取该文件名时,这个空格就被认为是
chr(0),当用 right(“htmer.asp .jpg”,4) 看的时候,确实是
.jpg,但是当实际读取 htmer.asp .jpg,并生成文件的时候,系统读到 chr(0)
就以为结束了,所以后面的 .jpg 就输出不来了,上传后的文件名被自动生成了
htmer.asp,这意味着什么?我想你应该知道了吧。(由于显示的原因,文中“.jpg”前面的空格实际上代表
chr(0)。千一网络编辑注)

这岂不是不安全?

  • 无组件上传文件-EZA.Upload(强烈推荐!!)
  • 无组件上传文件-上传文件名漏洞。无组件上传文件-错误的五行、六行代码实现上传
  • 无组件上传文件-化境无组件上传类
    v2.1
  • 无组件上传文件-梁无惧无组件上传类UpFile_Class
    V2.2
  • 无组件上传文件-风声 ASP 无组件上传类
    V2.11
  • 无组件上传文件-上传文件名漏洞
  • 无组件上传文件-判断文件类型?
  • 无组件上传文件-在 ASP.NET 和 PHP

如果用户手输文件地址是:D:abc../index.asp,那么该文件实际地址是:D:index.asp,如果服务器端解析文件名时,没有同时考虑到“/”和“”,解析出来的文件名就是“../index.asp”,如果直接按这个文件名保存,就保存在了不是我们所期望的目录。

一、首先解释下什么是 chr(0)?

  • 上传漏洞-上传漏洞的原理
  • 上传漏洞-ASP 中 chr(0)
    文件上传漏洞原理及解决方法
  • 上传漏洞-EZA.Upload.QueryFileName(element) 有 chr(0) 漏洞吗?
  • 上传漏洞-上传文件名漏洞

  • 上传漏洞-上传漏洞的原理
  • 上传漏洞-ASP 中 chr(0)
    文件上传漏洞原理及解决方法
  • 上传漏洞-EZA.Upload.QueryFileName(element) 有 chr(0)
    漏洞吗?
  • 上传漏洞-上传文件名漏洞

<%response.write “HTMer.com”&chr(0)&” 欢迎您 “%> 以上代码你在 IIS
下运行下看看,是不是只会输出“HTMer.com”呢?后面的“欢迎您”就没有了,因为读到
chr(0) 时就认为该语句结束了。

如果您一定要按 QueryFileName 取得的文件名来保存,需要自行判断是否存在
chr(0)。

  • 无组件上传文件-EZA.Upload(强烈推荐!!)
  • 无组件上传文件-错误的五行、六行代码实现上传
  • 无组件上传文件-化境无组件上传类
    v2.1
  • www.9778.com,无组件上传文件-梁无惧无组件上传类UpFile_Class
    V2.2
  • 无组件上传文件-风声 ASP 无组件上传类
    V2.11
  • 无组件上传文件-上传文件名漏洞
  • 无组件上传文件-判断文件类型?
  • 无组件上传文件-在 ASP.NET 和 PHP

(chr(0)
漏洞是在完全按客户端的文件名来保存时才存在,如果文件标识符是系统决定的,而文件扩展名由客户端文件名来提取,则不会出现安全问题。实际上,我们应用中不可能完全按照客户端文件名来保存,因为这本身就是一种漏洞,因为这样客户端就可以上传文件来覆盖已经存在的文件了。千一网络编辑注)



在 IE6
中,上传文件框的文件地址是可以手写进去,也可以通过点击旁边的“浏览…”按钮选择文件的。

在 ASP 中可以用 chr() 函数调用 ASCII 码,其中 chr(0)
表示调用的是一个结束字符,简单的说当一个字符串中包含 chr(0)
字符时,只能输出 chr(0) 前面的字符,chr(0)
后面的字符将不被输出。举例如说明:

  • 上传漏洞-上传漏洞的原理
  • 上传漏洞-ASP 中 chr(0)
    文件上传漏洞原理及解决方法
  • 上传漏洞-EZA.Upload.QueryFileName(element) 有 chr(0) 漏洞吗?
  • 上传漏洞-上传文件名漏洞

具体可参见上传文件时,如何正确获取文件名。

这就是无组件上传程序的上传文件名漏洞,EZA.Upload
不存在该漏洞。

二、chr(0) 漏洞上传原理:

如果您直接按 QueryFileName 取得的文件名来保存,肯定是不安全的。但是 EZA
认为您不应该直接按 QueryFileName 取得的文件名来保存,即使不存在 chr(0)
漏洞,也不应该这样做,因为这很可能覆盖掉之前已经存在的文件。

如果用户手输文件地址是:D:abc../index.asp,那么该文件实际地址是:D:index.asp,如果服务器端解析文件名时,没有同时考虑到“/”和“”,解析出来的文件名就是“../index.asp”,如果直接按这个文件名保存,就保存在了不是我们所期望的目录。

我们在用 ASP
开发文件上传功能的时候,为了防止用户上传木马程序,常常会限制一些文件的上传,常用的方法是判断一下上传文件的扩展名是否符合规定,可以用
right
字符串函数取出上传文件的文件名的后四位,这样很容易就能判断了,但是这里面有一个漏洞,非常危险,就是
chr(0) 漏洞,详情请接着往下看。

假设我在 ASP 程序中已经设置只能上传 jpg 文件,这里看我怎么利用 chr(0)
漏洞上传 ASP 木马的:


  • 上传漏洞-上传漏洞的原理
  • 上传漏洞-ASP 中 chr(0) 文件上传漏洞原理及解决方法
  • 上传漏洞-EZA.Upload.QueryFileName(element) 有 chr(0)
    漏洞吗?
  • 上传漏洞-上传文件名漏洞

解决办法是检查上传的文件名里面有没有 chr(0),在 ASP 中直接用 replace
函数替换掉 chr(0) 字符即可。