欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件包含漏洞原理分析

程序员文章站 2022-05-27 15:41:50
...

转载自:https://zhuanlan.zhihu.com/p/25069779

文件包含漏洞原理分析

 

文件包含这个漏洞,用我自己的话来说就是程序员在网站设计中,为方便自己在设计构架时,使用了一些包含的函数,就像'文件包含'这几个字的字面意思一样,在文件中,包含一个文件。

我在总结这篇文章的时候看了,其他人总结的,感觉别人总结的很是详细,就像一开始我只认为包含只有PHP代码中才存在,后来我再整理复习的时候,才发现,包含这个漏洞在各大语言中,都存在的,只不过现在大部分网站都是PHP网站,所以存在这个漏洞的几率大一点,好了不废话了,我开始整理了。

文件包含

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。


程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。


几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,
而在JSP、ASP、http://ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。


在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。

常见的函数

  • PHP

 

include() , include_once() , require_once() , fopen() , readfile() ....

  • jsp/Servlet

ava.io.file() , java.io.filereader() ....

  • asp

include file , include virtual ....

就先列这些把,我们主要以PHP为例子,来讲解文件这个漏洞。

文件包含漏洞,分为本地包含,和远程包含。

本地包含故名思议,就是在网站服务器的本身存在恶意文件,然后本地包含使用。

远程包含,就是调用其他网站的恶意文件进行打开。

下面来先说说,常见PHP包含函数的意思:

include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行
require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本
include_once()和require_once():若文件中代码已被包含则不会再次包含

我们主要以第一个为例子,include()这个函数,本地包含。

首先先搭建环境,我先写了一个简单的存在include()这个函数的PHP代码,用 id来当接受值。

 

文件包含漏洞原理分析

然后在同目录下,创建一个txt文件,然后写个代码,在include()这个函数接受过来的都会以PHP代码来处理。

 

文件包含漏洞原理分析

看吧,是同一个文件目录下。

 

文件包含漏洞原理分析

 

我打开浏览器,进行本地包含测试。

 

 

文件包含漏洞原理分析

看吧,包含成功了,输出了 shiyan ,也就是我的昵称,哈哈!

 

那么是不是说,我把那个c.txt的文件内容,写成我的一句话,是不是就可以拿shell了?

 

文件包含漏洞原理分析

简单的替换成我的一句话,然后开始连我的菜刀看看,能不能成功。

 

文件包含漏洞原理分析

好吧,成功了,这就是本地包含,大家发现了没有,我包含的文件不管什么格式,都是以该语言执行的,这里就是PHP代码执行。

下面我开始说说远程包含这个例子。

 

远程包含,要保证php.ini中allow_url_fopen和allow_url_include要为On,也就是打开状态。

我了个擦类,,,我光打开 allow_url_include 我打开了三遍,就是一直远程包含不成功,,,我看了下 allow_url_include 状态,一直是off,我还很TM纳闷,后来我想开了,我没重启下,,,,擦了!!!!

 

文件包含漏洞原理分析

 

这是关闭状态。

 

文件包含漏洞原理分析

我把它给打开了,但是它就显示没打开,然后我就又......

 

文件包含漏洞原理分析

我就又.......

 

文件包含漏洞原理分析

再又......

 

文件包含漏洞原理分析

 

还是显示的没打开,我就怒了,后来仔细一想,我是不是没有重启的原因,,,然后就重启了下,,,,就打开了。。。。。tmd。。。我这脑筋。。。。。

 

文件包含漏洞原理分析

好了,开始演示远程包含!!!哈哈!!!

 

我就不多演示了,反正和本地包含差不多,只不多把包含的东西换成外网的链接就行了,我就以一张图概括远程包含这个原理。

 

文件包含漏洞原理分析

 

总结:

文件包含的原理,就是这么个意思,但是确实很危险的漏洞,想想除了能 getshell, 我们还能利用这个漏洞干很多事情了,这里就不一一举例。