文件包含漏洞

什么是文件包含

简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。

文件包含漏洞成因

在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。

PHP文件包含的函数

  • include( )
    当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含
    进来,发生错误时之给出一个警告,继续向下执行。
  • include_once( )
    功能与 Include()相同,区别在于当重复调用同一文件时,程序只调用一次
  • require( )
    require()与 include()的区别在于 require()执行如果发生错误,函数会输出
    错误信息,并终止脚本的运行。
  • require_once( )
    功能与 require()相同,区别在于当重复调用同一文件时,程序只调用一次。

文件包含漏洞分类

本地文件包含漏洞

当包含的文件在服务器本地时,就形成了本地文件包含。

下面简单做个测试:

<?php
    $file = $_GET['file'];
    include($file);
    // ......

先说一下文件包含的一个要点:文件包含可以包含任意文件,即便被包含的文件并不是与当前编程语言相关,甚至为图片,只要文件被包含,其内容会被包含文件包含,并以当前服务器脚本语言执行。
可以看到,以上代码中可以控制可控参数file来控制包含的$file的值。

  1. 因此可以建立随意后缀文件进行包含,比如新建文件file.txt,文件内容如下:
<?php
phpinfo();
?>

然后包含file.txt文件:

img

image.png

如果包含的文件内容不符合php语言语法的,会直接将文件内容输出,比如:

img

image.png

  1. 接下来再看一种情况,开发者限制了包含文件的后缀,代码如下:
<?php
    $file = $_GET['file'] . '.php';
    echo $file;
    include($file);

这样就找不到要包含的文件了,如下:

img

image.png

此时,可以使用%00截断,不过需要有前提条件:
1). PHP版本 < 5.3 (不包括5.3) ;
2). PHPmagic_quotes_gpc = off;
3).PHP对所接收的参数,如以上代码的$_GET['file']未使用addslashes函数。

因为PHP大于等于5.3的版本已经修复了这个问题,如果开启了gpc或者使用了addslashes函数的话则会对其进行转义

首先看php版本小于5.3,并且magic_quotes_gpc = Off1.php内容如下


                
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值