CVE-2018-12613phpMyAdmin 后台文件包含漏洞分析
字数 1824 2025-08-18 11:38:45
phpMyAdmin 后台文件包含漏洞分析 (CVE-2018-12613) 教学文档
一、漏洞背景
phpMyAdmin 是一个基于PHP的MySQL数据库管理工具,提供Web界面管理MySQL数据库。该漏洞由ChaMd5安全团队发现并披露,允许攻击者在服务器上包含(查看和潜在执行)文件。
二、漏洞描述
影响版本
- phpMyAdmin 4.8.0
- phpMyAdmin 4.8.1
漏洞条件
攻击者需要满足以下条件之一:
- 已通过身份验证
- 配置中
$cfg['AllowArbitraryServer'] = true:攻击者可控制任何主机并在phpMyAdmin上执行任意代码 - 配置中
$cfg['ServerDefault'] = 0:绕过登录直接执行易受攻击的代码
三、漏洞分析
漏洞入口
漏洞位于index.php 54-63行,存在五个判断条件:
- 是否存在target参数
- target参数是否为字符串
- 值不能以index开头
- 值不能出现在
$target_blacklist内(import.php和export.php) Core类的checkPageValidity方法判断
核心漏洞点 - checkPageValidity函数
位于libraries/classes/Core.php文件中的checkPageValidity函数包含五个判断:
$whitelist为空则引用静态声明的$goto_whitelist- 如果
$page未定义或不是字符串则返回false $page存在于$whitelist中则返回true$_page(以?分割后的前面部分)存在于$whitelist中则返回true- 经过
urldecode解码后的$_page存在于$whitelist中则返回true
漏洞利用原理
传入target=db_sql.php%253f/../../test.txt:
%253f是?号的二次URL编码urldecode解码后为db_sql.php?/../../test.php- 以?分割取出前面字符串
db_sql.php,存在于白名单中 - 最终包含的文件路径被解析为
db_sql.php%3f/../../test.txt
四、漏洞复现
方法一:包含session文件
- 登录phpMyAdmin(如root/toor)
- 执行SQL语句:
select '<?php phpinfo();exit;?>' - PHP会序列化参数并保存在session文件中
- MacOS:
/var/tmp/ - Linux:
/var/lib/php/sessions/
- MacOS:
- 查看当前cookie获取SESSION ID
- 构造URL包含session文件:
http://target/index.php?target=db_sql.php%253f/../../var/lib/php/sessions/sess_[SESSION_ID]
其他利用方法
- 上传SQL文件并包含MySQL的sql文件
- 开启general_log来完成getshell
五、修复建议
官方修复
升级到phpMyAdmin 4.8.2及以上版本。修复方式是在checkPageValidity函数中增加$include参数,当$include=true时仅执行第一次判断,不进行urldecode操作。
补丁分析
修复补丁位于:
https://github.com/phpmyadmin/phpmyadmin/commit/d1360f46cef76c5182116eb2b8fdbab1b20e687a
六、防御措施
- 及时升级到最新版本
- 禁用
$cfg['AllowArbitraryServer']或设置为false - 设置
$cfg['ServerDefault']为1 - 限制phpMyAdmin的访问权限
- 定期检查服务器上的session文件
七、技术总结
该漏洞本质是一个二次编码导致的文件包含漏洞,利用phpMyAdmin对URL参数处理的不严谨性,通过编码绕过白名单检查,最终实现任意文件包含。漏洞利用需要一定条件,但一旦成功可导致服务器被完全控制。
注:本文档仅供学习研究使用,请勿用于非法用途。进行安全测试前请确保已获得系统所有者授权。