首页 > 其他分享 >文件包含漏洞简介

文件包含漏洞简介

时间:2024-05-31 20:32:00浏览次数:24  
标签:文件 include 包含 url 简介 漏洞 php

漏洞原理   

         程序开发人员通常会把可重复使用的函数写到单个文件中,在使用其它函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般称为包含。程序开发人员都希望代码更加灵活,所以通常会将被包含的文件设置为变量,用来进行动态调用。正是这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

漏洞场景

       php中引发文件包含漏洞的通常是以下四个函数:

1. include() 当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。

2. include_once() 功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。

3. require() 只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行

4. require_once() 它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

        当使用这四个函数包含一个新文件时,该文件将作为PHP代码执行,php内核并不在意该被包含的文件是什么类型。所以如果被包含的是txt文件、图片文件、远程url、也都将作为PHP代码执行。这一特性,在实施攻击时非常有用。

其他常见文件包含函数

jsp: ava.io.file()、java.io.filereader()……

asp: include file、include virtual…….

漏洞危害

  1. 服务器安全风险:攻击者可以利用文件包含漏洞在服务器上执行任意代码,从而控制系统。这可能导致数据泄露、数据篡改、拒绝服务攻击等严重后果。
  2. 数据泄露:攻击者可以利用文件包含漏洞访问敏感数据,如用户个人信息、信用卡信息等。这可能导致严重的隐私泄露和金融欺诈。
  3. 网站可用性下降:攻击者可以利用文件包含漏洞使网站无法正常运行,从而影响用户体验和业务运营。
  4. 法律责任:如果网站未能及时修复文件包含漏洞,导致用户遭受损失,网站可能会面临法律责任。

漏洞利用

漏洞的典型特征

变量的值为一个页面:

  •  ?page=a.php
  • ?home=b.html

  • ?file=content.........

漏洞利用的前提条件 

  1. web 应用采用 include 等文件包含函数,并且需要包含的文件路径是通过用户传输参数的

    方式引入;

  2. 用户能够控制包含文件的参数,被包含的文件可被当前页面访问;

漏洞获取 webshell 的前提条件

1.攻击者需要知道文件存放的物理路径;

2.对上传文件所在目录拥有可执行权限;

3.存在文件包含漏洞;

分类

文件包含漏洞可以分为RFI(远程文件包含)和LFI(本地文件包含漏洞)两种。

而区分他们最简单的方法就是php.ini 中是否开启了allow_url_include。如果开启 了我们就有可能包含远程文件。

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

2、远程文件包含RFI(Remote File Include)(需要php.ini中allow_url_include=on allow_url_fopen = On)

在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2之后就默认为Off。

截断包含

%00截断

PHP内核是由C语言实现的,因此使用了C语言中的一些字符串处理函数。在连接字符串时,0字节(\x00)将作为字符串的结束符。所以在这个地方,攻击者只要在最后加入一个0字节,就能截断file变量之后的字符串?file=../../../../../../../../../etc/passwd%00(需要 magic_quotes_gpc=off,PHP小于5.3.4有效)

目录长度限制截断

Win 下可以利用 256 位截断,linux 下则需要 4096 位截断,最大值长度之后的字符将被丢弃。 而利用"./"的方式即可构造出超长目录字符串。

php伪协议文件包含

常见的 php 伪协议:

file://协议,php://协议,php://filter ,php://input ,zip://, bzip2://, zlib://协议,data://协议,http:// & https:// 协议

file://协议

  • 条件:

    • allow_url_fopen:off/on
    • allow_url_include :off/on
  • 作用:
           

             用于访问本地文件系统,通常用来读取本地文件的且不受allow_url_fopen和allow_url_include的影响。
            include()/require()/include_once()/require_once()参数可控的情况下,如导入为非.php文件,则仍按照php语法进行解析,这是include()函数所决定的。

 php://协议

  • 条件:

    • allow_url_fopen:off/on
    • allow_url_include :仅php://input php://stdin php://memory php://temp 需要on

zip://, bzip2://, zlib://协议

  • 条件:

    • allow_url_fopen:off/on
    • allow_url_include :off/on
  • 作用:zip:// & bzip2:// & zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx 等等。

 data://协议

  • 条件:

    • allow_url_fopen:on
    • allow_url_include :on
  • 作用:自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。

http:// & https:// 协议

  • 条件:

    • allow_url_fopen:on
    • allow_url_include :on
  • 作用:常规 URL 形式,允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源。通常用于远程包含。

防护措施

1、包含目标的参数过滤

1) 文件名后缀固定:在包含的文件名前后加固定后缀;

2) 文件名过滤:白名单或者黑名单过滤;

2、路径限制

1) 目录限制,在用户提交的变量前增加固定的路径,限制用户可调用的目录范围;

2) 目录回退符过滤,避免回退符生效导致路径变化;

3、中间件的安全配置

1) Magic_quotes_gpc(5.4 以后被放弃用)

2) 限制访问区域:php.ini 中设置 open_basedir 来限制用户访问文件的活动范围

等;apache 也有相关配置

3) 设置访问权限:限制当前中间件所在用户的访问权限,例如;web 服务器独立

用户,并且只拥有访问目录和使用中间件的权限,从而有效避免越权访问其他文件;

常见系统默认路径

Windows 系统

C:\boot.ini                                                                   //查看系统版本

C:\windows\system32\inetsrv\MetaBase.xml            //IIS 配置文件

C:\windows\repair\sam                                              //存储 windows 系统初次安装的密码

C:\Program Files\mysql\my.ini                                  //mysql 配置

C:\Program Files\mysql\data\mysql\user.MYD         //Mysql root

C:\windows\php.ini                                                    //php 配置信息

Linux 系统 

/etc/passwd

/usr/local/app/apache2/conf/httpd.conf        //apache2 默认配置文件

/usr/local/app/apache2/conf/extra/httpd-vhosts.conf  //虚拟网站设置

/usr/local/app/php5/lib/php.ini            //PHP 相关配置

/etc/httpd/conf/httpd.conf                     //apache

/etc/php5/apache2/php.ini                  //ubuntu 系统的默认路径

日志默认路径 

/etc/httpd/logs/access_log 或者 /var/log/httpd/access_log        //apache+Linux 日志默认路径

D:\xampp\apache\logs\access.log

D:\xampp\apache\logs\error.log                                  //apache+win2003 日志默认路径

C:\WINDOWS\system32\Logfiles                              //IIS6.0+win2003 默认日志文件

%SystemDrive%\inetpub\logs\LogFiles                     //IIS7.0+win2003 默认日志文件

标签:文件,include,包含,url,简介,漏洞,php
From: https://blog.csdn.net/qq_74342020/article/details/139359384

相关文章

  • 代码审计(工具Fortify 、Seay审计系统安装及漏洞验证)
    源代码审计代码安全测试简介    代码安全测试是从安全的角度对代码进行的安全测试评估。(白盒测试;可看到源代码)    结合丰富的安全知识、编程经验、测试技术,利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷,在代码形成软件产品前将业务软件的安......
  • 静态库lib.a结构简介
    静态库文件是使用打包工具ar将一个或者多个可重定位的目标文件组成一个静态库文件,也可以看做是多个可重定位的目标文件的一个简单包装文件。1.静态库的生成假设我们要构建一个四则运算的而函数库(1)其源代码如下:[root@localhostliba]#catadd.cintadd(inta,intb)......
  • java检测字符串是否包含数字和字母
    在Java中,要检测一个字符串是否同时包含数字和字母,我们可以使用正则表达式(regex)或者通过遍历字符串并检查每个字符来实现。以下是两种方法的详细代码示例:1.方法一:使用正则表达式importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassStringChec......
  • 如何使用Rayder组织编排漏洞侦查和渗透测试工作流
    关于RayderRayder是一款针对漏洞网络侦查和渗透测试自动化工作流工具,该工具本质上是一个命令行工具,旨在帮助广大研究人员更轻松地组织、编排和执行漏洞侦查和渗透测试工作流。Rayder允许我们在YAML文件中定义一系列功能模块,且每个模块都由要执行的命令所组成。Rayder可以帮......
  • 如何使用PMKIDCracker对包含PMKID值的WPA2密码执行安全测试
    关于PMKIDCrackerPMKIDCracker是一款针对无线网络WPA2密码的安全审计与破解测试工具,该工具可以在不需要客户端或去身份验证的情况下对包含了PMKID值的WPA2无线密码执行安全审计与破解测试。PMKIDCracker基于纯Python3开发,旨在帮助广大安全研究人员恢复WPA2WiFi网络的预共......
  • Git 远程代码执行漏洞(CVE-2024-32002)复现
    Git远程代码执行漏洞(CVE-2024-32002)漏洞标题:Git远程代码执行漏洞(CVE-2024-32002)影响版本:version2.45.*<2.45.1version2.44.*<2.44.1version2.43.*<2.43.4version2.42.*<2.42.2version2.41.*<2.41.1version2.40.*<2.40.2version2.39.*<2.39.4修复......
  • ECShop电商商城wholesale_flow接口处存在SQL注入漏洞
    ECShop电商商城wholesale_flow接口处存在SQL注入漏洞FOFA语句app="ECSHOP"app="ECSHOP"&&icon_hash="-164358497"SQL注入漏洞POST/wholesale_flow.php?step=ajax_update_cartHTTP/1.1Host:User-Agent:Mozilla/5.0(WindowsNT10.0;Win64......
  • 函数式API简介
    函数式API简介转自:https://www.cnblogs.com/miraclepbc/p/14312152.html导入相关库以及数据加载相关库导入:importtensorflowastffromtensorflowimportkerasimportmatplotlib.pyplotasplt%matplotlibinline数据加载:fashion_mnist=keras.datasets.fashion_mni......
  • 用技术合法挖漏洞能有多少钱?年挖洞超过300个,奖金收入过百万
    挖洞能力是白帽子的核心能力,通过挖洞或参加实战攻防演习获取奖金收入,是白帽人才获取收入的重要方式。调研显示,我国近四成的白帽子年均奖金收入在3000元以下,约六成在1万元以下。而年均奖金超过10万元的白帽子约占17.0%,约0.4%的白帽子年奖金收入超过100万元。按照补天平台目......
  • [转帖]关于OpeSSL生成自签名证书-包含完整证书链生成(全网最全)
    https://www.cnblogs.com/linziping/p/16857167.html  相信大家对证书已经有一个比较直关的了解,这里只讲如何创建自签证书,关于openssl的使用或者证书的相关内容,此处不做过多讲解废话不多说,直接上手。一般证书分为根证书,中间证书,用户证书三级,也可以是根证书和......