何为文件包含漏洞?

文件包含漏洞介绍

Posted by 张嘉伟 on 2019-12-09        本文总阅读量

文件包含,原本是将重复使用的函数写入单个文件中,供程序员自已或协同开发者调用,无需重复编写,增加程序的灵活性,提高开发效率。

前言

方便与安全永远是一把“双刃剑”,提供方便的同时,也为攻击者打开方便之门。攻击者利用文件包含漏洞,调用构造的恶意文件,达到攻击目的。

文件包含漏洞主要出现在脚本语言中,如jsp、asp、php等,但漏洞数量居多的是php web应用。

根据调用文件的位置,分为本地文件包含(LFI)和远程文件包含(RFI)。

下面将介绍,促成该漏洞达到攻击目的几种途径。

“上传”兄伸出援手

web应用存在文件包含漏洞,还存在上传、注入漏洞,利用后者,将够早的文件上传至服务器,利用前者进行调用,完成攻击。

记录类文件的助力

1、包含access.log文件。Apache运行时,会生成两个文件:access.log(访问记录日志)和error.log(错误日志),前端访问URL中,我们可以写入php脚本,比如:

1
http://www.xxx.com/<?php.phpinfo();?>

访问会报错,同时会将php内容写入到访问记录日志中,此时我们在前端再包含访问记录日志,就可以看到脚本被解析的结果了。

该方法利用难点:

  • 攻击者需要知道访问记录日志的存储路径。
  • 脚本符号转义。“<”和“>”在URL访问时,可能会被后台转码。

2、CVE-2018-12613。这个漏洞是在phpMyAdmin 4.8.0-4.8.1中存在,利用session文件记录,实现文件包含。请看示例:

写入语句,登录phpMyAdmin后,在sql一栏中写入下面语句:

1
SELECT "<?php phpinfo();?>"

执行效果如下图所示:

取得session值。

访问session文件。在index.php后构造以下访问链接:

1
index.php?target=db_sql.php%253f../../../../../../../../var/lib/php/sessions/sess_******

其中“sess_”后面内容就是此次访问的session值。