路径遍历攻击——隐藏文件与配置文件泄露
路径遍历攻击——隐藏文件与配置文件泄露摘要:路径遍历(Path Traversal,又称目录遍历)是一种利用文件路径输入过滤不严,使攻击者能够访问Web根目录之外的文件和目录的黑客网站攻击手段。通过../等序列,攻击者可读取系统敏感文件(如/etc/passwd)、应用配置文件(config.php)、日志文件甚至源代码,为后续渗透提供信息。本文将深入剖析路径遍历的原理、编码绕过技巧,并给出规范文件路径检查、沙箱限制等防御方案。关键词:黑客网站攻击;路径遍历;目录遍历;渗透测试;文件泄露;Web安全防御一、引言许多Web应用提供文件下载或预览功能,参数如?file=report.pdf。若后端直接拼接文件路径而未做安全校验,攻击者可提交?file=../../../etc/passwd读取服务器明文密码文件。尽管这类漏洞长久存在,但每年仍有大量网站因路径遍历而泄露敏感信息,甚至被用来读取源码中的数据库密码。因此,理解该攻击和防御对于保护网站数据资产至关重要。二、路径遍历原理2.1 漏洞成因应用程序使用用户可控的输入构建文件路径,但没有规范化和过滤路径遍历序列(../或..\)。典型的危险代码:php$file = $_GET['file';readfile("/var/www/html/uploads/" . $file);
攻击者输入../../../../etc/passwd,实际读取路径为/var/www/html/uploads/../../../../etc/passwd,简化后为/etc/passwd。2.2 Windows下的变种
[*]使用..\或者..%5c(URL编码的\)
[*]使用绝对路径如C:\Windows\System32\config\SAM
三、渗透测试典型技巧场景:下载功能https://example.com/getfile?filename=manual.pdf步骤1:基础探测
filename=../../../../etc/passwd,若返回密码文件内容,则为成功。若返回错误或空白,尝试URL编码:
[*]..%2f..%2f..%2fetc/passwd
[*]双URL编码:..%252f..%252f..%252fetc/passwd(针对后端做了一次解码的中间件)
步骤2:绕过文件扩展名追加
有时后端会自动加上.pdf,可使用空字节截断(旧版本PHP):filename=../../etc/passwd%00(空字节终止字符串)。现代PHP已修复,但其他语言如Java可能仍存在。步骤3:利用信息响应
即使无法直接读取文件,可通过结合文件包含漏洞(LFI)实现代码执行。四、防御路径遍历4.1 规范路径并验证(最有效)
[*]解析目标路径的绝对路径,检查其是否以允许的基目录开头。
python
import osbase_dir = "/var/www/html/uploads/"requested_file = os.path.join(base_dir, user_input)real_path = os.path.realpath(requested_file)if not real_path.startswith(base_dir): raise Exception("Access denied")
4.2 白名单文件标识
[*]不使用文件名作为参数,改用文件ID,后端维护ID到真实文件路径的映射。
[*]示例:?id=123 → 从数据库查找文件路径/uploads/doc_123.pdf。
4.3 输入过滤
[*]删除或替换../、..\、./等序列,但需注意绕过(....//可变成../)。
[*]使用正则仅允许字母数字、点、下划线、横线,拒绝任何包含斜杠或反斜杠的输入。
4.4 沙箱与权限限制
[*]Web服务器应运行在低权限用户,即使读取了/etc/passwd也无法读取其他敏感文件(如/etc/shadow)。
[*]使用open_basedir(PHP)限制文件访问范围。
4.5 部署WAF检测
[*]拦截URL中包含../、..%2f、%2e%2e%2f等特征的请求。
五、检测方法
[*]自动扫描:使用Burp Scanner或NSE脚本(http-enum)遍历常见敏感文件路径。
[*]代码审计:搜索readfile、fopen、file_get_contents等函数,检查前是否进行路径规范化。
六、总结路径遍历攻击利用的是开发者对文件路径安全性的疏忽。最简单的防御就是使用ID映射或白名单,避免用户直接控制文件路径。如果必须使用用户输入,务必进行规范化并验证路径前缀。结合最小权限原则,可将泄露风险降到最低。
页:
[1]