【Web篇】(6.3) ❀ 12. 文件包含 ❀ FortiWeb 攻防演练

  【简介】File Inclusion,即文件包含漏洞,开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。


  文件包含

  文件包含漏洞,是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

  文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。

  文件包含漏洞涉及到php常见包含文件函数包括:

  include() :当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。

  include_once() :功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。

  require() :require() 与 include() 的区别在于 require() 执行如果发生错误,函数会输出错误信息,并终止脚本的运行 。使用 require() 函数包含文件时,只要程序一执行,立即调用文件,而 include() 只有程序执行到函数时才调用 。require() 在php程序执行前执行,会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。

  require_once() :它的功能与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次。

  安全等级 - Low

  将DVWA的安全等级切换到Low。

    ① 选择【File Inclusion】,显示文件包含页面,点击【View Source】,查看源代码。

    ② 从源代码可以看出,没有任何过滤手段,直接显示page。

    ③ 点击【file1.php】,后台执行了file1.php,返回了我们的IP地址。

    ④ 点击【file2.php】,后台执行了file2.php,返回了一段提示信息。

    ⑤ 点击【file3.php】,后台执行了file3.php,返回了帐号名、IP地址、浏览器信息以及从哪个网址跳转过来的等等。

    ⑥ 由于low级别的代码对包含的文件没有进行任何的过滤,这导致我们可以进行包含任意的文件。当我们包含一个不存在的文件 error.php 时,可以看到发生了报错,第一行报错表示找不到指定的文件,第二行报错是因为没有指定的文件,文件包含时发生错误 ,并且暴露了网站的完整路径。

    ⑦  将文件名替换成 /etc/shadow ,显示没有这个文件,说明服务器系统不是Linux。

     ⑧ 将文件名替换成绝对路径 C:\xampp\htdocs\DVWA\php.ini,成功读取了服务器的php.ini文件。

      ⑨ 将文件名替换成相对路径 ..\..\..\..\..\xampp\htdocs\DVWA\php.ini,成功读取了服务器的php.ini文件。

  安全等级 - Medium

  将安全等级升级为中级。

    ① 从源代码可以看出,代码使用 str_replace() 函数对 http:// 和 https:// 进行了过滤,防止了远程包含漏洞的产生,也过滤了 ../ 和 ..\ 防止了进行目录切换的包含。

    ② 但是使用 str_replace() 函数进行过滤是很不安全的,因为可以使用双写绕过。将文件名替换成相对路径 ..././..././..././..././..././xampp\htdocs\DVWA\php.ini ,成功读取了服务器的php.ini文件。

     ③ 将文件名替换成绝对路径 C:\xampp\htdocs\DVWA\php.ini,仍然可以成功读取服务器的php.ini文件。

  安全等级 - High

  将安全等级升级为高级。

     ① 从源代码可以看出,使用了 fnmatch() 函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

     ② 只能包含file开头的文件,看似安全,但依然可以利用file协议绕过防护策略。将文件名替换成相对路径 file:///C:\xampp\htdocs\DVWA\php.ini ,成功读取了服务器的php.ini文件。

  安全等级 - Impossible

  将安全等级升级为不可能。

     ① 从源代码可以看出,代码使用了白名单机制进行防护,简单粗暴,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

  FortiWeb 防护

  FortiWeb可以阻止这一类的攻击。

     ① 访问192.168.1.128,也就是经过FortiWeb保护的DVWA,安全选择Low,选择File Inclusion。

     ② 一般.htaccess文件可以用来留后门和针对黑名单绕过,将上传文件名替换成 /../../admin/.htaccess,FortiWeb VM弹出阻止页面。

     ③ 在FortiWeb VM的【日志和报表】-【日志访问】-【攻击】,可以根据消息ID查找到消息日志,详细的介绍了文件包含被阻止的信息。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞塔老梅子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值