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.mzph.cn/news/862155.shtml

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

相关文章

C++ | Leetcode C++题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; class Solution { public:int rangeBitwiseAnd(int m, int n) {while (m < n) {// 抹去最右边的 1n n & (n - 1);}return n;} };

Linux CentOS 宝塔中禁用php8.2的eval函数详细图文教程

PHP_diseval_extension 这个方法是支持PHP8的, Suhosin禁用eval函数&#xff0c;不支持PHP8 一、安装 cd / git clone https://github.com/mk-j/PHP_diseval_extension.gitcd /PHP_diseval_extension/source/www/server/php/82/bin/phpize ./configure --with-php-config/ww…

Go语言学习:每日一练2

Go语言学习&#xff1a;每日一练2 目录 Go语言学习&#xff1a;每日一练2结构体零值数组切片映射指针 各个类型的零值一览 结构体 //定义 type Vertex struct {X, Y int } //使用 func main() { v1 : Vertex{1, 2} fmt.Println(v.X) //别的实例化方式 var v2 Vertex v2 : *new…

Node版本管理工具 fnm 安装使用

fnm 是一个基于 Rust 开发的 Node 版本管理工具&#xff0c;它的目标是提供一个快速、简单且可靠的方式来管理 Node.js 的不同版本。同时&#xff0c;它是跨平台的&#xff0c;支持 macOS、Linux、Windows。&#x1f680; Fast and simple Node.js version manager, built in R…

头歌资源库(18)接龙序列

一、 问题描述 二、算法思想 首先&#xff0c;我们需要判断一个数列是否是接龙数列。可以通过遍历数列的每一个元素&#xff0c;判断该元素的首位数字是否等于前一个元素的末位数字。如果所有元素都满足条件&#xff0c;则该数列是接龙数列。 接下来&#xff0c;我们需要计算…

行人检测技术:思通数科大模型在自动驾驶安全中的应用

在自动驾驶技术飞速发展的今天&#xff0c;行人检测已成为确保道路交通安全的关键技术之一。本文将探讨如何结合思通数科大模型和计算机视觉技术&#xff0c;实现在城市交通环境中对行人的高效检测&#xff0c;为自动驾驶车辆提供必要的行人安全保障。 引言 行人检测技术是利…

vue3用自定义指令实现按钮权限

1&#xff0c;编写permission.ts文件 在src/utils/permission.ts import type { Directive } from "vue"; export const permission:Directive{// 在绑定元素的父组件被挂载后调用mounted(el,binding){// el&#xff1a;指令所绑定的元素&#xff0c;可以用来直接操…

大模型推理知识总结

一、大模型推理概念 大多数流行的only-decode LLM&#xff08;例如 GPT-3&#xff09;都是针对因果建模目标进行预训练的&#xff0c;本质上是作为下一个词预测器。这些 LLM 将一系列tokens作为输入&#xff0c;并自回归生成后续tokens&#xff0c;直到满足停止条件&#xff0…

【PL理论深化】(8) Ocaml 语言:元组和列表 | 访问元组中的元素 | 列表中的 head 和 tail | 基本列表操作符

&#x1f4ac; 写在前面&#xff1a;本章我们将探讨 OCaml 中的元组&#xff08;tuple&#xff09;和列表&#xff08;list&#xff09;&#xff0c;它们是函数式编程语言中最常用的数据结构。 目录 0x00 元组&#xff08;Tuple&#xff09; 0x01 访问元组中的元素 0x02 列表&…

沉淀强化镍基合金660大螺丝的物理性能

沉淀强化镍基合金660大螺丝&#xff0c;是一种高性能的工程材料&#xff0c;其在极端环境中展现了优异的稳定性和耐用性。以下&#xff0c;我们将深入解析其主要的物理性能。 首先&#xff0c;该合金螺丝的密度为7.99g/cm&#xff0c;这意味着它具有较高的质量密度&#xff0c;…

APM Profile 在系统可观测体系中的应用

引言 应用程序性能分析&#xff08;Application Performance Management&#xff0c;APM&#xff09;是一个广泛的概念&#xff0c;涉及应用程序运行时各种性能指标的监测、诊断和优化。在可观测体系建设中&#xff0c;APM 是保障系统业务运行性能的关键技术&#xff0c;确保用…

Tomcat WEB站点部署

目录 1、使用war包部署web站点 2、自定义默认网站目录 3、部署开源站点&#xff08;jspgou商城&#xff09; 对主机192.168.226.22操作 对主机192.168.226.20操作 上线的代码有两种方式&#xff1a; 第一种方式是直接将程序目录放在webapps目录下面&#xff0c;这种方式…

多协议网关BL110钡铼6路RS485转MQTT协议云网关

在工业自动化的现代化进程中&#xff0c;物联网技术的应用日益广泛&#xff0c;特别是工业物联网网关作为连接传感器、控制器和云端平台的关键枢纽&#xff0c;发挥着至关重要的作用。BL110钡铼多协议网关作为一款专为工业环境设计的先进设备&#xff0c;不仅支持多种下行采集协…

【代码随想录】【算法训练营】【第51天】 [115]不同的子序列 [583]两个字符串的删除操作 [72]编辑距离

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 51&#xff0c;周四&#xff0c;又是不能坚持的一天~ 题目详情 [115] 不同的子序列 题目描述 115 不同的子序列 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 …

windows下修改Jar包内容的两种方式

windows下修改Jar包内容的两种方式 背景第一种&#xff1a;解压工具第二种&#xff1a;Jar命令附Jar命令用法基本用法常见选项示例1&#xff1a;创建一个简单的 JAR 文件示例2&#xff1a;创建包含清单文件的 JAR 文件示例3&#xff1a;列出 JAR 文件的内容示例4&#xff1a;提…

数据库物理结构设计-定义数据库模式结构(概念模式、用户外模式、内模式)、定义数据库、物理结构设计策略

一、引言 如何基于具体的DBMS产品&#xff0c;为数据库逻辑结构设计的结果&#xff0c;即关系数据库模式&#xff0c;制定适合应用要求的物理结构 1、在设计数据库物理结构前&#xff0c;数据库设计人员首先 要充分了解所用的DBMS产品的功能、性能和特点&#xff0c;包括提供…

慧科新闻搜索研究数据库的使用指南及个人获取途径

《慧科新闻搜索研究数据库》WiseSearch由慧科讯业有限公司出品。WiseSearch是具有新闻搜索/浏览、对比分析等功能的一站式新闻搜索平台&#xff1b;内容包括1200种报刊和8000 网站的新闻资讯&#xff0c;平面媒体涵盖全国综合大报、党委机关报、都市报、行业报刊媒体&#xff0…

算法08 广/宽度优先搜索及相关问题详解

这是《C算法宝典》算法篇的第08节文章啦~ 如果你之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#xff1a;C语法入门&#xff0c;如果你C语法基础已经炉火纯青&#xff0c;则可以进阶算法&#x1f449;专栏&#xff1a;算法知识和数据结构&#x1f449;专栏&#xff…

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

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

mysql 提取拼音时一个重复字导致的错误

在提取拼音时&#xff0c;一直报错&#xff0c;提示&#xff1a;Result consisted of more than one row 最后发现是礼这个字导致的&#xff0c;发现有两个写法不同&#xff0c;但是mysql识别为同一个字导致的