文件包含漏洞 の 原理总结及例题
什么是文件包含漏洞:
PHP文件包含漏洞的产生原因:
在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。最常见的就属于本地文件包含(Local File Inclusion)漏洞了。
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。
程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,
而在JSP、ASP、http://ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。
在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。
#
文件包含漏洞有哪几种类型:
1.本地文件包含漏洞
LFI,能够打开并包含本地文件的漏洞
本地包含顾名思义,就是在网站服务器本身存在恶意文件,然后利用本地文件包含使用
2.远程文件包含漏洞
RFI,远程文件包含漏洞
远程文件包含就是调用其他网站的恶意文件进行打开
常见的几个文件包含函数:
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():如文件包含被运行了,则不会运行第二次
最简单的漏洞代码:
<?php include($_GET[file]);?>
#
php://伪协议 >> 访问各个输入/输出流:
用法:
php://filter/read=convert.base64-encode/resource=[文件路径]
含义:
php://filter是一种元封装器,设计用于"数据流打开"时的"筛选过滤"应用,对本地磁盘文件进行读写。简单来讲就是可以在执行代码前将代码换个方式读取出来,只是读取,不需要开启 **allow\_url\_include;**
~~~~~~~~~~~~~~~~~~~
00X1 本地文件包含 ( 以include()为例 )
首先创建两个文件,1.txt 和 11.php 如下:
创建完后并对 11.php 进行访问,并且传入参数:
输出结果:
看吧,成功了,这就是简单的本地文件包含,但如果将1.txt 内的内容换成一句换木马,再用菜刀连接一下,那是不是就可以获取shell了,这里小编就不演示了,留给你们慢慢琢磨。。。。。。
00x2 远程文件包含
要实现远程文件包含则需要 对 php.ini 进行一些配置
即allow_url_fopen和allow_url_include要为On,也就是打开状态。
如下图:
设置成功后记得要保存并且重新启动一下
好了现在可以开始演示远程包含了,其实和文件包含相差无几,只是把包含的换成外网链接一下就好了
~~~~~~~~~~~~~~~~~~~
bugku中文件包含的相关题目de题解
https://blog.csdn.net/dyw_666666/article/details/82389457
https://blog.csdn.net/dyw_666666/article/details/83900349
https://blog.csdn.net/dyw_666666/article/details/83960600
https://blog.csdn.net/dyw_666666/article/details/82390096
~~~~~~~~~~~~~~~~~~~
参考链接
https://blog.csdn.net/qq_42133828/article/details/83927058
https://blog.csdn.net/qq_40424939/article/details/80641480
还没有评论,来说两句吧...