Pikachu靶场——文件包含漏洞(File Inclusion)

news2024/12/23 11:00:41

文章目录

  • 1. File Inclusion
    • 1.2 File Inclusion(local)
      • 1.2.1 源代码分析
      • 1.2.2 漏洞防御
    • 1.3 File Inclusion(remote)
      • 1.3.1 源代码分析
      • 1.3.2 漏洞防御
    • 1.4 文件包含漏洞防御

1. File Inclusion

还可以参考我的另一篇文章:文件包含漏洞及漏洞复现。

File Inclusion(文件包含漏洞)概述:

文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。

在PHP中提供了:

  • include(),include_once()
  • require(),require_once()

这些文件包含函数,这些函数在代码设计中被经常使用到。

大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是有些时候文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。

根据不同的配置环境,文件包含漏洞分为如下两种情况:

  • 本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。

  • 远程文件包含漏洞:能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码。

1.2 File Inclusion(local)

页面中有一个下拉框,可以选NBA球星进行查看。

image-20230827165711336

URL路径如下

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

可见其中包含了一个文件file1.php,很可能是文件包含,并且既然是通过URL参数从前端传到后端的,那就是用户可以控制的。把5个NBA球星都选一遍,发现文件名确实是file1.php~file5.php。

给filename参数随便赋值

image-20230827170119200

页面报错,直接将网站的路径信息暴露出来了。

暴露出来网站的绝对路径:

C:\software\phpstudy_pro\WWW\pikachu\vul\fileinclude\fi_local.php

根据暴露出来的路径构造相对路径,读取系统的核心文件

?filename=../../../../Windows/System32/drivers/etc/hosts

image-20230827170838578

1.2.1 源代码分析

这里接受的参数filename没有做任何过滤,直接进行了包含,从而导致了漏洞的产生。

image-20230923142926072

1.2.2 漏洞防御

在源代码中已经给出了漏洞的防御措施。使用白名单的方式,指定用户可以访问的文件范围。

这里为了显示的效果容易看到,又添加了一个else语句

//安全的写法,使用白名单,严格指定包含的文件名
if($filename=='file1.php' || $filename=='file2.php' || $filename=='file3.php' || $filename=='file4.php' || $filename=='file5.php'){
    include "include/$filename";
}else{
    die("黑客!");
}

再次读取系统的核心文件

http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../../../Windows/System32/drivers/etc/hosts&submit=提交查询

image-20230923143806875

1.3 File Inclusion(remote)

无非就是换成一个远端的路径,读取远程文件。

image-20230827173023434

http://192.168.188.183/pikachu/test/phpinfo.txt

image-20230827173054198

1.3.1 源代码分析

同样是变量传进来直接包含,没做任何的安全限制。

image-20230923144224382

1.3.2 漏洞防御

# 漏洞防御
$allowed_files = array(
    'include/file1.php',
    'include/file2.php',
    'include/file3.php',
    'include/file4.php',
    'include/file5.php',
    'include/file6.php'
);
//远程文件包含漏洞,需要php.ini的配置文件符合相关的配置
$html='';
if(isset($_GET['submit']) && $_GET['filename']!=null){
    $filename=$_GET['filename'];
    // include "$filename";//变量传进来直接包含,没做任何的安全限制
    # 漏洞防御
    if(in_array($filename, $allowed_files)){
        include "$filename";
    }else{
        die("黑客!");
    }

}

函数说明

  • in_array():用于检查数组中是否存在特定值的函数。这里检测URL中携带的filename参数的值是否在$allowed_files数组中。

image-20230923150048870

再次读取系统的核心文件,成功防御页面显示黑客!

image-20230923145207882

1.4 文件包含漏洞防御

  • 使用str_replace等方法过滤掉危险字符。
  • 配置open_basedir,防止目录遍历。
  • php版本升级,防止%00截断。
  • 对上传的文件进行重命名,防止被读取。
  • 对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。
  • 做好管理员权限划分,做好文件的权限管理。

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

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

相关文章

商业智能系统的主要功能包括数据仓库、数据ETL、数据统计输出、分析功能

ETL服务内容包含: 数据迁移数据合并数据同步数据交换数据联邦数据仓库

plt 画图不显示label

没写 plt.legend() 这个 ! # 效果模拟-------------- import matplotlib.pyplot as plt import matplotlib as mpl # matplotlib其实是不支持显示中文的 显示中文需要一行代码设置字体 mpl.rcParams[font.family] = STKAITI # STKAITI——字体 plt.rcParams[axes.unicode_m…

亲,您的假期余额已经严重不足了......

引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 转眼八天长假已经接近尾声了,今天来总结一下大家的假期,聊一聊假期关于学习的看法,并预估一下大家节后大家上班时的样子。 1.放假前一天 即将迎来八天…

侯捷 C++ STL标准库和泛型编程 —— 9 STL周围

最后一篇,完结辽!😋 9 STL周围 9.1 万用Hash Function Hash Function的常规写法:其中 hash_val 就是万用Hash Function class CustumerHash { public:size_t operator()(const Customer& c) const{ return hash_val(c.fna…

x64内核实验2-段机制的变化

x64内核实验2-段机制的变化 ia-32e模式简介 x86下的段描述符结构图如下 在x86环境下段描述符主要分为3个部分的内容:base、limit、attribute,而到了64位环境下段的限制越来越少,主要体现在base和limit已经不再使用而是直接置空&#xff0…

U盘里文件损坏无法打开怎么恢复?

U盘,全称为USB闪存盘,是一种体积小巧、传输数据速度快的便携式存储设备。由于其出色的便捷性和高效性,U盘在各个工作领域和日常生活中得到了广泛应用,赢得了消费者的普遍好评。然而,使用U盘的过程中也可能会面临数据损…

Zabbix配置监控文件系统可用空间小于30GB自动告警

一、创建监控项 二、配置监控项 #输入名称–>键值点击选择 #找到磁盘容量点击 注: 1、vfs 该键值用于检测磁盘剩余空间,zabbix 内置了非常多的键值可以选着使用 2、单位B不需要修改,后期图表中单位和G拼接起来就是GB 3、更新时间 10S…

Qt扫盲-QSqlTableModel理论总结

QSqlTableModel理论总结 一、概述二、使用1. 与 view 视图绑定2. 做中间层,不显示 三、常用函数 一、概述 QSqlTableModel是用于从单个表读写数据库记录的高级接口。它构建在较低级的QSqlQuery之上,可用于向QTableView 等视图类提供数据。这个主要是对单…

基于三平面映射的地形纹理化【Triplanar Mapping】

你可能遇到过这样的地形:悬崖陡峭的一侧的纹理拉伸得如此之大,以至于看起来不切实际。 也许你有一个程序化生成的世界,你无法对其进行 UV 展开和纹理处理。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 三平面映射(Trip…

【C++】String -- 详解

⚪C语言中的字符串 C 语言中,字符串是以 \0 结尾的一些字符的集合,为了操作方便,C 标准库中提供了一些 str 系列的库函数,但是这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户自己…

Java实现整数互转罗马数字基本算法

目录 一、罗马数字的起源? 二、算法代码 (1)整数转罗马数字算法代码 (2)罗马数字转整数算法代码 三、测试结果 (1)整数转罗马数字测试结果 (2)罗马数字转整数测试…

GD32F103 硬件 IIC

1. 硬件IIC 1. 硬件IIC的框图 如果MCU做为主机SCL就做为输出,做从机SCL就做为输入。 主机: 当MCU作为主机发送数据流程从数据缓冲寄存器里拿到移位寄存器。在从移位寄存器一位一位发送。 当MCU作为主机接收数据流程先放到移位寄存器。在从移位寄存…

微信小程序软件著作权申请成功!

软件著作权登记是对自己开发的软件享有著作权的一种保障,也是对自己开发能力的一种认证,在个人找工作或者公司拿项目资质审查时都可能发挥作用。我成功开发了一款微信小程序后,便了解了许多相关资料,花钱请代理代办速度快、省事&a…

Visopsys 0.92 发布

Visopsys 是一个 PC 机的操作系统,系统小型、快速而且开源。有着丰富的图形界面、抢先式多任务机制以及支持虚拟内存。Visopsys 视图兼容很多操作系统,但并不是他们的克隆版本。Visopsys 0.92 现已发布,此维护版本引入了多任务处理程序、文件…

C++标准模板(STL)- 类型支持 (定宽整数类型)(int8_t,int_fast8_t,int_least8_t,intmax_t,intptr_t)

定宽整数类型 类型 定义于头文件 <cstdint> int8_tint16_tint32_tint64_t (可选) 分别为宽度恰为 8、16、32 和 64 位的有符号整数类型 无填充位并对负值使用补码 &#xff08;仅若实现支持该类型才提供&#xff09; (typedef) int_fast8_tint_fast16_tint_fast32_tint…

进程调度算法之先来先服务(FCFS),短作业优先(SJF)以及高响应比优先(HRRN)

1.先来先服务&#xff08;FCFS&#xff09; first come first service 1.算法思想 主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子) 2.算法规则 按照作业/进程到达的先后顺序进行服务。 3.用于作业/进程调度 用于作业调度时&#xff0c;考虑的是哪个作业先…

Spring 原理

它是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 1 Spring 特点 轻量级控制反转面向切面容器框架集合 2 Spring 核心组件 3 Spring 常用模块 4 Spring 主要包 5 Spring 常用注解 bean…

【HTTP】URL结构、HTTP请求和响应的报文格式、HTTP请求的方法、常见的状态码、GET和POST有什么区别、Cookie、Session等重点知识汇总

目录 URL格式 HTTP请求和响应报文的字段&#xff1f; HTTP请求方法 常见的状态码 GET 和 POST 的区别 Cookie 和 Session URL格式 &#xff1f;&#xff1a;是用来分割URL的主体部分&#xff08;通常是路径&#xff09;和查询字符串&#xff08;query string&#xff09;…

MyBatisPlus(九)模糊查询

说明 模糊查询&#xff0c;对应SQL语句中的 like 语句&#xff0c;模糊匹配“要查询的内容”。 like /*** 查询用户列表&#xff0c; 查询条件&#xff1a;姓名包含 "J"*/Testvoid like() {String name "J";LambdaQueryWrapper<User> wrapper ne…

十天学完基础数据结构-第六天(树(Tree))

树的基本概念 树是一种层次性的数据结构&#xff0c;它由节点组成&#xff0c;这些节点按照层次关系相互连接。树具有以下基本概念&#xff1a; 根节点&#xff1a;树的顶部节点&#xff0c;没有父节点。 子节点&#xff1a;树中每个节点可以有零个或多个子节点。 叶节点&am…