生命在于学习——文件包含漏洞学习笔记

一、漏洞描述

程序在引用文件的时候,引用的文件名,用户可控的情况,传入的文件名没有经过合理的校验或者校验不严,从而操作了预想之外的文件,就有可能导致文件泄露和恶意的代码注入。
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这重文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。

二、常见文件包含函数

在这里插入图片描述

三、漏洞危害

1、敏感信息泄露

2、拒绝服务攻击

3、执行恶意代码

4、配合文件上传,扩大危害

一般来说,远程文件包含漏洞危害更大。

四、利用前提

1、web应采用include()等文件包含函数通过动态变量的方式引入需要包含的文件

2、用户能够控制该动态变量

五、两个关键选项

Allow_url_fopen = on
是否允许将URL(HTTP,HTTPS等)作为文件打开处理,默认开启
Allow_url_include= on
是否允许include()和require()函数包含URL(HTTP,HTTPS)作为文件处理,默认关闭,远程文件包含必须为开启。

六、挖掘

抓包观察有无明显的参数用于打开或使用文件,在漏洞挖掘过程中,注意下即可,如果遇到疑似文件包含,可以使用以下的测试方法。
a.php是fileinclude.php的同⼀⽬录的⽂件 http://www.aaa.com/fileinclude.php?file=file://a.php
打开⽬标⽹站,⼀般不会被过滤掉 http://www.aaa.com/fileinclude.php?file=http://www.aaa.com
因为不知道对参数的过滤方式,因此该方法不一定成功。

七、本地文件包含(LFI)

能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞。
重要特点:把任何包含进来的文件都当作PHP文件来执行。
下面是pikachu靶场的源码
在这里插入图片描述
$_GET[‘filename’] 接收客户端传的参数,其中没有任何过滤带⼊到 include 函数中, include 包含这个⽂件,引⼊到当前⽂件中,因此会造成⽂件包含漏洞; ⽐如:http://pikachu.com/vul/fileinclude/fi_local.php?filename=123.jpg 1.jpg是图⽚,但是当有⽂件包含漏洞时,这个图⽚会被当做 php ⽂件处理,当然前提是它 ⾥⾯有 php 的代码,这样我们就可以先写⼀个 php 代码的⽊⻢,然后伪装成图⽚上传,从⽽ 达到控制对⽅的⽬的。

八、php伪协议

1、简介

PHP带有很多内置URL风格的封装协议,可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数,除了这些封装协议,还能通过stream_wrapper_register()来注册自定义的封装协议。

在这里插入图片描述
可以在phpinfo中的Registered PHP Streams中找到可使用的协议。
在这里插入图片描述

2、测试环境

测试代码
在这里插入图片描述
php.ini配置
在这里插入图片描述
各协议的利用条件和方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值