文件包含漏洞原理分析
Posted cagebird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件包含漏洞原理分析相关的知识,希望对你有一定的参考价值。
文件包含这个漏洞,用我自己的话来说就是程序员在网站设计中,为方便自己在设计构架时,使用了一些包含的函数,就像‘文件包含‘这几个字的字面意思一样,在文件中,包含一个文件。
我在总结这篇文章的时候看了,其他人总结的,感觉别人总结的很是详细,就像一开始我只认为包含只有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, 我们还能利用这个漏洞干很多事情了,这里就不一一举例, 我就总结个原理,其实我主要是我朋友现在催着我去驾校预约了,,,不扯了,赶紧把这个原理总结完了,我走了。。。
以上是关于文件包含漏洞原理分析的主要内容,如果未能解决你的问题,请参考以下文章
20179223《Linux内核原理与分析》第十一周学习笔记
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段