文件包含漏洞可能造成的文件危害包括 一个不起眼的参数,比如?包含page=about.php,攻击者改写成?漏洞page=../../etc/passwd,服务器就把系统文件吐了出来。可能括这不是造成科幻片,是害包OWASP Top 10里躺了多年的老毛病——文件包含漏洞(LFI/RFI)。它最狠的文件地方在于,不直接打你,包含而是漏洞借你的手打你自己。 危害之一,可能括是造成**敏感信息泄露**。攻击者能读取服务器上任意可读文件,害包配置文件、文件数据库密码、包含密钥、漏洞用户数据,全在眼皮底下。我见过一个案例,某个电商站点的后台用?lang=cn切换语言,攻击者改成?lang=../../../../etc/shadow,虽然没拿到密码哈希(权限不够),但把/var/log/nginx/access.log读了出来,里面全是管理员登录的Cookie。这还只是练手。 更麻烦的是**远程代码执行(RCE)**。当PHP的allow_url_include开着,攻击者可以传一个http://evil.com/shell.txt,让服务器把外部的恶意代码当成本地文件执行。哪怕关掉了远程包含,本地文件包含也能配合日志注入——往User-Agent里塞PHP代码,再包含日志文件,照样拿到webshell。有个真实事件:某论坛的附件下载功能用了?file=参数,攻击者把木马伪装成图片上传,再用包含漏洞触发,整个服务器成了肉鸡,挖矿脚本跑了三天才被发现。 第三重危害是**配合其他漏洞放大攻击面**。文件包含常常是“帮凶”,它能让一个XSS变成RCE,让一个文件上传变成服务器沦陷。比如攻击者先上传一个包含恶意脚本的txt文件,再通过LFI去包含它,绕过了上传目录的解析限制。有些CMS的模板引擎允许包含用户输入,结果变成了服务端模板注入(SSTI),直接读写服务器文件。这种组合拳,比单点漏洞难防得多。 别忘了**内网探测和横向移动**。攻击者拿到文件读取权限后,可以读/proc/net/arp看内网IP,读/etc/hosts找内部服务名,甚至读~/.ssh/known_hosts摸清服务器之间的信任关系。我见过一个测试报告,攻击者通过LFI读到了应用服务器上的.env文件,里面连着Redis密码,接着用Redis写crontab反弹shell,最后整个内网段都被扫了一遍。这已经不是“网站被黑”的级别,是基础设施沦陷。 最阴险的是**持久化后门**。文件包含本身不直接留后门,但攻击者可以把恶意代码写进日志文件、session文件、临时文件,然后反复包含触发。管理员清理了webshell,却漏了/tmp里的一个session文件,攻击者隔三差五回来一趟。有些后门干脆藏在图片的EXIF信息里,靠LFI激活,常规扫描器根本扫不出来。 说白了,文件包含漏洞就像你家门锁没坏,但窗户没关。攻击者不用撬锁,顺着窗户爬进来,翻你抽屉、改你文件、装个窃听器。修复办法其实简单:过滤用户输入、禁止动态包含、白名单校验路径。但现实中,总有开发者图省事,写个include($_GET['page'])就上线。技术债迟早要还,只是代价可能比你想象的大得多。 |