Web渗透:文件包含漏洞(part.1)

news2024/11/16 2:40:56

"文件包含漏洞"(File Inclusion Vulnerability)是一种常见的Web应用程序漏洞,攻击者可以通过这个漏洞在目标系统上包含或执行任意文件。主要有两种类型的文件包含漏洞:

  1. 本地文件包含(Local File Inclusion, LFI):攻击者利用LFI漏洞可以包含并执行服务器上的本地文件,攻击者可以读取系统上的敏感文件,甚至可能执行代码。

  2. 远程文件包含(Remote File Inclusion, RFI):攻击者利用RFI漏洞可以从远程服务器上包含并执行文件,这通常用于注入恶意代码,以便获取目标系统的控制权。

常见场景:
1. 动态页面加载

应用程序通过用户输入的参数来加载不同的页面或模板。这种场景下,如果没有正确验证和过滤用户输入,就会产生文件包含漏洞。

2. 配置文件包含

应用程序通过配置文件来包含不同的设置文件。如果这些配置文件的路径可以由用户控制且未进行适当验证,就可能产生漏洞。

3. 动态语言文件包含

应用程序根据用户的语言偏好加载不同的语言文件。如果语言文件的路径可以被用户控制,且没有进行适当的验证,可能产生漏洞。

4. 图片或媒体文件包含

一些应用程序允许用户上传文件,并在之后的某个地方包含这些文件进行处理。如果文件名或路径可以由用户控制且未验证,可能产生漏洞。

5. 调试或日志文件包含

开发者在调试或记录日志时,可能会动态包含文件以便于查看。如果这些文件的路径可以由用户控制且未验证,可能产生漏洞。

接着我们也是使用pikachu靶场中的文件包含漏洞进行演示,阐述文件包含漏洞的原理与利用;本文我们主要对本地文件包含漏洞的利用与产生原理以及文件上传漏洞与文件包含漏洞结合利用的方式进行阐述,远程文件包含留在下一篇中说明。

示例:
Ⅰ.本地文件包含

1.打开靶场相关页面,可以看到一个下拉选项的框框;选择某个选项,页面中就会显示对应球星的信息;但是通过URL可以看出来页面在进行数据请求的时候,还访问了另外一个php代码(file1.php)。

因为访问的php文件的文件名后面有一个数字1,那么此时我们通过BP的爆破功能针对访问的php文件名进行爆破尝试,将file后的数字设置为变量进行爆破。

此处的payload选择可以选择BP自带的Number模式,进行数字输入:此处我们选择的数字范围为1-10

至此获得到file1-file10.php请求的响应页面:此时发现请求file1-file5.php文件时显示的都是球星的照片,但是在请求file6.php时显示了类似账户密码信息:

file7.php后的文件则都是报错:

但是从报错的内容中我们可以看到当前访问的页面文件在服务器中的绝对路径,那么这个时候我们就可以尝试读取当前服务器中的任意文件;如这个时候我们可以根据报错给出的信息找到服务器中的hosts文件(笔者这边是使用Windows进行靶场搭建);一下则是hosts文件对于当前页面文件的相对路径:

C:/../../../../../Windows/System32/drivers/etc/hosts

这个时候我们进行访问的url为:

http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=C:/../../../../../Windows/System32/drivers/etc/hosts&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

查看效果:此时hosts文件中的内容就被读取显示值页面中。

这个时候我们根据代码剖析一下漏洞产生原理:

$html='';
if(isset($_GET['submit']) && $_GET['filename']!=null){
    $filename=$_GET['filename'];
    include "include/$filename";//变量传进来直接包含,没做任何的安全限制
//     //安全的写法,使用白名单,严格指定包含的文件名
//     if($filename=='file1.php' || $filename=='file2.php' || $filename=='file3.php' || $filename=='file4.php' || $filename=='file5.php'){
//         include "include/$filename";
​
//     }
}

这段代码涉及用户输入的文件名并包含该文件的操作;如果用户通过GET请求传递了一个文件名,代码会尝试包含位于include目录下的相应文件。

include "include/$filename";:包含位于include目录下的文件,文件名由用户通过GET参数提供;如果$filename的值是test.php,那么实际执行的代码将是include "include/test.php";

在许多编程语言中,特别是PHP中,文件包含功能常用于动态加载代码或模板。然而,如果不加以注意,文件包含功能可能会导致严重的安全漏洞,主要的文件包含漏洞产生的相关函数:

①include:用于包含并运行指定文件;如果文件不存在或包含错误,脚本会继续执行,并发出一个警告。
②require:与include类似,但如果文件不存在或包含错误,脚本会终止执行并发出一个致命错误。
③include_once:include_once函数与include相同,但如果文件已包含过,则不会再次包含。
④require_once:require_once函数与require相同,但如果文件已包含过,则不会再次包含。

include和require函数报错的区别:

如果include执行错误则后续代码还会继续执行;而若是require执行错误后续代码不会继续执行了;include和require的使用效果:

include "C:/../../../../../Windows/System32/drivers/etc/hosts";
require "C:/../../../../../Windows/System32/drivers/etc/hosts";

在require和include包含某个文件后,则会将文件内容进行输出(若是php文件则会直接执行);以下为执行效果:

文件上传+文件包含GetShell

若是文件包含漏洞与文件上传漏洞同时存在,则可以轻松getshell了;因为此时我们可以将php木马转化为图片的形式以绕过相关过滤,并且可以指定图片马的路径进行包含最后GetShell;此时我们将靶场中的这两个漏洞进行结合利用:

1.上传图片马:生成图片马并进行上传;在这里我们先来说一下如何生成片马;首先我们要准备一个木马代码文件和一张图片文件:

接着我们使用copy命令将木马代码嵌入图片中:

copy /B 头像.jpeg + /A 新建文本文档.txt PiTr.jpg

这串命令会将将 头像.jpeg新建文本文档.txt 合并为一个新文件 PiTr.jpg头像.jpeg 按二进制模式复制,这意味着每个字节都被准确复制;新建文本文档.txt 按ASCII模式复制,这意味着它将按文本模式处理,但由于目标是图像文件,文本内容将被附加到图片文件的末尾。

接着我们进行上传,顺便抓个包:

可以看到木马代码就在文件末尾,接着我们就需要将此时的图片马所在文件拼接出来:

http://127.0.0.1/pikachu/vul/unsafeupload/uploads/PiTr.jpg

接着根据上面爆破file1-10.php时获得到的报错路径推测相对于文件包含漏洞页面代码的相对路径;以下就是报错得到的路径:

根据相同的目录名我们基本上可以推测出此时图片马在服务器中的路径为:

D:/phpstudy_pro/www/pikachu/vul/unsafeupload/uploads/PiTr.jpg

那么此时的相对路径就是:

../../unsafeupload/uploads/PiTr.jpg

接下去来到文件包含漏洞中修改包含文件路径为图片马的相对路径,此时我们访问的url为:

http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/PiTr.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

这个时候的页面效果:页面中出现了乱码,实际上就是图片中的标识头。

这个时候我们就可以直接通过WebShell连接工具进行连接GetShell了;

至此漏洞利用成功。

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

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

相关文章

Django(根据Models中模型类反向生成数据库表)—— python篇

一、数据库的配置 1、 django默认支持 sqlite,mysql, oracle,postgresql数据库。 sqlite:django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3 mysql:引擎名称&#xff…

克服指标管理痛点,实现数据价值最大化

在当下的企业管理中,由于数据量的激增,管理方式逐渐从基于经验转向基于数据。在此过程中,我们能够通过数据探查业务情况、分析数据,从而获取更优的决策支持数据。这通常通过数据报表或分析平台来实现,对于临时性场景&a…

基于YOLOv10的车辆统计跟踪与车速计算应用

文章目录 1、前言2、安装运行环境3、下载v10s模型4、代码实现5、代码详读5.1、导入必要的库5.2、识别车辆5.3、读取视频文件5.4、创建视频写入器5.5、车速计算5.6、统计车辆5.7、应用跟踪5.8、视频处理 6、目标检测系列文章 1、前言 在智能交通系统(ITS&#xff09…

Does a vector database maintain pre-vector chunked data for RAG systems?

题意:一个向量数据库是否为RAG系统维护预向量化分块数据? 问题背景: I believe that when using an LLM with a Retrieval-Augmented Generation (RAG) approach, the results retrieved from a vector search must ultimately be presented…

提升用户转化率秘诀!Xinstall的H5拉起应用技术让您领先一步!

在移动互联网时代,App的推广和运营面临着诸多挑战。其中,H5页面如何高效、便捷地拉起应用,成为了一个亟待解决的问题。今天,我们就来谈谈如何利用Xinstall品牌,轻松解决这一痛点,提升用户体验,助…

ONLYOFFICE桌面编辑器8.1:办公体验新升级

引入 当今时代办公三件套已经成为我们日常生活中不可或缺的一部分了,但是说到办公软件不知道大家会首先想到那些产品 office 亦或是 WPS。最近也发布了 8.1 新版本,更新了一些新功能今天我们就来评测评测。 文章目录 引入一、ONLYOFFICE 是什么&#xff…

java基于ssm+jsp 仓库智能仓储系统

1管理员功能模块 管理员登录,通过填写用户名、密码等信息,输入完成后选择登录即可进入智能仓储系统 ,如图1所示。 图1管理员登录界面图 智能仓储系统 ,在智能仓储系统可以查看个人中心、公告信息管理、员工管理、供应商管理、商…

大模型技术的应用场景

大模型技术(Large Language Model,LLM)是指具有大量参数和训练数据的神经网络模型,它能够学习语言的统计规律,并生成与人类书写的文本相似的文本。大模型技术在近年来取得了重大进展,并开始在各种领域得到应…

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用

react18 中使用@reduxjs/toolkit 1.安装依赖包 yarn add @reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹,然后创建 index.js 文件。 import {configureStore } from "@reduxjs/toolkit"; import {counterReducer } from "./feature…

OpenCloudOS开源的操作系统

OpenCloudOS 是一款开源的操作系统,致力于提供高性能、稳定和安全的操作系统环境,以满足现代计算和应用程序的需求。它结合了现代操作系统设计的最新技术和实践,为开发者和企业提供了一个强大的平台。本文将详细介绍 OpenCloudOS 的背景、特性…

抖音营销新策略:MessageBox与HubSpot集成,引领企业获客新潮流

在全球数字化浪潮中,抖音以其独特的短视频形式、庞大的用户群体和高度互动性,成为了企业出海战略中不可或缺的一环。抖音营销不仅仅是简单的内容发布和互动,它更是一种深度策略和创新思维的体现。今天将深入探讨抖音营销的核心价值、应用场景…

git基本使用(二):git分支的操作命令

Git 的多分支管理是指在同一个仓库中创建和管理多个分支,每个分支可以独立开发,互不干扰。分支是 Git 中的一种强大功能,允许开发人员同时在多个不同的功能、修复或实验上工作,而不会影响主分支或其他分支。通过多分支管理&#x…

svn怎么新建分支,切换分支

在当前分支下,点svn右键,选择分支/标记 在选择远端地址时,点右边更多选项,打开远端版本库。找到对应的分支上级位置,点击确定 填写新分支名称,我这儿是将分支建在了branches下,分支名称为V1.1 填…

SD-WAN解决多云环境的挑战

随着SD-WAN成为远程用户访问基于云的应用程序的主要途径,促使越来越多的部署多云环境以优化性能的企业、IT专业人员选择支持安全、低延迟且易于管理的SD-WAN技术。与此同时,SD-WAN供应商和云服务供应商之间的合作,有助于跨多个云供应商轻松管…

车载信息安全:技术要求,实验方法

目录 1. 技术要求 1.1 硬件安全要求 1.2 通信协议与接口安全要求 1.2.1 对外通信安全 1.2.2 内部通信安全 1.2.3 通信接口安全 1.3 操作系统安全要求 1.3.1 操作系统安全配置 1.3.2 安全调用控制能力 1.3.3 操作系统安全启动 1.3.4 操作系统更新 1.3.5 操作系统隔离…

架构师篇-5、架构语言-ArchiMate

内容摘要: TOGAF内容元模型TOGAF架构语言ArchiMate3ArchiMate实践案例分享 TOGAF内容框架【核心内容元模型】 作为一个通用且开放式的标准,TOGAF需要采用一种非常灵活的方式来对其内容元模型进行定义,从而使得不同的企业可以根据自身需要对…

实施医院无纸化签署服务的案例说明

随着技术的发展,电子签署服务在医疗行业中的应用越来越广泛。本文将介绍一个医院实施无纸化签署服务的案例,包括其核心功能、实施过程和预期效果。 医院全院无纸化签署服务平台 该平台专为医院设计,支持医护人员、患者知情文书以及管理工作…

面试-collection体系

1.整体collection体系图 2.集合List和Set (1)ArrayList和LinkedList区别 我们知道,通常情况下,ArrayList和LinkedList的区别有以下几点: 1. ArrayList是实现了基于动态数组的数据结构(可以实现扩容,实现方式是建立一个新的数组,再…

Adobe Acrobat编辑器最新版下载安装 Adobe Acrobat版本齐全!

功能强大,Adobe Acrobat无疑是PDF文档处理领域的翘楚。这款软件集多种PDF文档处理功能于一身,不仅使得用户可以轻松地编辑PDF文档,更能轻松应对转换和合并等多种需求。 在编辑功能上,Adobe Acrobat的表现尤为出色。无论是添加文字…

shark云原生-日志管理体系-filebeat

文章目录 1. deploy 文件1.1 RBAC1.2. DaemonSet1.2.1. Elasticsearch 连接信息1.2.2. Volume 1.3. ConfigMap1.3.1. 日志路径1.3.2. 日志事件输出目标 2. 在控制平面节点上运行Filebeat3. 查看输出3.1. 关于处理器 processors 4. 日志收集配置4.1. 手动指定日志收集路径4.2. 自…