漏洞描述

目录穿越(遍历)漏洞在Web应用程序中也是一种较为常见的漏洞,其往往出现在需要用户提供路径或文件名时,如文件下载。在访问者提供需要下载的文件后,Web应用程序没有去检验文件名中是否存在“../”等特殊字符,没有对访问的文件进行限制,导致目录穿越,读取到本不应读取到的内容。
比如Web应用程序的正常功能允许用户通过filename下载/www/file/file.txt文件,但是如果没有控制好filename参数传入的值,就有可能通过../../../etc/passwd这种方式进行目录穿越,下载到非预期的/etc/passwd文件。

漏洞危害

获取敏感信息、下载任意文件等

常见审计思路

目录穿越漏洞产生的本质是路径可控,一旦涉及文件的读取问题便会涉及java.io.File类,因此在审计这类漏洞时可以优先查找java.io.File引用,并根据经验来判断Paths、path、System.getProperty(”user.dir”)等各类可能会用来构造路径的关键字。

漏洞修复

对于目录穿越漏洞的防御相对简单,一般有以下方法:

  1. 对文件名进行过滤,防止出现“./”等特殊符号
  2. 采用ID索引的方法来下载文件,而不是直接通过文件名
  3. 对目录进行限制;合理配置权限等