目录遍历漏洞是什么
作者:热点 来源:百科 浏览: 【大 中 小】 发布时间:2026-10-17 06:04:56 评论数:
一个午后,目录我盯着Burp Suite的遍历响应窗口,里面躺着一串目录列表——`/var/www/html/uploads/`、漏洞`/etc/passwd`、目录`/home/user/.ssh/`。遍历这不是漏洞我自己的服务器,是目录某家电商平台的测试环境。对方只要求验证漏洞,遍历不深入利用。漏洞但那一瞬间,目录我还是遍历倒吸了口气:这个漏洞,比想象中普遍。漏洞
目录遍历漏洞,目录说白了就是遍历攻击者能通过URL里的`../`序列,跳出Web根目录,漏洞去读服务器上任意文件。原理不复杂——很多开发者会直接拼接用户输入的文件名,比如`download.php?file=report.pdf`,后端拿到`report.pdf`就去`/var/www/files/`下读取。但你传入`../../../../etc/passwd`呢?路径解析时,`..`会让目录向上跳转,一路跳出`files/`,最终指向系统敏感文件。
这类漏洞最要命的地方在于,它不需要什么高级技巧。一个没过滤参数的接口,配合浏览器手动改URL就能触发。我见过不少新手用扫描器扫出一堆漏洞,却不知道原理,报修时只能复述扫描结果。实际上,判断是否存在目录遍历,只需三步:找参数、加`../`、看响应。如果响应里出现`root:x:0:0:`或者`[Files]`之类的列表,基本实锤。
防护手段其实也简单——但很多人栽在“简单”上。最有效的做法是白名单校验:只允许特定文件名,拒绝一切含`/`或`\`的输入。其次是使用语言自带的路径规范化函数,比如Python的`os.path.realpath()`,然后检查结果是否以目标目录开头。这两种方法搭配,基本能堵死90%的绕过手法。可现实呢?我审计过的代码里,至少三成开发者只做了黑名单过滤,把`../`替换成空字符串。结果攻击者用`....//`就能绕过——因为替换掉中间的`../`后,剩下的`../`又拼接成了新的跳转序列。这种猫鼠游戏,黑名单永远处于下风。
还有个容易被忽略的细节:编码绕过。URL里的`%2e%2e%2f`解码后就是`../`,有些服务端只检查原始字符串,没解码后的内容。更刁钻的还有UTF-8变体、双重URL编码。你以为过滤了,实际上只是给攻击者添了点麻烦。
真实案例里,目录遍历常被用来读数据库配置、SSH私钥、备份文件。2019年某知名云厂商的存储桶遍历漏洞,暴露了数千个客户的数据——起因就是一个未校验的`list`参数。而个人开发者的小站更惨,被扫到后直接拖库,连日志都没留下。
写代码的时候,多问自己一句:这个参数最终会拼接到文件路径里吗?如果会,宁可拒绝所有非常规字符,也别用侥幸心理。安全不是堆功能,是砍掉不该有的路径。
