初识文件包含 – 作者:hahali

原理

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

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

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

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

涉及包含文件的危险函数

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

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

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

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

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

本地文件包含(LFI)

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

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

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

图片[1]-初识文件包含 – 作者:hahali-安全小百科

writeup

打开题目地址看到题目

图片[2]-初识文件包含 – 作者:hahali-安全小百科

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

图片[3]-初识文件包含 – 作者:hahali-安全小百科

base64解码,查看到flag

图片[4]-初识文件包含 – 作者:hahali-安全小百科

远程文件包含(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.com 2020-07-24 09:38:00 by: hahali

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论