前言
今天遇到了一题,也是关于php伪协议的,而在此之前学习了php://filter
有水文章的嫌疑
关于php://input
上面filter既然能读文件,肯定还能写文件,这就可以利用input将数据POST过去,即php://input是用来接收post数据的
官方介绍:
php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype=”multipart/form-data” 的时候 php://input 是无效的。
使用
使用条件
碰到file\_get_contents()
就要想到用php://input绕过,因为php伪协议也是可以利用http协议的,即可以使用POST方式传数据
使用方法
url后面?file=php://input
数据利用POST传过去
特例
如果php.ini里的allow_url_include=On(PHP < 5.30)
,就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去一句话,如<?php phpinfo();?>
,即可执行;
实例
遇到相关题目有可能会继续补充,持续更新~
题源:CG-CTF
题目:http://chinalover.sinaapp.com/web23/
查看源码
<!--$file = $_GET['file'];
if(@file_get_contents($file) == "meizijiu"){
echo $nctf;
}-->
前面提过了file_get_contents()
是可以通过php://input
绕过的
bp抓包
- 提交方式改为POST
- url后面加上
?file=php://input
- 提交数据”meizijiu”,使其满足
== "meizijiu"


声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
迷失的老鼠
本文地址: php://input
本文地址: php://input