php协议

当题目中用到file_get_contents()函数时,要想到用协议来读取文件内容

封装协议:

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

前面是url     ?后面是封装协议(中间一块都是一样的)               resource后面是要访问的地址。

 

filter伪协议可以套一层参数,如(本题中包含woofers,meowers,index三个中的一个即可):

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

?file=php://filter/read=index/convert.base64-encode/resource=flag (顺序可以变换)

 

 

伪协议:

要成功应用伪协议需要php.ini文件的allow_url_fopen      默认开启

                allow_url_include    默认关闭

file://伪协议

此协议可以在双off的情况下使用,用于访问本地文件

使用方法:file://文件绝对路径和文件名    如http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

 

data://text/plain协议

此协议需要在双on的情况下才能使用,很常用的数据流构造器,将读取后面base编码字符串后解码的数据作为数据流的输入

使用方法:data://text/plain;base64,base64编码字符  如http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

     data://text/plain,字符   如http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?> plain后写要传入的内容。

 

php://input协议

此协议需要allow_url_include为on,可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。

使用方法:php://input,然后post需要执行的数据 如http://127.0.0.1/cmd.php?file=php://input    然后在post中<?php phpinfo() ?>

 

有张图可以看下

 

posted @   heartbeat111  阅读(171)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示