文件包含漏洞详解

目录

一、产生的原因

二、文件包含函数

三、文件包含漏洞的条件

四、本地文件包含和远程文件包含

本地文件包含(LFI,Local File Include)

远程文件包含(RFI,Remote File Include)

五、文件包含的危害

六、文件包含的防御


一、产生的原因

程序开发人员为了使代码更为灵活,通常将可以重复使用的代码写到一个文件中,然后在使用某些函数时,直接调用该文件,该过程称为文件包含。由于这种灵活性,导致客户端可以调用恶意文件,直接执行恶意操作,从而造成文件包含漏洞。文件包含漏洞以PHP最为突出。

二、文件包含函数

include()、include_once()、require()、require_once()

三、文件包含漏洞的条件

●include()等函数通过动态变量的方式包含需要包含的文件

●攻击者能够控制该动态变量

四、本地文件包含和远程文件包含

本地文件包含(LFI,Local File Include)

     本地文件包含是加载服务器本地的文件。

     如果在目标系统存在一个包含PHP代码的文件(即使是文本文件),则通过本地文件包含可以执行该PHP代码。

远程文件包含(RFI,Remote File Include)

     远程文件包含是通过HTTP等协议加载一个远程文件资源。

     在PHP中,远程文件包含默认是关闭的。要开启此功能,需要在php.ini文件中对配置进行修改,将allow_url_include选项设置为on,重启服务器即生效。

   攻击者可以将shell.txt文件放置在远程服务器192.168.1.1上,并通过输入“http://192.168.1.1/shell.txt”的方式将其包含执行。

五、文件包含的危害

●读取敏感文件。比如PHP的配置文件php.ini、Apache的配置文件httpd.conf都是攻击者感兴趣的敏感文件。

●远程包含shell。

●基于PHP封装协议读取源码文件。PHP带有很多内置URL风格的封装协议,如 file://、http://、ftp://、php://、zlib://、data://等。因为直接包含PHP文件,会被解析执行,无法查看PHP源码。因此要想读取PHP文件源码,需要使用PHP的过滤器封装协议。比如要读取login.php文件,直接输入URL参数为"?file=login.php",页面会显示login.php解析执行后的页面。要想看到login.php的源码,可输入参数"?file=php://filter/read=convert.base-64-encode/resource=login.php",此时将得到页面的base64编码后的字符串,将其解码就得到了login.php的源码。

六、文件包含的防御

●严格判断包含中的参数是否外部可控。

●对包含路径进行限制。限制被包含的文件只能在某个文件夹内,禁用目录跳转字符(如:../)。本地文件包含可以通过PHP中配置open_basedir选项来限制特定的可打开文件目录。

●文件验证。验证包含的文件是否是在白名单中。

●尽量减少或不使用动态包含,必须使用文件包含的地方直接静态写入,不允许通过动态变量的方式控制包含文件,如:include(“footer.php”)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

趣多多代言人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值