看图说话:文件包含(File Inclusion)漏洞示例

作为测试人员,我们常常听到“安全测试”这个词,但鲜有人真正做过安全测试。从我们的职责“保障质量”角度来说,说是一种“失职”也不为过。那么安全测试是什么,究竟怎么进行安全测试?希望本文能起到抛砖引玉的作用。

文件包含漏洞是什么?

出于工作效率的考虑,程序员编码时常将可重复使用的代码写入到单个的文件中,并在需要的时候将它们包含在特殊的功能代码中,这样被包含文件中的代码就会被解释执行。这就可能带来一个问题:如果没有针对代码中存在文件包含的函数入口做过滤,客户端(一般为浏览器)用户可以提交恶意构造语句到服务器端解释执行,从而导致恶意代码的执行及敏感信息泄露:因为文件包含不仅能够包含web文件目录中的一些配置文件(比如Web应用、数据库配置文件、config文件等),还可以查看到一些Web动态页面的源代码,为攻击者进一步挖掘web应用漏洞提供条件,甚至一旦与路径遍历漏洞相结合,还可能直接攫取目标系统的用户名与密码等文件。

几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP搭建的网站中居多。

在PHP编写的程序中都有一个配置文件php.ini,在里面可以开启一个参数allow_url_include(PHP5.2之后默认为Off),开启之后就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件。(~这里缺少一个例子~)

文件包含分为两类:

本地文件包含(LFI):当被包含的文件在服务器本地时,叫本地文件包含。

远程文件包含(RFI):当被包含的文件在第三方服务器时,叫远程文件包含。

跟文件上传漏洞的区别

在上一节中我们谈到了文件上传漏洞,这两者有什么区别呢?

文件包含漏洞:攻击者利用包含的特性,再加上应用本身对文件控制不严,最终造成了攻击者进行任意文件包含。包含进来的文件都以当前脚本文件解析,比如,我们当前测试系统是Apache加php环境,那么被包含进来的文件(比如图片、文本文档),都会被当做php脚本来解析。

文件上传漏洞:攻击者上传一个可执行的脚本文件,通过此脚本文件获得执行服务器端命令的功能。文件上传是否会产生漏洞关键在于服务器怎么来处理、解析这个文件。如果服务器处理的模式不够安全,那么就会导致严重的后果,即上传恶意的可执行文件以后,服务器端对此文件进行执行。

总结一下:文件包含和文件上传本身不是漏洞,但由于对包含进来的文件不可控,所以产生了文件包含漏洞。由于对上传文件的解析、处理不当导致了文件上传漏洞。

示例

1、以下为实际场景实验,打开靶机页面,使用URL http://10.13.80.42/DVWA-master/vulnerabilities/fi/?page=include.php,请注意这里的:“?=page”格式,类似的还有“?=file”、“?=home”:

2、编写文本文件,含有PHP脚本内容,保存至本地C盘根目录,文件名C:/FI_GET_INI.jpg:

3、在地址栏输入http://10.13.80.42/DVWA-master/vulnerabilities/fi/?page=C:/FI_GET_INI.jpg,图片格式文件内的脚本echo phpinfo()被执行,直接抛出服务器重要信息:

如何预防?

上面演示了File Inclusion文件包含漏洞执行恶意脚本并泄露服务器信息可能性,通常预防该漏洞常用的技巧包括:

  1. allow_url_include(PHP5.2开始默认为OFF)选项关闭(第3步返回信息中可以看到相关选项为ON状态)。
  2. 可执行脚本文件白名单限制(FI_GET_INI.jpg这个文件不在白名单内将不会被执行)。
  3. 超长字符串截断(给URL地址栏内构造文件包含路径和文件名制造麻烦,提高攻击门槛)。
  4. 防止服务器目录遍历(使用open_basedir 选现来指定一个目录,PHP将只访问该目录和该目录子目录,直接执行C盘根目录将不可能)。

作者:9016 來源:简书 说明:本文著作权归作者所有,本文发表已获作者授权,小编在原文基础上略有修改。

原文发布于微信公众号 - 软件测试经验与教训(udatest)

原文发表时间:2018-11-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序

在部署基于Rails的Web应用程序时,简单设计的应用程序服务器可以在几分钟内启动并运行。但是,如果您希望更好地控制服务器设置或想要尝试更灵活的新功能,那么使用...

15420
来自专栏Sorrower的专栏

内核必须懂(二): 文件系统初探

12150
来自专栏24K纯开源

VS2010下编译配置Boost_1.53

一、准备工作 1、下载最新版本的boost库.所在地址:boost_1_53_0.zip.官方推荐7z压缩格式的,因为其压缩效率更好,相应包的大小也比较小。 2...

34090
来自专栏幸山的专栏

精通yum配置以及问题解决

yum基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁...

1K00
来自专栏静晴轩

详解 Cookie 纪要

从事 Web 开发已有近17个月;在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感~差不多是了解一二,然而又非真切的明晰;这就使得再用的时...

35690
来自专栏烂笔头

Django 1.10中文文档-第一个应用Part1-请求与响应

目录[-] 在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点; 一个可以进行增删改查的后...

40650
来自专栏Netkiller

一次切割日志引发的血案

一次切割日志引发的血案 很多应用程序会产生日志,有些程序已经实现了日志切割,一般是每天一个文件。但有时这个切割并不能满足我们的需求,例如我们需要颗粒度更细的切割...

37290
来自专栏北京马哥教育

Linux 线程浅析

关于linux线程 在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实...

56670
来自专栏信安之路

bWAPP 玩法总结

bWAPP(buggy web Application)是一个集成了了常见漏洞的 web 应用程序,目的是作为漏洞测试的演练场(靶机),为 web 安全爱好者和...

7.4K10
来自专栏wblearn

我的博客搭建之git的使用

前天我的github博客搭建好啦,并在本地写了一篇文章<a href="https://wblearn.github.io/2016/12/23/one/"ta...

7610

扫码关注云+社区

领取腾讯云代金券