一、原理分析
文件包含漏洞是代码注入的一种。其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行,代码注入的典型代表就是文件包含(File inclusion)。文件包含可能会出现在jsp、php、asp等语言中。服务器通过函数去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。
准备工作:
PHP环境
为什么会造成文件包含漏洞?
利用PHP JSP JSP等函数
PHP:include() 、include_once()、require()、require_once()、fopen()、readfile()
JSP/Servlet:ava.io.file()、java.io.filereader()
ASP:include file、include virtual
如果未对功能进行过滤,就产生文件包含漏洞
实验案例1
我们使用PHP的include()函数,进行代码还原漏洞
直接上代码,使用GET请求
$file = $_GET['file'];
if (isset($file)) {
include($file);
}
然后我们就可以对任意文件进行访问,
例如我们访问我们目录下的sssss.php
直接可以把里面的内容输出出来
甚至是其他的网站的PHP也可以输出出来,我们在另一个端口的站点在建立一个PHP
而且是无视文本格式的,不管你是不是PHP文件,例如
假设别的网站有PHP信息泄露
如何查看另一个网站的PHP信息?
可以跨站访问到另一个网站上的文件
无视拓展名:
我们把PHP文件改成其他格式例如.dwd
我也不懂是啥类型的文件
总结:不管什么格式的文件都一样会执行PHP代码
那么我们试想一下,是否可以进行getshell呢?
假设我们有一个网站有上传漏洞,但我们并不能进行直接getshell,这时候我们就用到这漏洞来进行getshell
假如我们有个网站已经成功上传shell 了,但是无法运行,因为是其他格式的
那么我们可以通过文件包含漏洞来进行getshell
首先写入一句话木马
<?php eval($_POST['cmd']) ?>
成功访问不是PHP结尾的文件,
利用蚂剑看看能不能连接成功
getshell成功!!!
总结:
文件包含漏洞危害及其大,如有被利用不堪设想
解决方案
文件包含需要配置 allow_url_include=On(远程文件包含)、allow_url_fopen=On(本地文件包含) 。所以,我们可以将其关闭,这样就可以杜绝文件包含漏洞了。但是,某些情况下,不能将其关闭,必须进行包含的话,我们可以使用白名单过滤的方法,只能包含我们指定的文件。这样,就可以杜绝文件包含漏洞了