您现在的位置是:烟消火灭网 > 娱乐

本机文件包含漏洞不能包含哪些文件

烟消火灭网2026-10-17 07:46:50【娱乐】6人已围观

简介本机文件包含漏洞LFI)最坑人的一点,是很多人以为“只要包含的是服务器上的文件就万事大吉”。实际上,你连自己的系统文件都不能随便乱碰。有些文件一旦被包含,等于亲手把服务器钥匙递给攻击者。 直接说结论:

本机文件包含漏洞(LFI)最坑人的本机包含不能包含一点,是文件文件很多人以为“只要包含的是服务器上的文件就万事大吉”。实际上,漏洞你连自己的本机包含不能包含系统文件都不能随便乱碰。有些文件一旦被包含,文件文件等于亲手把服务器钥匙递给攻击者。漏洞

直接说结论:不能包含任何带有执行逻辑的本机包含不能包含文件,尤其是文件文件PHP、ASP、漏洞JSP这类脚本文件。本机包含不能包含这听起来反直觉——LFI不就是文件文件要读源码吗?但你要真想用include把config.php拖进当前页面,那玩意儿一旦被解析,漏洞代码会直接在目标服务器上跑起来。本机包含不能包含攻击者构造路径时,文件文件如果成功加载了`/etc/passwd`,漏洞那只是文本;但如果加载了`/var/www/html/upload/shell.php`,那就是远程代码执行。区别在于:文本文件只是“看”,脚本文件是“干”。

那日志文件呢?很多人喜欢用LFI去包含Apache的access.log,往里面塞PHP代码再执行。这招确实老练,但有个致命前提——日志文件必须可写。现代Linux发行版普遍开了logrotate,日志轮转后旧文件权限会变成640甚至600,Web服务器用户根本写不进去。更麻烦的是,如果日志路径里带空格或特殊字符,你构造的包含路径会被截断(除非有%00截断漏洞,但PHP 5.3.4以后这招就废了)。所以,别把宝押在日志文件上。

还有一类文件,看起来人畜无害,实际是雷区:/proc/self/environ。这个文件把HTTP头里的User-Agent直接映射成环境变量。攻击者把UA改成``,再通过LFI包含它,就能执行命令。但问题是,如果服务器用Nginx + PHP-FPM,这个文件路径根本不存在。而且现在很多容器环境里,/proc/self/environ是空的。你辛辛苦苦构造半天的payload,结果包含了个寂寞。

更不能碰的是二进制文件。比如`/bin/ls`、`/usr/bin/id`这些。你用include去加载它们,PHP会尝试把二进制内容当文本解析,轻则输出乱码,重则直接内存溢出导致进程崩溃。攻击者想用LFI读取密码哈希?行,但`/etc/shadow`通常只有root能读,Web用户权限不够。你要是强行包含,只会收到一个“Permission denied”的警告,然后页面白屏。

最阴险的坑在伪协议上。`php://filter`能读源码,但`php://input`能直接执行POST请求体里的代码。可你要是把`data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+`塞进去,服务器会先解码再执行。这已经不算LFI了,这是直接RCE。但问题是,很多开发者为了防这种攻击,会在代码里过滤`://`和`../`,结果连正常的本地文件都包含不了——因噎废食,典型例子。

还有一类文件,包含它不会报错,但会让你陷入逻辑死循环:比如把`index.php`自己包含进去。如果页面里有递归包含逻辑,服务器内存会被瞬间耗尽。攻击者用这个做拒绝服务攻击,比直接打流量还狠。你查日志只会看到无数个“include failed”警告,根本定位不到源头。

最后说个实战案例。某CMS系统有个LFI漏洞,攻击者尝试包含`/etc/passwd`成功,但读不到源码。后来改用`/proc/self/fd/12`,这个文件指向当前进程打开的临时文件。如果PHP上传文件时生成了临时文件,攻击者就能通过包含它执行代码。但前提是攻击者得先上传一个恶意文件,而且临时文件的生命周期只有请求结束前那一瞬间——时间窗口窄到以毫秒计。这招在CTF里常见,真实环境里成功率极低。

所以,别总想着“什么都能包含”。LFI能读的文件,基本限制在纯文本、配置文件和日志上。任何带执行属性、二进制格式、或依赖进程状态的虚拟文件,都是定时炸弹。记住一句话:包含文件前,先问自己——这个文件被解析后,服务器会变成谁的奴隶?

很赞哦!(41)