zoukankan      html  css  js  c++  java
  • PHP伪协议

    PHP封装协议

    PHP有很多内置URL风格的封装协议,这类协议fopen(),copy(),file_exists(),filesize()等文件系统函数所提供的功能类似。常见协议如下:

    file://          访问本地文件系统

    http://         访问HTTP(s)网址

    ftp://           访问FTP(s)URLs

    php://         访问输入/输出流(I/O streams)

    zlib://          压缩流量

    data://        数据(RFC 2397)

    ssh2://        Secure Shell 2

    expect://      处理交互式的流

    glob://          查找匹配的文件路径

    //摘录自《Web安全深度剖析》

    这个封装协议多用于文件包含漏洞

    php伪协议的分类

    伪协议是文件包含的基础,理解伪协议的原理才能更好的利用文件包含漏洞。

    php://input

    php://input代表可以访问请求的原始数据,简单来说POST请求的情况下,php://input可以获取到post的数据。

    使用条件:include( )、include_once( )、file_get_contents( )

    比较特殊的一点,enctype=”multipart/form-data”的时候 php://input 是无效的。

    用法举例:

    • 使用file_get_contents函数的伪协议包含有个经典的例子;
    • 可以使用fputs文件输入流直接服务器某一存在的目录下写入文件。

     

    php://output

    php://output 是一个只写的数据流,允许你以print和echo一样的方式写入到输出缓冲区。

    php://filter(重点)

    php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用,也就是作为一种过滤器,可以使用在数据流产生的地方。

     php文档中,标准的定义是这样的:

    类似的过滤器还有string.rot13、string.strip_tags、zlib.deflate和zlib.inflate等等,目前只要知道convert.base64-encode就好了。

    URL 中包含点的常见形式

    ?file = xxx 或者 ?file = xxx.php

     

    allow_url_fopen和allow_url_include

    在测试了包含点存在包含漏洞以后,并不是都可以使用filter伪协议包含出源码的,因为allow_url_fopen和allow_url_include会影响到fopen和include等函数对于伪协议的支持。

    allow_url_include影响php://input的使用,若不打开则无法使用。

    当allow_url_fopen打开时,可以包含任意url。

    例如只打开allow_url_include时,只能包含远程文件和使用php://input

    举个例子

    题目链接:http://level3.tasteless.eu/

    题目直接给出了源码:

    根据提示,用php://input 伪协议读取php.ini

     

    找到SERVER["DOCUMENT_ROOT"],也就是网站的根目录,可以找到当前脚本的目录,如下:

    还可以看到一些文件包含的配置:

    • rfi是关闭的,也就是allow_url_fopen为Off;
    • allow_url_include开启,可以使用php://input伪协议来列出当前目录下的文件。

    payload:

     //摘录自i春秋博客园

    附上一题文件包含

    题目提示flag在index.php里,直接访问这个页面并没有,但是看到url

     

    我们直接通过封装协议去读取index.php的源代码

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

     这样我们会得到base64后的源码,我们去解码一下

     由此我们得到flag



  • 相关阅读:
    cytoscape-d3-force api
    Python基础编程 模块的引入与定义
    更改Ubuntu内核版本
    Jupyter Notebook默认路径修改
    YJZH 前端部署记录 CentOS+Nginx+Vue
    dotnet core webapi centos 服务自启动
    Linux修改时区
    空间数据实战(1)——MySQL
    记录window.sessionStorage的一个小坑
    ElementUI默认表单项el-form-item间距修改
  • 原文地址:https://www.cnblogs.com/N-schema/p/13197501.html
Copyright © 2011-2022 走看看