php伪协议

php伪协议是ctf中的一个考点,目前比较熟悉的伪协议有php://filter, php://input, data://text/plain, file://,后续补充。

要成功应用伪协议需要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()?>

 

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() ?>

 

php://filter协议

在双off的情况下也可使用,读取文件并进行显示或写入

名称描述
resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流。
read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
<;两个链的筛选列表>

任何没有以 read=write= 作前缀 的筛选器列表会视情况应用于读或写链。

使用方法:php://filter/read=convert.base64-encode/resource=文件名(对文件进行base64编码并读取显示)  如

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

  参考地址:https://www.leavesongs.com/PENETRATION/php-filter-magic.html

       https://www.cnblogs.com/dubhe-/p/9997842.html

       https://www.freebuf.com/column/148886.html

posted @ 2020-02-08 11:18  single-dog  阅读(3702)  评论(0编辑  收藏  举报