前言

今天遇到了一题,也是关于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"
说点什么
评论之后转圈圈也不用管,要批准之后才能显示,谢谢
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...