当前位置: 首页 > article >正文

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.kler.cn/news/328723.html

相关文章:

  • 十三、减少磁盘延迟时间的方法
  • SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
  • Linux 文件 IO 管理(第三讲:文件系统)
  • vue从入门到精通
  • 成都睿明智科技有限公司抖音电商服务靠谱吗?
  • 前端如何实现图片伪防盗链,保护页面图片
  • 甄选范文“论网络安全体系设计”,软考高级论文,系统架构设计师论文
  • web开发(1)-基础
  • 什么是信息增益
  • MacOS配置python环境
  • 编程参考 - 动态链接库中的变量实例化
  • AccessoriesqueryController
  • 【韩顺平Java笔记】第5章:程序控制结构
  • 【异常数据检测】孤立森林算法异常数据检测算法(数据可视化 Matlab语言)
  • GPT对话代码库——esp32和单片机实现远程wifi升级代码方案。
  • windows系统中后台运行java程序
  • OIDC6-OIDC 授权流程类型
  • 秘密武器揭秘
  • 全国职业院校技能大赛(大数据赛项)-平台搭建Zookeeper笔记
  • 创新型城市试点名单最新数据(2006-2023年)
  • 【Nacos架构 原理】内核设计之Nacos通信通道
  • 生信初学者教程(二十一):LASSO+LR筛选候选标记物
  • 常用JS代码片段分享(总结)
  • 论文笔记——Graph Bottlenecked Social Recommendation
  • 【文件增量备份系统】MySQL百万量级数据量分页查询性能优化
  • vue3 父子组件调用
  • 【学习笔记】手写 Tomcat 八
  • python获取当月最后工作日实现在数据库查询指定日期数据(python+sql)
  • B+树索引结构的优点
  • 习题1 程序设计和C语言