[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 具体危害
-
读取敏感文件:
- 应用程序代码和数据
- 后端系统凭据
- 敏感的操作系统文件
-
写入服务器文件(可能导致):
- 修改应用程序数据
- 最终控制服务器
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 基本攻击方法
使用../进行目录回溯:
http://www.example.com/getfile=../../../../etc/passwd
4.2 绕过技术
-
加密参数绕过:
- 对Base64加密的参数进行解密后修改再加密提交
- 示例:
downfile.jsp?filename=ZmFuLnBkZg==
-
编码绕过:
- 使用URL编码(如
%2e%2e%2f代替../)
- 使用URL编码(如
-
目录限定绕过:
- 使用特殊符号
~(如downfile.jsp?filename=~/../boot)
- 使用特殊符号
-
文件后缀过滤绕过:
- 添加空字节编码(如
boot.ini%00.jpg) - 在Unix系统中使用URL编码的换行符(如
etc/passwd%0a.jpg)
- 添加空字节编码(如
-
来路验证绕过:
- 修改HTTP Referer头
- 在网站留言或交互处提交恶意URL
5. 漏洞修复建议
-
过滤特殊字符:
- 过滤
../等目录遍历符号
- 过滤
-
白名单验证:
- 只允许纯字母数字字符作为文件名
-
目录限定:
- 对最终文件路径进行判断,确保请求文件完整目录的头N个字符与文档根目录完全相同
-
其他措施:
- 使用不可遍历的目录结构
- 限制文件系统访问权限
- 对用户输入进行严格验证
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 基本案例
- 在
D:\phpStudy\WWW\pikachu\vul\dir目录下放置1.txt文件 - 通过目录遍历访问该文件:
http://example.com/vul/dir/1.txt - 访问上级目录文件(需要三级目录回溯):
http://example.com/vul/dir/../../../1.txt
8. 总结
目录遍历漏洞是一种常见且危险的Web安全漏洞,攻击者利用它可以访问服务器上的敏感文件,甚至获取系统控制权。开发人员应严格验证用户输入,实施白名单策略,并限制文件系统访问权限来防范此类漏洞。安全测试人员可以通过多种方法检测和验证这类漏洞的存在。