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

"文件包含漏洞"(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了;

至此漏洞利用成功。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[MySQL]购物管理系统—简略版

本文内容需以MySQL支持 特别感谢baidu comate AI提供的少量虚拟数据 0.建库(建立数据库——utf8字符集,utf8_general_ci排序规则) 1.此项目ER图如下 2.DDLDML(共九表,27数据) SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS goods; CREATE TABLE g…

计算机的错误计算(十四)

摘要 解读 GPU和CPU计算上的精度差异:GPU 的 3个输出的相对误差分别高达 62.5%、50%、62.5%。 例1. 计算下列两个矩阵的乘积: 显然,其结果为第一列: 这个结果是准确的。 例2. 已知上面 3 个矩阵是由下面代码产生或输出&…

HTML【重点标签】

一、列表标签 1.无序列表 父级别: 无序列表的标题 ----表示无序列表的整体,用于包裹li标签 子级别: 无序列表一行的内容 ----表示无序列表的每一项,用于包含一行的内容 语义:构建没有顺序的列表 特点:列…

C# YoloV8 模型效果验证工具(OnnxRuntime+ByteTrack推理)

C# YoloV8 模型效果验证工具(OnnxRuntimeByteTrack推理) 目录 效果 项目 代码 下载 效果 模型效果验证工具 项目 代码 using ByteTrack; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using Sys…

ACC:Automatic ECN Tuning for High-Speed Datacenter Networks 相关知识点介绍(一)

目录 ACC(Adaptive Congestion Control) 总结 结合 ACC 和 ECN ECN ECN(Explicit Congestion Notification) 静态 ECN 动态 ECN 对比 总结 FCT——flow completion time 具体解释 小鼠流和大象流 小鼠流(…

2024百度之星第二场-小度的01串

补题链接: 码蹄集 一道经典线段树板子题。 区间修改01置换,区间查询子串权值。 唯一区别,权值要求的是相邻字符都不同所需修改的最小字符个数。 我们在线段树节点上分别维护当前连续区间: 奇数位是0的个数(j0&…

ROS1通信机制——以topic为例

ROS1 的通信机制 ROS1是一个分布式框架,为用户提供多节点(进程)之间的通信服务。 ROS1通信时有一个中心节点(ROS Master),进行信息匹配等工作。 ROS1 的话题通信机制 通信链接:XML/RPC 信息传…

YOLOV8图像分割预测后输出mask图

训练一个yolov8后,用官方的预测脚本一般是: results model.predict(img_path, saveTrue, save_diroutput_folder) 运行此代码会直接在run里面生成一个文件夹,保存预测图像。如果要获取分割后的mask点,或mask的轮廓点&#xff0…

WIFI各版本的带宽

带宽的定义: 带宽在网络领域通常指信道带宽,即信号在频谱中占用的频宽,单位是MHz(兆赫)。在无线通信中,带宽越宽,能够传输的数据量越大,因此信道带宽直接影响着数据传输速率。WiFi标…

SKYDROID-C12—— 让美景近在眼前

C12是一款小型高清双光吊舱,使用新一代影像芯片,搭配高清无畸变摄像头,有效像素达到500万,拥有强悍的2K视频录制和拍照能力,支持数字变倍,随时随地捕捉清晰的图像,让远处美景近在眼前。

Clickhouse 的性能优化实践总结

文章目录 前言性能优化的原则数据结构优化内存优化磁盘优化网络优化CPU优化查询优化数据迁移优化 前言 ClickHouse是一个性能很强的OLAP数据库,性能强是建立在专业运维之上的,需要专业运维人员依据不同的业务需求对ClickHouse进行有针对性的优化。同一批…

【Android11】开机启动日志捕捉服务

一、前言 制作这个功能的原因是客户想要自动的记录日志中的报错和警告到设备的内存卡里面。虽然开发者模式中有一个“bug report” 会在/data/user_de/0/com.android.shell/files/bugreports/目录下生成一个zip包记录了日志。但是客户觉得这个日志很难获取到他们需要的信息&am…

Transformer教程之神经网络和深度学习基础

在当今的人工智能领域,Transformer已经成为了一个热门的词汇。它不仅在自然语言处理(NLP)领域取得了巨大的成功,还在计算机视觉等其他领域展现出了强大的潜力。然而,要真正理解Transformer,我们首先需要扎实…

希喂生骨肉冻干值得入手吗?拯救瘦弱、增强抵抗力最强主食测评!

希喂生骨肉冻干值得入手吗?很多小姐妹觉着自家猫咪太瘦了、体质不咋好,换季还敏感、掉毛、不吃东西,听说生骨肉冻干好吸收、营养好,可以改善体质、拯救瘦弱、增强抵抗力,为了图省事,开始盲入生骨肉冻干&…

Linux—进程与计划管理

目录 一、程序 二、进程 1、什么是进程 2、进程的特点 3、进程、线程、携程 3.1、进程 3.2、线程 3.3、携程 三、查看进程信息 1、ps -aux 2、ps -elf 3、top ​3.2、输出内容详解 3.2.1、输出第一部分解释 3.2.2、输出第二部分解释 4、pgrep 5、pstree 四、进…

The ‘textprediction‘ attribute will be removed in the future

页面标签不展示,明明是复制的,反复检查,眼睛都看瞎了,也没找到,最后还是看后台报错,The textprediction attribute will be removed in the future说什么要被废弃,但是好好的标签怎么会无缘无辜…

C语言 | Leetcode C语言题解之第191题位1的个数

题目: 题解: int hammingWeight(uint32_t n) {int ret 0;while (n) {n & n - 1;ret;}return ret; }

2024最新特种设备(锅炉作业)题库分享。

1.锅炉蒸发量大小是由(  )决定的。 A.压力的高低 B.受压元件多少 C.受热面积大小 答案:C 2.哪项不是自然循环的故障?( ) A.停滞 B.倒流 C.下降管带汽 D.上升管带汽 答案:D 3.水冷壁被现代大型锅炉广泛采用的是(  )。 A.光管水冷壁 B.膜…

龙迅LT8711V TYPE-CDP 1.2转VGA芯片,内置MCU,成熟批量产品

龙迅LT8711V描述: LT8711V是一种高性能的Type-C/DP1.2到VGA转换器,设计用于连接USB Type-C源或DP1.2源到VGA接收器。LT8711V集成了一个DP1.2兼容的接收器,和一个高速三通道视频DAC。此外,还包括两个CC控制器,用于CC通…

SherlockChain:基于高级AI实现的智能合约安全分析框架

关于SherlockChain SherlockChain是一款功能强大的智能合约安全分析框架,该工具整合了Slither工具(一款针对智能合约的安全工具)的功能,并引入了高级人工智能模型,旨在辅助广大研究人员针对Solidity、Vyper和Plutus智…