freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

初识文件包含
2020-07-24 09:38:00

原理

在通过PHP的相应函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

文件包含漏洞的形成,需要满足两个条件:

1、用户能够控制这个动态变量

2、include()等函数通过动态变量的方式引入需要包含的文件

涉及包含文件的危险函数

include():包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。

require():包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。

include_once():和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次。

require_once():和 require 类似,不同处在于 require_once 只导入一次。

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

本地文件包含(LFI)

能够读取或执行包含本地文件的漏洞,称为本地文件包含漏洞

下面将用一道CTF题作为例子讲解

题目来源:南京邮电大学网络攻防训练平台

writeup

打开题目地址看到题目

这道题非常简单。根据提示是文件包含,而且是本地文件包含,所以直接在URL后添加?file=php://filter/read=convert.base64-encode/resource=index.php,读取到base64加密的index.php文件

base64解码,查看到flag

远程文件包含(RFI)

如果php.ini的配置选项allow_url_fopen,allow_url_include都为ON的话,文件包含函数是可以加载远程文件的,这种漏洞就被称为远程文件包含。利用这个漏洞,可以直接执行任意命令。

allow_url_fopen 是否允许打开URL文件

allow_url_include 是否允许引用URL文件

文件包含的各种写法

include $_GET[]

include $_GET[].”.inc”

include “./“.$_GET[]

include “./include”.$_GET[]

include “./include”.$_GET[].”.inc”

PHP伪协议

在文件包含漏洞中,可以使用PHP伪协议来构造语句进行漏洞测试

file协议

当存在某个用户可控制、并得以访问执行的输入点时,可以尝试输入file://去获取本地磁盘文件

使用方法:

www.test.com?file://C:windows/1.txt

php://filter

对本地磁盘文件进行读写

使用方法:

www.test.com?file=php://filter/read/convert.base64-encode/resource=./index.php

php://input

使用方法:

www.test.com?file=php://input[POST]<?php phpinfo();?>

data://

使用方法:

www.test.com?file=data://text/plain,<?php phpinfo();?>

文件包含漏洞的危害

1、敏感信息泄露

2、获取webshell

3、任意命令执行

文件包含漏洞修复

1、设置白名单

2、过滤危险字符

3、设置文件目录

4、关闭危险配置

# 文件包含
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者