首页 > 其他分享 >文件包含漏洞详解(超级详细)

文件包含漏洞详解(超级详细)

时间:2024-04-11 11:01:22浏览次数:32  
标签:文件 include 包含 超级 漏洞 详解 日志 php

目录

什么是文件包含?

文件包含漏洞产生的原因

文件包含函数

include()

include_once()     

require()

require_once()     

本地文件包含

日志文件包含

什么是日志文件

如果没有access.log文件

日志文件包含实验

远程文件包含漏洞

PHP伪协议

php://filter伪协议包含文件漏洞复现

php://input伪协议文件包含漏洞复现

data伪协议文件包含漏洞复现

文件包含漏洞的防御


什么是文件包含?

        程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。

        服务器执行PHP文件时,可以通过包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件。

文件包含漏洞产生的原因

        为了代码更灵活,通常会把被包含的文件设置为变量 ,进行动态调用 ,从而导致客户端可以调用任意文件 ,造成文件包含漏洞。动态包含的文件路径参数,客户端可控 。web应用对用户的输入没有进行过滤或者严格过滤就带入文件包含函数中执行

文件包含函数

include()

找不到被包含的文件时只产生警告 ,脚本将继续执行

include_once()     

此语句和 include() 语句类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含

require()

找不到被包含的文件时会产生致命错误,并停止脚本

require_once()     

此语句和 require()语句类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含

文件包含的文件都会被解析为php

本地文件包含

日志文件包含

什么是日志文件

        当我们安装Apache后,Apache会自动给生成两个日志文件,这两个日志文件分别是访问日志access_log和错误日志error_log(在windows上是access.log和error.log)Access.log为访问日志,记录所有对apache服务器进行请求的访问。

如果没有access.log文件

日志文件包含实验

第一步:打开DVWA靶场文件包含模块

第二步:尝试通过DVWA靶场包含日志文件

第三步:向日志文件中写入“phpinfo”

第四步:打开access.log日志文件发现phpinfo被写入日志文件中

第五步:再次包含日志文件,phpinfo被解析

远程文件包含漏洞

        如果PHP的配置选项allow_url_include、allow_url_fopen状态为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含(RFI)

尝试包含http://baidu.com/robots.txt

PHP伪协议

php://filter伪协议包含文件漏洞复现

第一步:访问文件包含靶场file1.php文件

第二步:使用php://filter/read=convert.base64-encode/resourec=file1.php读取file1.php源码

第三步:将读取到的源码使用火狐插件进行base64解码得到file1.php文件源码

第四步:解码后的file1.php的源码

php://input伪协议文件包含漏洞复现

第一步:使用burp suite软件抓包使用php://input伪协议将一句话木马写入

第二步:将数据包发送后,观察到一句话木马被包含

data伪协议文件包含漏洞复现

第一步:使用data://text/plain,<?php phpinf();?>直接执行

第二步:使用data://text/plain,<?php system(dir);?>执行系统命令

第三步:使用data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==进行base64加密执行

文件包含漏洞的防御

PHP:配置php.ini关闭远程文件包含功能(allow_url_include = Off)

严格检查变量是否已经初始化。

建议假定所有输入都是可疑的,尝试对所有输入提交可能可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现../之类的目录跳转符。

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

不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。

在发布应用程序之前测试所有已知的威胁。

路径限制:限制被包含的文件只能在某一文件夹内,一定要禁止目录跳转字符,如:“../”;

包含文件验证:验证被包含的文件是否是白名单中的一员;

尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include("head.php");,不要把被包含的写成变量。

标签:文件,include,包含,超级,漏洞,详解,日志,php
From: https://blog.csdn.net/weixin_58849785/article/details/137630067

相关文章

  • Log4J日志配置详解
    一、Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。1、LoggersLoggers组件......
  • Linux Shell:用户配置文件详解
    LinuxShell:用户配置文件详解在Linux系统中,用户配置文件扮演着至关重要的角色,它们定义了用户的操作环境,包括环境变量、别名、函数等。这些配置文件在用户登录时被读取和执行,以设置一个为用户量身定制的命令行环境。在这篇文章中,我们将详细介绍Linux中最常见的几种用户配置......
  • JavaScript处理异步循环的技术详解
    文章的更新路线:JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题(HTML基础知识和CSS基础知识已经更新完毕)正文使用async/await和Promise:优势:代码简洁,易读,适用于处理依赖关系较强......
  • 记录很久没用Ubuntu遇到的问题,并安装vulhub漏洞环境(Docker已装好)
    前景提要:之前有装过vulhub,但是今天想复现一下shiro反序列化漏洞(CVE-2016-4437),查看我下载的vulhub,没有找到。就打算更新(顺便提一嘴,更新命令为:gitpull,要先关闭docker),但是我一更新就VMware就弹出“对文件“……\VirtualMachines\Ubuntu64位\Ubuntu64位-000001.vmdk”的操作失......
  • 视频处理的利器,ffmpeg-python库详解与应用示例
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料在数字媒体的时代,视频处理成为了一项重要的技能。无论是剪辑、转码、还是添加特效,都需要强大的工具来处理视频素材。Python作为一门功能强大的编程语言,在视频处理领域也有着广......
  • C++ 获取数组大小、多维数组操作详解
    获取数组的大小要获取数组的大小,可以使用sizeof()运算符:示例intmyNumbers[5]={10,20,30,40,50};cout<<sizeof(myNumbers);结果:20为什么结果显示为20而不是5,当数组包含5个元素时?这是因为sizeof()运算符返回类型的大小(以字节为单位)。要找出数组有多少......
  • 后端开发之SpringBootWeb入门介绍及简单测试 2024详解
    SpringBoot介绍官网spring.ioSpring是最流行的Java框架Spring发展到今天已经形成了一种开发生态圈Spring提供了若干个子项目每个项目用于完成特定的功能企业开发框架之间的整合会很容易所以我们选择Spring全家桶基于基础的SpringFramework框架但是配置繁琐入门......
  • C语言分支和循环详解
    在程序中基础的三种结构为顺序结构,选择结构(分支结构),循环结构,几乎所有日常可见的事均可分为这三种结构或者这三种结构的组合.今天,我们就来详细了解一下关于C语言分支和循环语句.在正式介绍之前呢,先给大家提及一下C语言的控制语句:C语言共有9种控制语句,可以分为3类:......
  • 关于抽象类和接口(详解)
    关于抽象类和接口一、抽象类1.语法规则2.注意事项3.抽象类的作用二、接口1.语法规则2.实现多个接口一、抽象类有些方法是抽象的,没有实际工作的方法,我们可以把它设计成一个抽象方法,比如draw(画画),不能实例化对象。包含抽象方法的类我们称为抽象类(abstractclass......
  • Vue生命周期详解(八个钩子)
    定义:    一个Vue实例从开始创建一直到销毁的整个过程,称之为生命周期作用:    Vue框架的内置函数,随着组件的生命周期阶段的不同,会自动执行的函数,并且在特定的阶段做某件事,只需要调用相应的钩子函数即可。        我们可以通过使用生命周期(钩子)函......