[Web安全-目录遍历漏洞]
字数 1392 2025-08-11 22:57:21

Web安全:目录遍历漏洞详解与防御

1. 目录遍历漏洞概述

目录遍历(也称为文件路径遍历)是一种Web安全漏洞,允许攻击者读取运行程序的服务器上的任意文件。在某些情况下,攻击者还可能能够写入服务器上的任意文件。

1.1 漏洞原理

Web应用程序通常会有文件读取功能,通过参数指定文件名(如http://www.xxxxx.com/getfile=image.jpg)。服务器处理时会自动添加完整路径(如d://site/image/1.jpg)。由于文件名可以任意更改且服务器支持特殊符号(如../)进行目录回溯,导致攻击者可以越权访问敏感数据。

2. 漏洞危害

2.1 风险等级

  • 高危:目录可以浏览,泄露包含密码、个人信息等敏感文件
  • 低危:目录可以浏览,未泄露敏感文件

2.2 具体危害

  1. 读取敏感文件:

    • 应用程序代码和数据
    • 后端系统凭据
    • 敏感的操作系统文件
  2. 写入服务器文件(可能导致):

    • 修改应用程序数据
    • 最终控制服务器

3. 漏洞挖掘方法

3.1 手动检测

  1. 目录路径测试:去掉文件名,只访问目录路径(如http://127.0.0.1/Images/改为http://127.0.0.1/Images/

  2. 搜索引擎搜索:查找网站标题包含"index of"关键字的网站

  3. 观察URL特征

    • ?page=a.php
    • ?home=b.html
    • ?file=content
    • 包含filename参数

3.2 自动化工具

使用Web漏洞扫描器扫描Web应用进行检测

4. 攻击方法与绕过技术

4.1 基本攻击方法

使用../进行目录回溯:

http://www.example.com/getfile=../../../../etc/passwd

4.2 绕过技术

  1. 加密参数绕过

    • 对Base64加密的参数进行解密后修改再加密提交
    • 示例:downfile.jsp?filename=ZmFuLnBkZg==
  2. 编码绕过

    • 使用URL编码(如%2e%2e%2f代替../
  3. 目录限定绕过

    • 使用特殊符号~(如downfile.jsp?filename=~/../boot
  4. 文件后缀过滤绕过

    • 添加空字节编码(如boot.ini%00.jpg
    • 在Unix系统中使用URL编码的换行符(如etc/passwd%0a.jpg
  5. 来路验证绕过

    • 修改HTTP Referer头
    • 在网站留言或交互处提交恶意URL

5. 漏洞修复建议

  1. 过滤特殊字符

    • 过滤../等目录遍历符号
  2. 白名单验证

    • 只允许纯字母数字字符作为文件名
  3. 目录限定

    • 对最终文件路径进行判断,确保请求文件完整目录的头N个字符与文档根目录完全相同
  4. 其他措施

    • 使用不可遍历的目录结构
    • 限制文件系统访问权限
    • 对用户输入进行严格验证

6. 敏感文件列表

6.1 Windows系统

c:\boot.ini                  // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml  // IIS配置文件
c:\windows\repair\sam        // 存储Windows系统初次安装的密码
c:\Program Files\mysql\my.ini  // MySQL配置
c:\Program Files\mysql\data\mysql\user.MYD  // MySQL root密码
c:\windows\php.ini           // php配置信息

6.2 Linux系统

/etc/passwd                  // 用户账户信息
/etc/shadow                  // 加密后的用户密码
/etc/apache2/httpd.conf      // Apache配置文件
/etc/php.ini                 // PHP配置文件
/etc/my.cnf                  // MySQL配置文件
/var/log/apache2/access.log  // Apache访问日志
/root/.ssh/authorized_keys   // SSH公钥认证文件

7. 案例演示

7.1 基本案例

  1. D:\phpStudy\WWW\pikachu\vul\dir目录下放置1.txt文件
  2. 通过目录遍历访问该文件:
    http://example.com/vul/dir/1.txt
    
  3. 访问上级目录文件(需要三级目录回溯):
    http://example.com/vul/dir/../../../1.txt
    

8. 总结

目录遍历漏洞是一种常见且危险的Web安全漏洞,攻击者利用它可以访问服务器上的敏感文件,甚至获取系统控制权。开发人员应严格验证用户输入,实施白名单策略,并限制文件系统访问权限来防范此类漏洞。安全测试人员可以通过多种方法检测和验证这类漏洞的存在。

Web安全:目录遍历漏洞详解与防御 1. 目录遍历漏洞概述 目录遍历 (也称为文件路径遍历)是一种Web安全漏洞,允许攻击者读取运行程序的服务器上的任意文件。在某些情况下,攻击者还可能能够写入服务器上的任意文件。 1.1 漏洞原理 Web应用程序通常会有文件读取功能,通过参数指定文件名(如 http://www.xxxxx.com/getfile=image.jpg )。服务器处理时会自动添加完整路径(如 d://site/image/1.jpg )。由于文件名可以任意更改且服务器支持特殊符号(如 ../ )进行目录回溯,导致攻击者可以越权访问敏感数据。 2. 漏洞危害 2.1 风险等级 高危 :目录可以浏览,泄露包含密码、个人信息等敏感文件 低危 :目录可以浏览,未泄露敏感文件 2.2 具体危害 读取敏感文件: 应用程序代码和数据 后端系统凭据 敏感的操作系统文件 写入服务器文件(可能导致): 修改应用程序数据 最终控制服务器 3. 漏洞挖掘方法 3.1 手动检测 目录路径测试 :去掉文件名,只访问目录路径(如 http://127.0.0.1/Images/ 改为 http://127.0.0.1/Images/ ) 搜索引擎搜索 :查找网站标题包含"index of"关键字的网站 观察URL特征 : ?page=a.php ?home=b.html ?file=content 包含 filename 参数 3.2 自动化工具 使用Web漏洞扫描器扫描Web应用进行检测 4. 攻击方法与绕过技术 4.1 基本攻击方法 使用 ../ 进行目录回溯: 4.2 绕过技术 加密参数绕过 : 对Base64加密的参数进行解密后修改再加密提交 示例: downfile.jsp?filename=ZmFuLnBkZg== 编码绕过 : 使用URL编码(如 %2e%2e%2f 代替 ../ ) 目录限定绕过 : 使用特殊符号 ~ (如 downfile.jsp?filename=~/../boot ) 文件后缀过滤绕过 : 添加空字节编码(如 boot.ini%00.jpg ) 在Unix系统中使用URL编码的换行符(如 etc/passwd%0a.jpg ) 来路验证绕过 : 修改HTTP Referer头 在网站留言或交互处提交恶意URL 5. 漏洞修复建议 过滤特殊字符 : 过滤 ../ 等目录遍历符号 白名单验证 : 只允许纯字母数字字符作为文件名 目录限定 : 对最终文件路径进行判断,确保请求文件完整目录的头N个字符与文档根目录完全相同 其他措施 : 使用不可遍历的目录结构 限制文件系统访问权限 对用户输入进行严格验证 6. 敏感文件列表 6.1 Windows系统 6.2 Linux系统 7. 案例演示 7.1 基本案例 在 D:\phpStudy\WWW\pikachu\vul\dir 目录下放置 1.txt 文件 通过目录遍历访问该文件: 访问上级目录文件(需要三级目录回溯): 8. 总结 目录遍历漏洞是一种常见且危险的Web安全漏洞,攻击者利用它可以访问服务器上的敏感文件,甚至获取系统控制权。开发人员应严格验证用户输入,实施白名单策略,并限制文件系统访问权限来防范此类漏洞。安全测试人员可以通过多种方法检测和验证这类漏洞的存在。