一个晴朗的录遍历漏下午,我随手点开某政府网站的录遍历漏“信息公开”栏目,本想查一份红头文件。录遍历漏页面正常加载,录遍历漏文件正常下载。录遍历漏但职业习惯让我多看了一眼地址栏——?录遍历漏dir=../../../../etc/passwd。回车,录遍历漏浏览器里跳出一串冒号分隔的录遍历漏账号列表。没有登录框,录遍历漏没有验证码,录遍历漏连个警告弹窗都没有。录遍历漏
这就是录遍历漏web目录遍历漏洞。说人话,录遍历漏就是录遍历漏服务器没拦住用户往上级目录爬。攻击者把路径里的录遍历漏../像叠罗汉一样堆上去,一路爬出网站根目录,看到服务器上其他不该看的文件。原理简单得像个笑话,但现实中它比大多数高深漏洞都致命。
我见过最离谱的一次,是某电商平台的备份文件直接躺在/backup/目录下,文件名就叫db_2023.sql。遍历进去,几万条用户手机号、收货地址、支付记录整整齐齐躺在文本文档里。那感觉就像看到有人把保险柜钥匙挂在门口,还贴了张纸条写着“请自取”。
这类漏洞的根源,是开发者对用户输入过度信任。他们写了file_get_contents($_GET['file']),就以为用户只会传about.php。没人规定攻击者必须按套路出牌。更糟的是,很多老代码从十年前的论坛源码里复制粘贴过来,连过滤函数都没加。你问他们为什么不修?答曰:“系统跑得好好的,改坏了谁负责?”——这种心态比漏洞本身更危险。
检测方法倒不复杂。手动测的话,在URL参数后面挨个试../、..%2f、..%5c,看响应里有没有/etc/passwd或者boot.ini的特征字符串。用工具的话,Burp Suite的Intruder模块能自动跑字典,五分钟扫完一百个参数。但说实话,我更喜欢手工测——那种一步步试探出系统边界的快感,自动化工具给不了。
修复方案也直白:要么对用户输入做白名单校验,只允许特定文件名;要么把文件操作限制在固定目录内,用绝对路径拼接而不是相对路径。PHP里realpath()函数能检查最终路径是否越界,Java里Path.normalize()也能干这事。但最关键的,是别把敏感文件放在web根目录附近——哪怕你过滤做得再严,哪天漏个零日绕过,备份文件照样裸奔。
有个细节很多人忽略:Windows服务器上..\也能遍历,但很多开发者只过滤了正斜杠。还有URL编码的变体,%2e%2e%2f就是../的十六进制写法,有些过滤规则只看明文,编码一绕就穿。这就像锁门时只锁了门把手,忘了还有窗户。
写这篇文章前,我刚在某个漏洞平台上提交了一个新案例——某医院的体检报告查询系统,通过遍历能下载任意患者的CT影像。提交完报告,我盯着那个?file=report_2024.pdf的参数看了很久。修这个漏洞只需要三行代码,但那个医院的信息科可能永远不知道,他们每天维护的系统,其实像筛子一样漏风。


相关文章




精彩导读
热门资讯
关注我们