DVWA-File Inclusion(文件包含)渗透测试

概念:

  1. 漏洞产生原因:

    • 主要是由于开发人员没有对用户输入的文件路径进行严格的过滤和验证。例如,如果一个 Web 应用程序接受用户输入的文件路径,然后使用这个路径进行文件包含,而没有对用户输入进行任何检查,那么攻击者就可以通过构造恶意的文件路径,让程序包含并执行他们指定的文件。

  2. 危害:

    • 代码执行:攻击者可以上传一个包含恶意代码的文件,然后通过文件包含漏洞让目标程序执行这个文件中的代码。这可能导致服务器被完全控制,敏感信息被窃取,数据库被篡改等严重后果。

    • 敏感信息泄露:如果被包含的文件中包含敏感信息,如数据库连接字符串、密码等,攻击者可以通过文件包含漏洞获取这些敏感信息。

    • 权限提升:如果目标程序以高权限运行,攻击者可以利用文件包含漏洞执行恶意代码,从而提升自己在服务器上的权限。

环境:php7.0

low

源码分析:

<?php// The page we wish to display
$file = $_GET[ 'page' ];?>

 没有做限制:  

链接修改访问任意文件夹:http://192.168.1.13/dvwa/vulnerabilities/fi/?page=/tmp

得到文件路径且靶场系统非linux:

之前已经上传了phpinfo(),直接测试本地文件包含

【绝对路径】

http://[ip]/dvwa/vulnerabilities/fi/?page=X:\phpStudy\WWW\DVWA\hackable\uploads\phpinfo.php

【相对路径】

http://[ip]/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/phpinfo.php

远程文件包含:

首先确认远程文件是否开启,我们访问dvwa下的php.ini(如果你配置过php环境,则清楚php配置都在该文件见里)

php.ini文件绝对路径:X:\phpStudy\WWW\DVWA\php.ini

构造url:http://192.168.1.13/dvwa/vulnerabilities/fi/?page=X:\phpStudy\WWW\DVWA\php.ini

也可以通过../回退目录构造文件相对路径url

同样的效果,我们得到:

说明远程文件夹是开启。

我们靶机本地执行:http://localhost/dvwa/phpinfo.txt

远程包含:http://192.168.1.13/dvwa/vulnerabilities/fi/?page=http://127.0.0.1/dvwa/phpinfo.txt

(这里相当于远程靶机本地执行)

(包含失败的话看下路径,检查下文件路径,默认dvwa文件下)

medium

源码分析:

<?php// The page we wish to display
$file = $_GET[ 'page' ];// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
//str_replace()函数:替换字符串中的一些字符(区分大小写)
//str_replace(find,replace,string,count)
//find,必须。规定要查找的值
//replace,必须。规定替换find中的值的值
//string,必须。规定被搜索的字符串
//count,可选。一个变量,对替换函数进行计数
//返回值:返回带有替换值的字符串或数组//如果搜索的字符串是一个数组,那么它将返回一个数组并对数组中的每个元素进行查找和替换
//如果是对一个数组进行查找,单只对一个字符串进行替换,那么替代字符串将对所有查找到的值起作用。$file = str_replace( array( "../", "..\"" ), "", $file );?>

此代码做了过滤,基于low级别的构造相对路径的本地包含和远程包含均失效。绝对路径有效。

原理已知,我们构造url,不断尝试,

  • page=httphttp://://127.0.0.1/dvwa/phpinfo.txt可以绕过检测

  •  使用绝对路径也是可以执行的:http://192.168.1.13/dvwa/vulnerabilities/fi/?page=X:\phpStudy\WWW\DVWA\phpinfo.txt

high

源码分析:

<?php// The page we wish to display
$file = $_GET[ 'page' ];// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
//fnmatch("file",$file):该函数检查参数$file是否是以file开头,如果不是则返回false
//如果两个条件都满足:即既不是以 “file” 开头的文件名,也不是 “include.php”,则认为这不是期望的页面,输出 “ERROR: File not found!” 并退出程序。// This isn't the page we want!echo "ERROR: File not found!";exit;
}?>

主要做了访问包含条件限制。也就是要在当前页以file*开头。否则报错。

构造url:http://192.168.1.13/dvwa/vulnerabilities/fi/?page=file://X:\phpStudy\WWW\DVWA\phpinfo.txt

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;
}?>

限制只允许包含4种文件。

文件包含漏洞防御:文件包含漏洞(File Inclusion Vulnerability)是一种常见的安全漏洞,通常发生在Web应用程序中,允许攻击者通过恶意构造的输入包含服务器上的文件。防御这种漏洞可以采取以下几种方法:

1. **输入验证**:
   - 严格验证用户输入,确保只接受预定义的安全值。
   - 使用白名单,限制可包含的文件。

2. **使用绝对路径**:
   - 避免使用相对路径,确保使用绝对路径来引用文件,减少路径遍历攻击的风险。

3. **禁用文件包含功能**:
   - 对于不需要文件包含功能的应用,考虑在配置中禁用相关功能(如PHP中的`allow_url_include`)。

4. **最小化文件权限**:
   - 限制Web服务器对文件系统的访问权限,仅允许访问必要的目录和文件。

5. **使用安全的编程实践**:
   - 遵循安全编码标准,确保代码中不允许任意文件包含。
   - 定期审查和测试代码,发现并修复潜在的漏洞。

6. **日志记录和监控**:
   - 实施日志记录,监控异常的文件包含请求,及时响应潜在的攻击。

7. **应用程序安全性审计**:
   - 定期进行安全审计和渗透测试,发现和修复潜在的文件包含漏洞。

通过以上措施,可以有效降低文件包含漏洞带来的风险,提高应用程序的安全性。

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

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

相关文章

传输层协议 --- UDP

序言 在之前的文章 Socket 编程 中&#xff0c;我们只是简单的知道了怎么利用 UDP协议 或者是 TCP协议 来发送我们的数据&#xff0c;并且我们还知道 UDP 是不可靠的&#xff0c;TCP 是可靠的。但这是为什么呢&#xff1f;底层的构造和策略决定他们的属性&#xff01;这篇文章中…

数据结构编程实践20讲(Python版)—01数组

本文目录 01 数组 arrayS1 说明S2 举例S3 问题&#xff1a;二维网格中的最小路径求解思路Python3程序 S4 问题&#xff1a;图像左右变换求解思路Python3程序 S5 问题&#xff1a;青蛙过河求解思路Python3程序 写在前面 数据结构是计算机科学中的一个重要概念&#xff0c;用于组…

使用Plotly绘制交互式图表:从入门到精通

使用Plotly绘制交互式图表:从入门到精通 在数据科学和数据可视化领域,交互式图表能够提供更丰富的用户体验和更深入的数据洞察。Plotly 是一个强大的 Python 库,它不仅支持静态图表,还能创建高度交互的图表。本文将详细介绍如何使用 Plotly 实现一个函数来绘制交互式图表,…

【Gitee自动化测试2】Git,Github,Gitlab,Gitee

一. 服务器 与 客户端 是提供服务的计算机&#xff0c;存储项目代码和版本信息&#xff0c;处理客户端请求并返回响应。并通过网络向其他计算机&#xff08;即客户端&#xff09;提供这些服务。服务器可以是物理设备&#xff0c;也可以是虚拟机。 二. 版本控制 目的&#xf…

HttpSession使用方法及原理

HttpSession使用方法及原理 一、HttpSession使用流程说明二、登录概述具体 三、访问过程概述具体 一、HttpSession使用流程说明 1.用户发送登录请求到服务器。 2.服务器处理登录请求&#xff0c;调用userService.login(loginUser)。 3.如果登录成功&#xff0c;服务器调用requ…

Linux云计算 |【第四阶段】NOSQL-DAY2

主要内容&#xff1a; Redis集群概述、部署Redis集群&#xff08;配置manage管理集群主机、创建集群、访问集群、添加节点、移除节点&#xff09; 一、Redis集群概述 1、集群概述 所谓集群&#xff0c;就是通过添加服务器的数量&#xff0c;提供相同的服务&#xff0c;从而让…

【echarts】报错series.render is required.

总结&#xff1a;就是echarts无法保存renderItem函数到json里&#xff0c;因为renderItem是个封装方法&#xff0c;因此需要初始化加载时重新插入renderItem即可 1.描述&#xff1a;控制台报错series.render is required. 原数据json如下&#xff1a; {type: "bar"…

‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别

‌Auto-sklearn与scikit-learn的主要区别在于Auto-sklearn是一个自动化机器学习库&#xff0c;而scikit-learn是一个用于数据挖掘和数据分析的Python工具包。‌ Auto-sklearn是一个自动化的机器学习工具&#xff0c;它能够自动搜索最佳的学习算法并优化其超参数&#xff0c;通…

SQLAlchemy 查询,多条件的查询需求,根据传入条件的实际情况,决定将哪些条件作为filter条件进行查询

多个条件的查询&#xff0c;使用 SQLAlchemy 的查询构建器来动态地构建查询&#xff0c;根据传入的条件参数&#xff08;condition1, condition2, condition3 等&#xff09;来决定是否将这些条件添加到查询中 class Order(Base): __tablename__ orders id Column(Integer,…

Python--循环

在Python中&#xff0c;while循环和for循环的语法如下&#xff1a; 1. while循环 while循环会在给定条件为真时重复执行代码块。其基本语法如下&#xff1a; while 条件:# 执行的代码块示例&#xff1a; count 0 while count < 5:print(count)count 12. for循环 for循…

工作安排 - 华为OD统一考试(E卷)

2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时长(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和。那么请你帮小明安排一下工作,保证小明在指定…

科研绘图系列:R语言树结构聚类热图(cluster heatmap)

文章目录 介绍加载R包导入数据数据预处理画图修改图形导出数据系统信息介绍 热图结合树结构展示聚类结果通常用于展示数据集中的模式和关系,这种图形被称为聚类热图或层次聚类热图。在这种图中,热图部分显示了数据矩阵的颜色编码值,而树结构(通常称为树状图或聚类树)则显…

AIGAME背后的强大背景与AI币价值的崛起

AIGAME平台背后汇集了强大的资本和技术支持&#xff0c;凭借蒙特加密产业基金的战略投资和汇旺集团的多元化Web3基础设施建设&#xff0c;AIGAME在全球范围内迅速崛起。平台所使用的Sleepless AI技术&#xff0c;结合区块链与AI的深度融合&#xff0c;赋能AI币&#xff0c;使其…

虚拟社交的新时代:探索Facebook的元宇宙愿景

随着技术的不断进步&#xff0c;社交媒体的形态也在悄然变化。Facebook&#xff08;现名Meta&#xff09;正站在这一变革的前沿&#xff0c;积极探索元宇宙的愿景。元宇宙不仅是虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;的结合&#xff0c;更是…

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决 第一部分&#xff1a;windbg调试记录。 0: kd> g Breakpoint 10 hit winmine!DoButton1Up: 001b:0100390e a130510001 mov eax,dword ptr [winmine!xCur (01005130)] 0: kd> kc # 00 winmine…

LLaMA-Factory 使用 alpaca 格式的数据集

LLaMA-Factory 使用 alpaca 格式的数据集 flyfish alpaca 格式最初与Stanford大学的一个研究项目相关联&#xff0c;该项目旨在通过少量高质量的数据来微调大型语言模型。它受到了Alpaca模型&#xff08;一种基于LLaMA的指令跟随模型&#xff09;的影响&#xff0c;该模型是在…

Python 入门教程(3)基础知识 | 3.7、pass 关键字

文章目录 一、pass 关键字1、定义与用法2、pass 关键字的用法2.1、函数定义中的占位符2.2、 类定义中的占位符2.3、条件语句中的占位符2.4、循环中的占位符 3、注意事项 一、pass 关键字 1、定义与用法 pass语句用作将来代码的占位符。当执行pass语句时&#xff0c;不会有任何…

【RabbitMQ 项目】服务端:服务器模块

文章目录 一.编写思路二.代码实践三.服务端模块关系总结 一.编写思路 成员变量&#xff1a; muduo 库中的 TCP 服务器EventLoop 对象&#xff1a;用于主线程循环监控连接事件协议处理句柄分发器&#xff1a;用于初始化协议处理器&#xff0c;便于把不同请求派发给不同的业务处理…

【FastAPI】使用FastAPI和Redis实现实时通知(SSE)

在当今快速发展的Web应用程序中&#xff0c;实时通知已成为用户体验的重要组成部分。无论是社交媒体更新、消息通知&#xff0c;还是系统状态提醒&#xff0c;实时数据推送可以极大地提升用户互动性。本文将详细介绍如何使用FastAPI和Redis实现Server-Sent Events (SSE) 来推送…

模拟电路工程师面试题

一、基础知识题 描述三极管的基本工作原理及其三种工作状态。 分析:此题考察对三极管(NPN或PNP)基本工作原理的理解,包括截止区、放大区和饱和区的特点及其条件。解释什么是反馈,并说明正反馈和负反馈的区别。 分析:反馈是放大器设计中的重要概念,正反馈会增加放大器的增…