任意文件读取漏洞危害
任意文件读取漏洞危害
一个医疗系统的任意后台,用户上传身份证照片的文件危害接口,被人改成读取服务器上的漏洞 /etc/passwd。结果不到十分钟,任意整个服务器的文件危害用户列表、数据库配置、漏洞甚至备份文件的任意路径全被翻了个底朝天。这不是文件危害电影情节,是漏洞我去年参与的一次真实应急响应。
任意文件读取漏洞,任意说白了就是文件危害攻击者能像坐在服务器终端前一样,随意浏览机器上的漏洞文件。它不像SQL注入那样直接掏数据库,任意也不像RCE那样直接拿shell,文件危害但它的漏洞破坏力往往被低估。我见过太多团队,修完高危漏洞就收工,却对文件读取漏洞不以为然——直到某天发现源码被拖走,才追悔莫及。
这个漏洞最要命的地方在于“信息泄露”的连锁反应。攻击者先读配置文件,拿到数据库密码;再读源码,找到业务逻辑里的其他漏洞;甚至读/root/.ssh/id_rsa,直接登录服务器。每一步都像在拆积木,而文件读取就是最底层的那块底座。我认识的一个白帽朋友,就靠一个文件读取漏洞,从某电商平台的图片接口一路读到阿里云OSS的密钥,最后控制了对方整个存储桶——前后只用了二十分钟。
危害程度还得看目标系统的敏感度。政府网站里的居民信息、企业内网里的财务报表、云服务器上的环境变量——每一类文件都有它的“价值锚点”。有些文件本身不涉及核心数据,但组合起来就能拼出完整的攻击路径。比如读取/proc/self/environ可能泄露临时token,读取/var/log/auth.log能摸清管理员登录习惯,这些零碎信息在攻击者手里就是拼图碎片。
更隐蔽的是,很多文件读取漏洞藏在看似无害的功能里。图片裁剪、报表导出、模板加载、语言包切换——这些功能一旦对用户输入的文件路径过滤不严,就会变成漏洞入口。我审计过一套OA系统,它的“打印模板预览”功能直接拼接用户传入的路径,攻击者只需把参数改成../../../../etc/passwd就能越权读取。开发者的本意是方便用户自定义模板,结果成了给攻击者递刀。
有些人会说:“我们服务器上没什么机密文件,读就读呗。”这种想法太天真。就算没有核心数据,至少还有代码。源码一旦泄露,等于把系统的所有弱点公之于众——后续攻击难度直接降一个量级。而且,很多文件读取漏洞还能配合SSRF或反序列化,升级成远程代码执行。我见过最极端的案例,攻击者通过文件读取拿到Java反序列化利用链的key,最终成功执行了系统命令。
修复这类漏洞说难也不难,关键看有没有把“路径校验”当回事。最稳妥的做法是采用白名单机制,只允许读取指定目录下的文件;其次是对路径参数做规范化处理,过滤掉..和绝对路径;最后还得限制Web服务运行账户的权限,别让它能读全盘。但现实中,很多系统连基本的过滤都没做,直接拿用户输入去拼路径——这种代码我看着就心慌。
文件读取漏洞的可怕之处,不在于它能直接造成多大破坏,而在于它像一把万能钥匙,能打开通往系统深处的大门。你永远不知道攻击者会用它读到什么,又会基于读到的内容策划出怎样的下一步攻击。与其事后补救,不如在写代码时多留个心眼——毕竟,你的服务器上,总有些文件是不该被外人看到的。