原创: Archerx 合天智汇
1
php://input协议
第一个例子
flag.php
test1.php
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r'))=== 'this is test'){
echo"success\n";
echo$flag;
}
else{
echo"error";
}
看上面php代码可知当读取文件的内容是thisis test时才显示flag,我们并不知道那个文件有这个内容,我们可以使用php://这个协议php://input可以得到原始的post数据,访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行,如下操作来绕过:
使用条件:
allow_url_fopen:off/on
allow_url_include:on
第二个例子
php://input实现代码执行
test1.php改为如下
$a= $_GET["a"];
include($a);
注:只在php5.2.17 下测试成功,其他均出现报错,原因未知。
php://filter/convert.base64-encode/resource=
看另外一个代码