文件包含漏洞原理

什么是文件包含漏洞:

PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。最常见的就属于本地文件包含(Local File Inclusion)漏洞了。

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


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


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

文件包含漏洞有哪几种类型:

1.本地文件包含漏洞

本地包含顾名思义,就是在网站服务器本身存在恶意文件,然后利用本地文件包含使用

2.远程文件包含漏洞

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

常见的几个文件包含函数

php:

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

jsp/Servlet:

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

asp:

include  file,   include  virtual  .................

主流文件包含php一些函数的含义:

include() :执行到include()才包含文件,找不到包含文件只会产生警告,还会接着运行后面的脚本

require(): 只要程序一运行就会包含文件,找不到包含文件则会产生致命错误,并且脚本运行终止

include_once()和require_once():如文件包含被运行了,则不会运行第二次

00X1 本地文件包含 ( 以include()为例 )

首先创建两个文件,1.txt 和 11.php  如下:

创建完后并对  11.php 进行访问,并且传入参数:

输出结果:

看吧,成功了,这就是简单的本地文件包含,但如果将1.txt 内的内容换成一句换木马,再用菜刀连接一下,那是不是就可以获取shell了,这里小编就不演示了,留给你们慢慢琢磨。。。。。。

00x2  远程文件包含

要实现远程文件包含则需要 对 php.ini 进行一些配置

即allow_url_fopen和allow_url_include要为On,也就是打开状态。

如下图:

设置成功后记得要保存并且重新启动一下

好了现在可以开始演示远程包含了,其实和文件包含相差无几,只是把包含的换成外网链接一下就好了

文件包含原理也就是这么个样子,虽然操作简单,但其实是一个很危险的一个漏洞,除了可以利用他拿到shell

还可以利用她做很多事情。。。。。。

参考链接:

https://zhuanlan.zhihu.com/p/25069779

https://chybeta.github.io/2017/10/08/php%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E/

https://thief.one/2017/04/10/2/

猜你喜欢

转载自blog.csdn.net/qq_42133828/article/details/83927058