您现在的位置是:探索 >>正文

任意文件下载漏洞

探索333人已围观

简介一个不起眼的下载按钮,可能让攻击者拿到你服务器的整个文件系统。这不是危言耸听。某次渗透测试中,我仅靠修改一个参数,就从目标网站的附件下载功能里,直接拉出了/etc/passwd。对方还是家知名电商平台 ...

一个不起眼的任意下载按钮,可能让攻击者拿到你服务器的文件整个文件系统。这不是下载危言耸听。某次渗透测试中,漏洞我仅靠修改一个参数,任意就从目标网站的文件附件下载功能里,直接拉出了/etc/passwd。下载对方还是漏洞家知名电商平台。

漏洞原理简单得让人发指。任意开发者图省事,文件把用户传入的下载文件名直接拼进路径,download?漏洞file=report.pdf,后端就老老实实去读这个文件。任意没人想到有人会传../../../../etc/passwd。文件路径穿越,下载一层层往上跳,直到根目录。更狠的还能读file:///C:/Windows/win.ini,或者配合php://filter把源码也扒出来。

真正可怕的是,这类漏洞往往藏在最不起眼的地方。导出报表功能、图片预览接口、甚至一个favicon.ico的获取接口,都可能成为突破口。我见过一个OA系统,下载附件时用base64编码文件名,看似安全,结果解码后没做任何校验,照样被穿越。安全从来不是表面功夫。

攻击者读到你服务器上的数据库配置文件,拿到账号密码,接着连上内网数据库,拖走所有用户数据。整个过程可能用不了十分钟。而你还在纳闷,日志里怎么多了一条奇怪的下载记录。更麻烦的是,如果服务器上还跑着root权限的服务,那/root/.ssh/id_rsa一旦被读走,整个服务器就等于裸奔了。

有些开发觉得,只要限制文件后缀为jpg或pdf就万事大吉。太天真了。攻击者可以读.env文件,里面躺着各种密钥;读web.xml,分析出框架版本找已知漏洞;甚至读/proc/self/environ,把进程环境变量里的敏感信息全捞出来。后缀限制只能挡住最笨的攻击者。

修复方案倒是不复杂。最稳妥的是把文件名映射成数据库里的ID,用户只能传ID,后端自己去查真实路径。如果非要传文件名,那就做白名单校验,把允许下载的文件列个清单。再不行,用正则过滤掉所有../和绝对路径,但记住,过滤黑名单永远不如白名单可靠。

写这段的时候,我特意去翻了几个开源项目的代码,发现有些项目至今还在用Path.GetFileName()这种半吊子过滤。这种函数在Windows下能过滤掉路径,换到Linux服务器上就失效了。跨平台的坑,踩的人前赴后继。

最后说句实在话,每次测出这种漏洞,我都替企业捏把汗。修起来就几行代码的事,但如果不修,黑客拿到的东西可能比你想象的还要多。别等被脱裤了才想起补漏洞,到那时候,数据早就挂在暗网上论斤卖了。

Tags:

上一篇:悬赏任务源码

下一篇:网站thinkphp框架

相关文章

  • golang中文社区

    探索

    golang中文社区有个特别有意思的现象:你问一个报错问题,底下回复经常不是直接给答案,而是先讨论你代码的命名风格。这事儿放别的语言社区早吵起来了,但在Go社区,大家居然能心平气和地聊下去,最后还真有 ...

    【探索】

    阅读更多
  • epson爱普生4166官网驱动下载

    探索

    爱普生L4166的驱动在官网藏得不算深,但第一次找的人多半会绕弯路。直接搜“epson爱普生4166官网驱动下载”,出来的前几条往往是第三方下载站的广告,点进去捆一堆全家桶。真正的入口只有一个:爱普生 ...

    【探索】

    阅读更多
  • sql原理

    探索

    ```html sql原理 body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvet ...

    【探索】

    阅读更多


友情链接