php伪协议
(0)

在网上找了找,想整理一下

php伪协议

  • file://

用于访问本地文件系统(绝对路径、相对路径、网络路径)

不受allow_url_fopen与allow_url_include的影响

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

http://www.xx.com?file=file:///etc/passswd

  • php://
    作用:

访问输入输出流



 1. php://filter

作用:

用于读取源码,并进行base64编码输出
条件:
readfile()、file()、file_get_contents()、include()

例如在 allow_url_include = on 时服务器上有个文件叫 index.php,且存在文件包含漏洞,这个时候就能用 php 伪协议直接把文件显示出来。

?file=php://filter/read=convert.base64-encode/resource=index.php

/read=convert.base64-encode/ 表示读取的方式是 base64 编码后,resource=index.php 表示目标文件为index.php。如果不进行base64编码传入,index.php就会直接执行,看不到文件中的内容。

可以套一层协议([BSidesCF 2020]Had a bad day)

 2. php://input

作用:

用于执行post数据中的php代码(读取没有处理过的POST数据)

使用条件:

include()、include_once()、file_get_contents()

示例:

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

POST数据:<?php phpinfo()?>

注意:

enctype="multipart/form-data"的时候php://input无效

 3. php://output

作用:

一个只写的数据流,允许以print和echo一样的方式写入到输出缓冲区

  • data://
    作用:

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

使用:

?file=data://text/plain;base64,xxxxx(base64编码后的数据)
  • allow_url_fopen和allow_url_include
    allow_url_fopen和allow_url_include会影响到fopen和include等函数对于伪协议的支持。

从PHP5.2开始allow_url_include就默认为off,而allow_url_fopen一直是on的

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

不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。
data://需满足两个同时开启才能使用。

PHP版本<=5.2 可以使用%00进行截断。

参考链接:
https://www.cnblogs.com/linfangnan/p/13535097.html
https://www.cnblogs.com/ichunqiu/p/10683379.html

本文为作者hackerbo.com发布,未经允许禁止转载!
上一篇 下一篇
评论
暂无评论 >_<
加入评论