当前位置: 首页 > news >正文

网络安全之文件包含漏洞及其防护

一、引言

文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。举个例子,PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。接下来我们来看一下文件包含漏洞产生的原理。

二、文件包含漏洞的原理

其实原理就是由于在代码开发的过程中,有时候会遇到相同的代码,不想重复输入,就将代码单独写在一个文件里面,当遇到的时候就直接调用该文件进行运行,而这种方式就会导致客户端可以调用其他的恶意文件,通过恶意文件造成文件包含漏洞。

2.1常见的文件包含函数

PHP:include() 、include_once()、require()、require_once()
JSP/Servlet:ava.io.file()、java.io.filereader()
ASP:include file、include virtual

2.2 怎么理解呢?

就比如PHP中的include()函数,这个函数在A页面php使用了,那么A页面可以接收另一个php文件B,然后将其显示在A文件php中,也就是B文件被包含在A文件

代码如下A.php

<?phpinclude B.php;
?>

2.3 如何利用漏洞呢?

例如代码:A.php

<?phpinclude $_GET['test'];
?>

也就是访问A.php页面,可以通过url传入一个参数test,如果这个test是一个文件,就可以被包含执行

http://www.xxx.com/A.php/?test=B.php

那使用者具备一定的计算机知识,并未按照要求在test传参数时传入B.php,他传入了其他的php文件,更有甚者传入一个系统敏感文件比如:/etc/password 那就有可能导致linux服务器的密码泄露

2.4 一些常见的敏感目录信息路径:

Windows系统:

C:\boot.ini //查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
C:\windows\repair\sam //存储Windows系统初次安装的密码
C:\ProgramFiles\mysql\my.ini //Mysql配置
C:\ProgramFiles\mysql\data\mysql\user.MYD //MySQL root密码
C:\windows\php.ini //php配置信息

Linux/Unix系统:

/etc/password //账户信息
/etc/shadow //账户密码信息
/usr/local/app/apache2/conf/httpd.conf //Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置
/usr/local/app/php5/lib/php.ini //PHP相关配置
/etc/httpd/conf/httpd.conf //Apache配置文件
/etc/my.conf //mysql配置文件

这些信息都非常的敏感,一旦泄露对生产系统的危害可想而知。

三、文件包含发现与利用

3.1 文件包含的发现

一些文件包含在url中显示的比较明显
比如:

http://www.xxx.com/index.php/?name=x.php

看到这样的url,我们可以认为这个index.php页面存在页面包含行为,但不一定就存在漏洞。
再比如:在POST的过程中传入了某些页面/文件,那么他也可能存在文件包含

3.2 文件包含漏洞的利用

这个漏洞其实是尝试出来的,还是以上面为例,这个php网站部署在windows系统的C盘下面,我们尝试通过文件包含去读取一些不一样的文件,比如读取C:\Windows\win.ini这样的系统文件

http://www.xxx.com/A.php/?test=…/…/…/Windows/win.ini

PS: 这里面具体要回退多少层很多是尝试出来的,跟具体部署很有关了
其实读取Linux的敏感文件和读取Windows的敏感文件的逻辑是一样的
文件包含中还有另外一种情况就是伪协议读取,下一次分享

四、如何防范和修复文件包含漏洞

对于文件包含漏洞的防护,有很多方式,主要有以下思路:
1、过滤用户输入
如果系统业务要求必须要使用文件包含,那么最好在后台将要包含的文件直接写死,这是最安全、最彻底的防护方案。如果必须要求包含的文件全部名称或部分名称由用户输入,也要做好检查。最好是模仿DVWA,使用白名单的方式,对用户的输入进行限制。这种方案也非常安全。如果这一点也做不到,那就必须对用户的输入进行一些过滤,比如过滤%0a、过滤…/等危险的字符(串)。
2、调整php参数配置
文件包含漏洞收到PHP配置文件中allow_url_fopen和allow_url_include两个参数影响,如果不是必须,可以考虑将这两个参数设置为Off。如果将allow_url_fopen参数设置为Off,这可以在一定程度上增强系统的安全性。
3、使用WAF等辅助防护工具
除了上述措施外,我们还可以使用WAF,来对系统的安全防护性能进一步提升。

五、小结

单纯看文件包含其实内容较少,利用也较简单,但是在真实环境中是对用户输入进行了过滤替换的,在使用漏洞就需要不断考虑如何绕过这些过滤条件。只要我们开发过程中对于使用了文件包含这些函数的时候,一定要严格对用户参数进行过滤,避免一时偷懒导致服务器被黑,其实最终难逃其就。如有还不太理解或有其他想法的小伙伴们都可以私信我或评论区打出来哟,如有写的不好的地方也请大家多多包涵。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring Boot 校验用户上传的图片文件
  • 安卓常见设计模式4------原型模式(Kotlin版)
  • 设备零部件更换ar远程指导系统加强培训效果
  • redis-cli 连接 sentinel架构的redis服务
  • 关于mac下pycharm旧版本没删除的情况下新版本2023安装之后闪退
  • 【AICFD案例教程】汽车外气动-AI加速
  • 一键创建PDF文档,高效管理您的文件资料
  • 202205(第13届)蓝桥杯Scratch图形化编程青少组(国赛_中级)真题
  • 【漏洞复现】BYTEVALUE智能流控路由器存在命令执行
  • DAY50 309.最佳买卖股票时机含冷冻期 + 714.买卖股票的最佳时机含手续费
  • with contextlib.suppress(ValueError)临时抑制指定的异常
  • LeetCode 17. 电话号码的字母组合 中等
  • 后端架构选择:构建安全强大的知识付费小程序平台
  • STM32C8T6实现微秒延时函数delay_us
  • linux rsyslog三种远程转发配置方式
  • 【前端学习】-粗谈选择器
  • 10个确保微服务与容器安全的最佳实践
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • js写一个简单的选项卡
  • Python3爬取英雄联盟英雄皮肤大图
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Vue2.0 实现互斥
  • 讲清楚之javascript作用域
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 通过git安装npm私有模块
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​马来语翻译中文去哪比较好?
  • #### go map 底层结构 ####
  • $forceUpdate()函数
  • (13)Hive调优——动态分区导致的小文件问题
  • (175)FPGA门控时钟技术
  • (21)起落架/可伸缩相机支架
  • (a /b)*c的值
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (差分)胡桃爱原石
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (六)vue-router+UI组件库
  • (南京观海微电子)——I3C协议介绍
  • (排序详解之 堆排序)
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一)80c52学习之旅-起始篇
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (一)基于IDEA的JAVA基础1
  • (转)linux 命令大全
  • (转)linux下的时间函数使用
  • ***检测工具之RKHunter AIDE
  • ./configure,make,make install的作用
  • .dwp和.webpart的区别
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8.0 发布到 IIS
  • .NET Micro Framework初体验(二)
  • .Net 应用中使用dot trace进行性能诊断