文件包含漏洞

文件包含漏洞



前言

本次将从一下几点学习文件包含漏洞。


漏洞描述

攻击者可以利用任意文件包含漏洞,读取文件,执行代码,对服务器造成危害。

程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。

程序开发人员都希望代码更加灵活,所以会把被包含的文件的路径设置为变量,来进行动态调用(包含),但正是由于这种灵活性,如果被包含文件的路径客户端可控,造成任意文件包含漏洞。

几乎所有的脚本都会提供文件包含的功能,文件包含漏洞在PHP 的Web 应用中居多,在JSP/ASP/http://ASP.NET 程序中比较少。

漏洞原理

文件包含是程序设计的基础功能之一,能够减少代码量,提高开发效率。但是使用PHP文件包含功能时,有类似于以上测试代码的设计,实现了动态包含,就有产生文件包含漏洞的风险。如果实现动态包含的参数,web 应用没有进行严格的校验,浏览器客户端用户可以影响控制被包含文件的路径,就会产生任意文件包含漏洞。

漏洞场景

程序开发人员都希望代码更加灵活,所以会把被包含的文件的路径设置为变量,来进行动态调用(包含),但正是由于这种灵活性,如果被包含文件的路径客户端可控,造成任意文件包含漏洞。
几乎所有的脚本都会提供文件包含的功能,文件包含漏洞在 PHP 的 web 应用中居多在 JSP、ASP、ASP、NET 程序中比较少。

漏洞评级

高危

漏洞危害

  1. web服务器的文件被外界浏览导致信息泄露;

  2. 脚本被任意执行,典型影响如下:

  • 篡改网站;

  • 执行非法操作;

  • 攻击其他网站;

漏洞验证

metinfo 5.0.4 文件包含漏洞复现

在这里插入图片描述

PHP文件包含语句

语句区别
include多次包含,多次执行;如果包含失败,脚本产生警告,继续运行
include_once()多次包含,一次执行;如果包含失败,脚本产生警告,继续运行
require()多次包含,多次执行;如果包含失败,脚本产生错误,结束执行
require_once()多次包含,一次执行;如果包含失败,脚本产生错误,结束执行

相关配置

//php.ini
allow_url_fopen = On/Off 	 	 //通过远程方式打开软件
allow_url_include = On/Off		 //通过远程方式包含文件

源码文件

在这里插入图片描述在这里插入图片描述
这两个文件中可以看出存在文件包含漏洞,图一中的require_once $module存在动态调用,进入到图二查看,这里给了一个值7,如果等于7的话就不会进入别的if语句中执行,我们这里直接赋值?fmodule=7

验证

?fmodule=7&module=../../phpinfo.php

在这里插入图片描述

漏洞利用

  • 根据会无视拓展名的作用上传包含木马的图片
  • 猜测路径读取 敏感文件
  • 利用PHP防伪协议读取PHP源码
  • 修改数据宝为POST请求利用I/O流的input方法执行PHP恶意代码

漏洞防御

  • 建议开发人员尽量少使用动态包含
  • 过滤被包含的文件路径
  • 将php.ini中的allow_url_include参数设置为Off
  • 限定文件的访问范围

典型案例

metinfo 5.0.4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值