php文件包含漏洞

时尚 2026-10-17 05:29:40 46976

PHP文件包含漏洞,含漏说白了就是含漏程序员把用户的输入直接拼进了文件路径里。攻击者可以借此读取服务器上的含漏任意文件,甚至执行恶意代码。含漏这不是含漏什么高深理论,而是含漏每天都在互联网上真实发生的攻击。

看个最简单的含漏例子。某网站有个页面叫index.php?含漏page=about,代码大概长这样:include($_GET['page'] . '.php')。含漏开发者本意是含漏让用户切换不同页面,about、含漏contact、含漏products之类。含漏但攻击者把page参数改成../../../../etc/passwd,含漏配合空字节截断(老版本PHP的含漏漏洞),就能把系统密码文件内容吐出来。更狠一点,如果服务器上某个上传目录里有图片马,直接包含它就能执行PHP代码,拿下webshell。

这类漏洞分两种:本地文件包含(LFI)和远程文件包含(RFI)。LFI只能读服务器本地文件,RFI可以直接从攻击者的服务器拉取恶意脚本执行。RFI危害更大,但现实中LFI更常见——毕竟现在很多PHP配置默认关闭了allow_url_include。不过LFI照样能玩出花,配合日志注入、临时文件竞争、php://filter伪协议,照样能RCE。

我见过最骚的操作是拿LFI读PHP源码。有个站用include加载模板,攻击者把参数改成php://filter/convert.base64-encode/resource=config,直接拿到数据库密码的base64编码。整个过程没执行一行代码,纯粹靠文件读取就脱裤了。这种攻击手法在CTF里是基础题,但在真实渗透测试里,很多小站连这种基础防护都没有。

为什么这漏洞到现在还没绝迹?根子在开发者习惯。很多人写代码时图省事,直接拼参数进include,觉得"反正用户不会乱传"。但攻击者最擅长的就是乱传。另一个原因是PHP的历史包袱——早期版本函数设计太宽松,像register_globals、magic_quotes这些特性,现在看全是坑。虽然PHP 5.4以后默认关闭了大部分危险配置,但老代码还在跑,老运维还在用,漏洞就还在。

防御其实不难。第一,别让用户输入直接进include,用白名单映射,比如page=about就对应about.php,其他一律404。第二,如果必须动态包含,检查路径是否在允许目录内,用realpath()比对。第三,别用include,改用require_once加固定路径拼接。第四,PHP配置里把allow_url_include设为Off,open_basedir限制可访问目录。但最关键的还是人——写代码时多想一步"如果这里被塞了恶意输入会怎样"。

这漏洞提醒我们,安全不是加个防火墙就完事,而是每个函数调用都要有敬畏心。你永远不知道攻击者会从哪个犄角旮旯的参数里,找到那条通往服务器核心的路径。

本文地址:http://www.79wt.cn/news/303a499692.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

友情链接