|
路径遍历攻击——隐藏文件与配置文件泄露 摘要:路径遍历(Path Traversal,又称目录遍历)是一种利用文件路径输入过滤不严,使攻击者能够访问Web根目录之外的文件和目录的黑客网站攻击手段。通过../等序列,攻击者可读取系统敏感文件(如/etc/passwd)、应用配置文件(config.php)、日志文件甚至源代码,为后续渗透提供信息。本文将深入剖析路径遍历的原理、编码绕过技巧,并给出规范文件路径检查、沙箱限制等防御方案。 关键词:黑客网站攻击;路径遍历;目录遍历;渗透测试;文件泄露;Web安全防御 一、引言许多Web应用提供文件下载或预览功能,参数如?file=report.pdf。若后端直接拼接文件路径而未做安全校验,攻击者可提交?file=../../../etc/passwd读取服务器明文密码文件。尽管这类漏洞长久存在,但每年仍有大量网站因路径遍历而泄露敏感信息,甚至被用来读取源码中的数据库密码。因此,理解该攻击和防御对于保护网站数据资产至关重要。 二、路径遍历原理2.1 漏洞成因应用程序使用用户可控的输入构建文件路径,但没有规范化和过滤路径遍历序列(../或..\)。典型的危险代码: [size=12.573px]php
$file = $_GET['file';readfile("/var/www/html/uploads/" . $file);
攻击者输入../../../../etc/passwd,实际读取路径为/var/www/html/uploads/../../../../etc/passwd,简化后为/etc/passwd。 2.2 Windows下的变种三、渗透测试典型技巧步骤1:基础探测
filename=../../../../etc/passwd,若返回密码文件内容,则为成功。若返回错误或空白,尝试URL编码: 步骤2:绕过文件扩展名追加
有时后端会自动加上.pdf,可使用空字节截断(旧版本PHP):filename=../../etc/passwd%00(空字节终止字符串)。现代PHP已修复,但其他语言如Java可能仍存在。 步骤3:利用信息响应
即使无法直接读取文件,可通过结合文件包含漏洞(LFI)实现代码执行。 四、防御路径遍历4.1 规范路径并验证(最有效)[size=12.573px]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 白名单文件标识4.3 输入过滤4.4 沙箱与权限限制4.5 部署WAF检测五、检测方法六、总结路径遍历攻击利用的是开发者对文件路径安全性的疏忽。最简单的防御就是使用ID映射或白名单,避免用户直接控制文件路径。如果必须使用用户输入,务必进行规范化并验证路径前缀。结合最小权限原则,可将泄露风险降到最低。
|