搜索

文件包含漏洞的概念

发表于 2026-10-17 06:17:39 来源:烟消火灭网
```html 文件包含漏洞的文件概念

文件包含漏洞的概念

一个网站如果允许用户通过URL参数指定要加载的文件,比如 ?包含page=about.php,那么攻击者就可能把 about.php 换成 ../../etc/passwd。漏洞服务器一旦没拦住,文件就把系统密码文件的包含内容吐出来了。这种毛病叫文件包含漏洞。漏洞它不是文件新东西,PHP里的包含 include()、require() 从诞生起就带着这个风险,漏洞只是文件很多人写代码时不当回事。

文件包含漏洞分两种:本地文件包含(LFI)和远程文件包含(RFI)。包含LFI 只能读服务器本地的漏洞文件,RFI 更狠,文件能加载远程服务器上的包含恶意脚本。RFI 需要 PHP 的漏洞 allow_url_include 选项打开,默认是关的,所以现在 LFI 更常见。但 LFI 也能玩出花来——配合文件上传、日志投毒、/proc/self/environ 这些技巧,照样能执行代码。

举个真实例子。2019年,某小型电商网站用了一个老掉牙的CMS,URL长这样:index.php?module=user&action=profile。后端代码直接 include($_GET['module'] . '.php')。攻击者传 module=../../../../var/log/apache2/access.log,然后往User-Agent里写一句PHP代码 <?php system($_GET['cmd']); ?>。日志文件被包含后,PHP代码执行,服务器就沦陷了。整个过程不需要上传任何文件,也不需要什么高级工具。

为什么这种漏洞反复出现?因为开发者图省事。写 include($_GET['page']) 比写一堆 switch 或白名单判断快多了。尤其是小项目、外包代码、学生作业,能跑就行。安全审计?不存在的。我见过一个后台管理系统,include($_REQUEST['tpl']) 直接暴露在公网,连基本的 ../ 过滤都没有。用浏览器地址栏改一下参数,就能读 /etc/shadow。那台服务器是Ubuntu 16.04,PHP 7.0,2018年就停止支持了。

防御方法其实不复杂,但需要认真做。第一,别用用户输入直接拼路径。第二,用白名单——只允许 home、about、contact 这几个值,其他一律拒绝。第三,如果非要动态包含,用 basename() 剥掉目录部分,再拼接固定前缀。第四,关闭 allow_url_include 和 allow_url_fopen。第五,设置 open_basedir 限制PHP能访问的目录。这些措施叠加,基本能堵死。

但现实是,很多老系统改不动。我去年帮一个朋友看他的WordPress插件,里面有个 include($_GET['file'] . '.php'),连 ../ 都没过滤。我告诉他这很危险,他说“插件作者早就不更新了,凑合用吧”。这种心态就是漏洞的温床。文件包含漏洞不是技术难题,是态度问题。你不在乎,攻击者就在乎。

最后提一句,文件包含漏洞经常和文件上传漏洞组合。上传一个图片马,里面藏PHP代码,然后通过LFI包含它。图片马能绕过上传检查,LFI负责执行。这种组合拳在CTF比赛里是送分题,在真实环境里是灾难。别问我是怎么知道的。

```
随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by 文件包含漏洞的概念,烟消火灭网   sitemap

回顶部