任意目录遍历漏洞顾名思义攻击者可以通过漏洞遍历出服务器操作系统中的任意目录文件名,从而导致服务器敏感信息泄漏,某些场景下(如遍历出网站日志、备份文件、管理后台等)甚至可能会导致服务器被非法入侵。
示例 - 存在任意目录遍历代码:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="java.io.File" %>
  3. <pre>
  4. <%
  5. String[] files = new File(request.getParameter("dir")).list();
  6. for (String file : files) {
  7. out.println(file);
  8. }
  9. %>
  10. </pre>

这个漏洞可能由Web应用本身的开发不规范导致,也有可能是因为MVC框架项目依赖的第三方库Web服务器自身导致的。如果是由于自身开发不规范导致的那么需要程序严格控制用户传入目录参数是否合法!

6.1 相对目录遍历测试

攻击者传入dir参数即可遍历出对应目录的所有文件,http://localhost:8000/modules/filesystem/file-list.jsp?dir=../,如下图:7. 文件目录遍历 - 图1
由于攻击者传入的dir参数值为相对路径,可能是多级目录名称,也可能只是一个非常简单的../上级目录,大部分的WAF并不能精准识别这类攻击。

6.2 绝对目录遍历测试当攻击者可以传入绝对路径进行攻击时,路径中将不会存在../等穿越目录特征,很多WAF将无法攻击阻拦,请求:http://localhost:8000/modules/filesystem/file-list.jsp?dir=/etc,如下图:

7. 文件目录遍历 - 图2