php 伪协议-伪合约读取任意php文件源码的base64内容

2023-08-27 0 6,630 百度已收录

【ACTF2020新生大赛】包含

打开原型,发现页面上只有一个提示超链接:

打开超链接php 伪协议,发现页面并没有什么特别之处:

注意到url中出现了?file=flag.php,考虑是PHP伪合约漏洞,因此构造了payload:

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

php 伪协议-伪合约读取任意php文件源码的base64内容

使用burpsuite的repeater模块加载构造好的payload:

发现响应中返回了一串字符串,经过base64解码php 伪协议,得到flag:

补充知识:PHP伪合约

php 伪协议-伪合约读取任意php文件源码的base64内容

php://协议是PHP中特有的一个约定,可以作为中间流来处理其他流并读取任意文件。

php:// 包含几个合约:

协议角色

php://输入

可以访问请求的原始数据的只读流。 在POST请求中,访问POST的数据部分。 当 enctype="multipart/form-data" php://input 无效时。

php 伪协议-伪合约读取任意php文件源码的base64内容

php://输出

只写数据流,允许以与 print 和 echo 相同的方式写入输出缓冲区。

php://fd

允许直接访问指定的文件描述符。 例如 php://fd/3 指的是文件描述符 3。

php://内存 php://临时

php 伪协议-伪合约读取任意php文件源码的base64内容

类似数据流的文件包装器,允许读取和写入临时数据。 两者之间唯一的区别是 php://memory 总是将数据存储在显存中,而 php://temp 在内存量达到预定义的限制(默认为 2MB)后将其存储在临时文件中。 临时文件的位置的确定方式与 sys_get_temp_dir() 相同。

PHP://过滤器

一个元包装器,专为打开数据流时的过滤器过滤应用程序而设计。 对于一体化文件函数(例如 readfile()、file() 和 file_get_contents())特别有用,这些函数在读取流内容之前没有机会应用其他过滤器。

这里使用的 php://filter 合约:

用于读取源码并进行base64编码输出。 参数说明如下:

资源= 此参数是必需的。 它指定了你要过滤和过滤的数据流;

read= 该参数是可选的。 可以设置一个或多个过滤器名称,用管道符(|)分隔;

write= 该参数是可选的。 可以设置一个或多个过滤器名称,并用竖线字符 (|) 分隔。

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

这种构造方法很常见,用于获取文件的源代码。

文件包含错误

文件包含漏洞的原因是,当通过PHP函数导入文件时,由于传入的文件名没有经过正确的校准,而操作了非预期的文件,可能会导致非预期的文件泄露甚至恶意代码注入。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 伪协议-伪合约读取任意php文件源码的base64内容 https://www.wkzy.net/game/167219.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务