小菜无意中看到大牛的一篇文章,看后觉得很受益,所以就转载过来了。
之前只知道“include”语句是包含并运行指定文件,遇到的话也只是找上传点然后getshell。
看来这篇文章后,才知道还可以读取php文件的源代码,这样的话,就可以读取网站的配置文件了。
而且在allow_url_include=On 的情况下,还可以直接执行php代码。
原文:http://hi.baidu.com/casperkid/item/2baf952b13a9cd0e76272cb0
本地测试成功后,就简单描述如下了。
假设test.php文件存在文件包含漏洞,测试代码如下:
<?php include $_GET['page'];?>
然后,通过php://filter 读取php文件的源代码。
成功读取到phpinfo.php文件的源代码,然后在经base64-decode就可以了。
更多关于php://filter的信息,可以参考:http://php.net/manual/zh/wrappers.php.php
第二种情况,当allow_url_include = On的时候(默认情况下,是为off的),就可以包含远程文件,问题也就变得简单了。
不过这里作者提供的是另一种思路,即通过php://input和data url 直接动态执行php代码。
更多关于php://input的使用,请参考:http://php.net/manual/zh/wrappers.php.php
更多关于data url的介绍请参考:http://msdn.microsoft.com/en-us/library/cc848897%28v=vs.85%29.aspx