网络安全 DVWA通关指南 DVWA File Inclusion(文件包含)

news2024/12/24 2:47:51

DVWA File Inclusion(文件包含)

文章目录

  • DVWA File Inclusion(文件包含)
    • 本地文件包含(LFI)
      • 漏洞利用
    • 远程文件包含(RFL)
      • 漏洞利用
    • 修复建议
  • Low
  • Medium
  • High
  • Impossible

本地文件包含(LFI)

文件包含漏洞的产生原因是 PHP 语言在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。

漏洞利用

利用条件:

(1)include()等函数通过动态变量的方式引入包含文件; (2)用户能够控制该动态变量。

远程文件包含(RFL)

服务器通过 PHP 的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严格,

从而可以去包含一个恶意文件,攻击者就可以远程构造一个特定的恶意文件达到攻击目的。

漏洞利用

条件:php.ini中开启allow_url_includeallow_url_fopen选项。

修复建议

  1. 禁止远程文件包含 allow_url_include=off
  2. 配置 open_basedir=指定目录,限制访问区域。
  3. 过滤../等特殊符号
  4. 修改Apache日志文件的存放地址
  5. 开启魔术引号 magic_quotes_qpc=on
  6. 尽量不要使用动态变量调用文件,直接写要包含的文件。

Low

1、分析网页源代码

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

?>

没有任何过滤措施存在,同时使用GET方法传递参数。尝试查看file1.php文件

image-20240517101641776

2、在URL输入不存在的路径,提交出现报错信息,得到文件的绝对路径

Warning: include(iviirjgiegij): failed to open stream: No such file or directory in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36

Warning: include(): Failed opening 'iviirjgiegij' for inclusion (include_path='.;C:\php\pear;../../external/phpids/0.6/lib/') in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36

3、使用相对路径访问fi.php,路径为D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php。

相对路径计算如下:

..\..\hackable\flags\fi.php

成功访问到fi.php文件

image-20240517102538336

Medium

1、分析网页源代码

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
// 使用str_replace函数移除$file字符串中所有的"http://"和"https://"子串。
$file = str_replace( array( "../", "..\"" ), "", $file );
// 继续使用str_replace函数,这次移除$file中所有向上一级目录的路径指示符,无论是"../"还是"..\"(考虑到不同操作系统的路径分隔符)。

?>

2、使用str_replace函数对输入的文件路径进行过滤,因为使用的是str_replace函数,所以可以使用双写绕过。构造Payload如下:

..././..././hackable/flags/fi.php

拼接到URL中提交,绕过成功

image-20240517103347816

High

1、分析网页源代码

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Input validation
// 使用fnmatch函数检查$file是否匹配模式"file*"
// fnmatch用于实现shell风格的通配符匹配,这里的"file*"会匹配以"file"开头的任何字符串。
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?>

2、使用fnmatch函数函数,虽然只能包含"file"开头的文件,但我们可以使用file伪协议读取到文件。(这个地方需要文件的绝对路径,与Low级别不同,这里的报错信息需要提交以file开头的不存在文件或路径,否则会返回统一错误页面)

构造Payload如下:

file:///D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php

拼接到URL中提交,包含文件成功

image-20240517104929712

Impossible

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
    // This isn't the page we want!
    echo "ERROR: File not found!";
    exit;
}

?>

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

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

相关文章

我的世界 异地联机教程 无需公网IP、服务器

主要内容 什么是Minecraft&#xff08;JAVA国际版&#xff09; 搭建该服务&#xff0c;需要准备什么 详细步骤 1.启动器 安装MC并运行MC 2.运行 MoleSDN 进行异地联机 3.小伙伴皮蛋加入鼠鼠的MC 完成联机 什么是我的世界 一款3D沙盒电子游戏&#xff0c;由Mojang Studio…

ComfyUI大猫咪写真工作流,哩布线上一键运行

前言 这次教程是用ComfyUI做的大猫咪写真。 视频教程 打开下面这个网站&#xff0c;点击【在线运行工作流】就可以一键运行ComfyUI工作流了 所有的AI设计工具&#xff0c;模型和插件&#xff0c;都已经整理好了&#xff0c;&#x1f447;获取~ 正面关键词&#xff1a; Chin…

基于二叉树的近似最近邻搜索-Annoy

在推荐系统的召回阶段&#xff0c;会实时计算用户的表征向量&#xff08;user/query&#xff09;&#xff0c;然后去物料库去寻找与用户最匹配的N个物料返回给用户&#xff1b;在搜索系统&#xff0c;也同样存在这样的需求&#xff0c;用户的搜素&#xff08;query&#xff09;…

Efficient DETR:别再随机初始化了,旷视提出单解码层的高效DETR | CVPR 2021

Efficient DETR结合密集检测和稀疏集合检测的优点&#xff0c;利用密集先验来初始化对象容器&#xff0c;弥补单层解码器结构与 6 层解码器结构的差距。在MS COCO上进行的实验表明&#xff0c;仅 3 个编码器层和 1 个解码器层即可实现与最先进的目标检测方法竞争的性能&#xf…

指针函数与函数指针的区别

1、指针函数 1-1、定义 指针函数&#xff0c;顾名思义&#xff0c;是一个函数&#xff0c;但其返回类型是指针。这意味着当这个函数被调用时&#xff0c;它会返回一个地址值&#xff0c;这个地址值指向某个类型的数据。 1-2、特点 函数性质&#xff1a;首先&#xff0c;它是…

【2024】20个高级 Java 面试问题及答案

1&#xff1a;解释Java序列化中transient关键字的意义。 在 Java 中&#xff0c;“ transient ”关键字用于指示变量在对象序列化期间不应被序列化。当变量被标记为“transient”时&#xff0c;意味着该变量应被序列化机制忽略。 这在处理不应持久的敏感或临时数据时特别有用…

基础 - 前端知识体系详解

一、前端三要素 HTML&#xff08;结构&#xff09;&#xff1a; 超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;&#xff0c;决定网页的结构和内容。CSS&#xff08;表现&#xff09;&#xff1a; 层叠样式表&#xff08;Cascading Style Sheets&#xff0…

基于飞腾平台的Hbase的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

人脸操作:从检测到识别的全景指南

人脸操作&#xff1a;从检测到识别的全景指南 在现代计算机视觉技术中&#xff0c;人脸操作是一个非常重要的领域。人脸操作不仅包括检测图像中的人脸&#xff0c;还涉及到人脸识别、表情分析、面部特征提取等任务。这些技术在各种应用中发挥着关键作用&#xff0c;从社交媒体…

Windows Server 2016 Standard 将程序加入开机自启动

分3步 1 打开“启动”文件夹&#xff1a;在Windows的搜索栏中输入“shell:startup”&#xff0c;点击搜索结果中的 “启动” 文件夹即可打开。 2 在启动文件夹中&#xff0c;右键点击空白区域&#xff0c;选择“新建”->“快捷方式”。 3 将 “程序的快捷方式” 添加到启动…

IP转地理位置:3个好用免费开源库代码及数据库对比体验详解

最近在做一个IP定位显示国家省市功能&#xff0c;在全网找了一圈&#xff0c;也每个安装体验过&#xff0c;测试他的数据库精准度。 本人是用PHP的第三方库&#xff0c;整理以下使用过的ip定位转地理位置库。 ip定位转地理位置库 1.itbdw/ip-database&#xff1a; **gihub地…

Qt 系统相关 - 网络与音视频

目录 一、Qt 网络 1. UDP Socket 1.1 核心 API 概览 1.2 回显服务器 1.3 回显客户端 2. TCP Socket 2.1 核心 API 概览 2.2 回显服务器 2.3 回显客户端 3. HTTP Client 3.1 核心 API 3.2 代码示例 二、Qt 音视频 1. Qt 音频 1.1 核心API概览 1.2 示例 2. Qt 视…

Java面试八股之请简述消息队列的发布订阅模式

请简述消息队列的发布订阅模式 发布订阅&#xff08;Publish-Subscribe&#xff0c;简称 Pub/Sub&#xff09;模型是一种消息传递模式&#xff0c;它在组件之间提供了高度的解耦和灵活性。这种模式广泛应用于分布式系统、事件驱动架构以及消息队列系统中。下面是发布订阅模型的…

什么是核心交换机?这样回答太到位了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 你们好&#xff0c;我的网工朋友。 无论是企业内部通信还是对外服务&#xff0c;稳定高效的数据传输都是成功的关键。 在这个背景下&#xff0c…

A-CSPO课程概念澄清和实操:假定(Assumptions)、实验(Experiments)、假设(Hypotheses)

“确保你把这当作一个实验。” “我们的工作假设是客户想要这个。” 这些场景熟悉吗&#xff1f;你的团队&#xff08;或整个组织&#xff09;可能会经常混淆假定(Assumptions)、实验(Experiments)和假设(Hypotheses)等术语&#xff0c;这会造成混乱。 让我们澄清一下每一个…

JAVA社会校招人力资源招聘系统小程序源码

解锁职场新篇章&#xff0c;揭秘“社会校招人力资源招聘系统”的奥秘 一、引言&#xff1a;为何社会校招需要数字化升级&#xff1f; 在这个信息爆炸的时代&#xff0c;企业面临着前所未有的招聘挑战&#xff1a;如何从海量简历中精准筛选出合适的人才&#xff1f;如何高效管…

SQLAlchemy 中使用 GroupBy 和 Sum 导致重复计数的问题及解决方法

在 SQLAlchemy 中使用 GroupBy 和 Sum 时&#xff0c;有时会遇到重复计数或意外的查询结果。这通常是因为在聚合查询中没有正确地指定聚合函数或 GroupBy 条件&#xff0c;导致结果集没有按预期方式分组。 1、问题背景 在使用 SQLAlchemy 进行数据查询时&#xff0c;用户在尝试…

入门 - vue整个过程的生命周期详解

生命周期概念 Vue的生命周期就是vue实例从创建到销毁的全过程&#xff0c;也就是new Vue()开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期&#xff0c;也就是从开始创建、初始化数据、编译模版、挂载Dom->渲染、更新->渲染、卸载 等⼀系列过程&#xff0c;称…

无人机灯光含义的详解!!!

一、LED指示灯和状态指示灯 LED指示灯&#xff1a;通常位于飞行器的头部机臂上&#xff0c;用于显示无人机的当前状态。 状态指示灯&#xff1a;位于尾部机臂上&#xff0c;提供更多关于无人机状态的信息。 红绿黄灯交替闪烁 表示无人机正在进行系统自检。稍等片刻&#xf…

Mybatis获取主键自增的方法

原本的方法 使用原本的JDBC去获取主键自增的方法如下图所示&#xff1a; 在这段代码中&#xff0c;通过连接对象 conn 的 prepareStatement 方法创建了一个PreparedStatement对象&#xff0c;并将SQL语句和 RETURN_GENERATED_KEYS 常量作为参数传递给该方法。这意味着执行SQL…