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了;

至此漏洞利用成功。

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

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

相关文章

Python学习打卡:day17

day17 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day17121、Python 操作 MySQL 基础使用pymysql创建到 MySQL 的数据库链接执行 SQL 语句执行非查询性质的SQL语句执行查询性质的SQL语句 122、Pyth…

全局mixins

一、文章由来 在开发过程中发现在钩子函数位置直接使用dicts就能直接绑定数据了,由此溯源发现了自己的盲区 二、局部使用 // myMixin.js文件 var myMixin {created: function () {this.hello()},methods: {hello: function () {console.log(hello from mixin!)…

隐秘而又复杂的恶意软件:SSLoad

SSLoad 是一种隐秘的恶意软件,主要通过钓鱼邮件打开突破口,收集各种信息再回传给攻击者。近期,研究人员发现 SSLoad 通过诱饵 Word 文档投递恶意 DLL 文件,最终部署 Cobalt Strike。另一种攻击方式是利用钓鱼邮件诱导受害者到 Azu…

JVM专题十三:总结与整理(持续更新)

图解JVM JVM与Java体系结构 JVM垃圾回收算法 JVM垃圾回收器 图解JVM主要是放了前面12个章节的我们给大家画的图,做了整体的汇总,大家可以根据图区回忆我们所说的内容,查缺补漏。 实战经验 1、项目中数据量多少,QPS与TPS最高多少…

展开说说:Android列表之RecyclerView

RecyclerView 它是从Android5.0出现的全新列表组件,更加强大和灵活。用于显示列表形式 (list) 或者网格形式 (grid) 的数据,替代ListView和GridView成为Android主流的列表组件。可以说Android客户端只要有表格的地方就有RecyclerView。 RecyclerView 内…

技术速递|Visual Studio Code 的 .NET MAUI 扩展现已正式发布

作者:Maddy Montaquila 排版:Alan Wang 今天,我们非常高兴地宣布 .NET MAUI VS Code 扩展插件结束了预览阶段,并将包含一些期待已久的新功能 - 包括 XAML IntelliSense 和 Hot Reload! 什么是 .NET MAUI 扩展插件&…

鸿蒙开发Ability Kit(程序框架服务):【ServiceAbility切换】 组件切换

ServiceAbility切换 FA模型中的ServiceAbility对应Stage模型中的ServiceExtensionAbility。Stage模型下的ServiceExtensionAbility为系统API,只有系统应用才可以创建。因此,FA模型的ServiceAbility的切换,对于系统应用和三方应用策略有所不同…

4A的「A」会变成AI的「A」吗?

戛纳国际创意节上,广告集团WPP的全球CEO Mark Read 和英国CEO Karen Blackett 解释了WPP如何应对AIGC所带来的「威胁」。同时,Mark Read 与Elon Musk对话,讨论「技术创新的变革力量,人工智能如何重塑创造力、商业和社会&#xff0…

Duix - 硅基数字人SDK

简介 Introduction DUIX(Dialogue User Interface System)是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源,开发者可自行接入多方大模型、语音识别(ASR)、语音合成(TTS)能力,实现数字人实时交互,并在Android和iOS多终端一键部署,让每个开发者可轻松…

基于长短时记忆网络LSTM的TE过程故障诊断(MATLAB R2021B)

实验所用 TE 仿真过程的数据集是网上公开的数据集,该数据集中的训练集和测试集分别包含 20 种故障工况和一种正常工况数据,其中所采集的每个样本信号包含 41 个测量变量和 11 个控制变量,所以每个时刻采集到的样本有 52 个观测变量。 TE 仿真…

IO流

文件 什么是文件 文件流 常用的文件操作 创建文件对象相关构造器和方法 public class FileCreate {public static void main(String[] args) {}//方式 1 new File(String pathname)//根据路径构建一个File对象Testpublic void create01() {String filePath "e:\\news1.…

TMGM:ASIC撤销禁令,TMGM强化合规、重启差价合约服务

TMGM作为差价合约(CFDs)与保证金外汇交易领域的领航者,安全、合规、高效被奉为我集团的终身使命。澳大利亚证券和投资委员会(ASIC)已正式撤销了早前针对TMGM差价合约业务实施的临时止损令。这一误会的解除,…

使用North自部署图床服务

图床 图床可以把图片转为链接,从而方便我们书写、分享博客,目前图床主要分为以下几类: 利用 Git 仓库存储对象存储(OSS、COS、七牛云等)免费公共图床(SM.MS、聚合图床、ImgTP、Postimage等) 但上述图床都…

Zabbix 监控系统部署

Zabbix 监控系统部署 Zabbix是一个企业级开源分布式监控解决方案,可监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的运行状况和完整性。 Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(转换、拆分、分割、连接、替换、查找、“Like“)

字符串分割,文末示例(文末代码3附有源码) 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

活动|华院计算受邀参加2024全球人工智能技术大会(GAITC),探讨法律大模型如何赋能社会治理

6月22至23日,备受瞩目的2024全球人工智能技术大会(GAITC)在杭州市余杭区未来科技城隆重举行。本届大会以“交叉、融合、相生、共赢”为主题,集“会、展、赛”为一体,聚“产、学、研”于一堂。值得一提的是,…

C#——命名空间详情

命名空间 在 C# 中,可以将命名空间看作是一个范围,用来标注命名空间中成员的归属,一个命名空间中类与另一个命名空间中同名的类互不冲突,但在同一个命名空间中类的名称必须是唯一的。 定义命名空间 定义命名空间需要使用 namesp…

【设计模式】行为型-策略模式

策略模式,如春风吹过,随心所欲,变幻无穷,每一丝风都是一种选择。 文章目录 一、订单处理二、策略模式三、策略模式的核心组成四、运用策略模式五、策略模式的应用场景六、小结推荐阅读 一、订单处理 场景假设:有一个…

容器技术-docker5 (1)

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml,其中定义的每个服务可以通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。 注意如果使用 build 指令,在 Dockerfile 中设置…

vscode刷LeetCode算法题环境配置

首先,下载nodejs 在vscode中安装LeetCode插件 安装好进行配置 选择leetcode-cn 填上刚才下载node.exe的路径 完成之后重启一下vscode 重启之后登陆LeetCode 完成之后就可以看到题目了 点击 code now 就可以开始刷题了