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

漏洞条件

攻击者需要满足以下条件之一:

  1. 已通过身份验证
  2. 配置中$cfg['AllowArbitraryServer'] = true:攻击者可控制任何主机并在phpMyAdmin上执行任意代码
  3. 配置中$cfg['ServerDefault'] = 0:绕过登录直接执行易受攻击的代码

三、漏洞分析

漏洞入口

漏洞位于index.php 54-63行,存在五个判断条件:

  1. 是否存在target参数
  2. target参数是否为字符串
  3. 值不能以index开头
  4. 值不能出现在$target_blacklist内(import.phpexport.php)
  5. Core类的checkPageValidity方法判断

核心漏洞点 - checkPageValidity函数

位于libraries/classes/Core.php文件中的checkPageValidity函数包含五个判断:

  1. $whitelist为空则引用静态声明的$goto_whitelist
  2. 如果$page未定义或不是字符串则返回false
  3. $page存在于$whitelist中则返回true
  4. $_page(以?分割后的前面部分)存在于$whitelist中则返回true
  5. 经过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文件

  1. 登录phpMyAdmin(如root/toor)
  2. 执行SQL语句:select '<?php phpinfo();exit;?>'
  3. PHP会序列化参数并保存在session文件中
    • MacOS: /var/tmp/
    • Linux: /var/lib/php/sessions/
  4. 查看当前cookie获取SESSION ID
  5. 构造URL包含session文件:
    http://target/index.php?target=db_sql.php%253f/../../var/lib/php/sessions/sess_[SESSION_ID]

其他利用方法

  1. 上传SQL文件并包含MySQL的sql文件
  2. 开启general_log来完成getshell

五、修复建议

官方修复

升级到phpMyAdmin 4.8.2及以上版本。修复方式是在checkPageValidity函数中增加$include参数,当$include=true时仅执行第一次判断,不进行urldecode操作。

补丁分析

修复补丁位于:
https://github.com/phpmyadmin/phpmyadmin/commit/d1360f46cef76c5182116eb2b8fdbab1b20e687a

六、防御措施

  1. 及时升级到最新版本
  2. 禁用$cfg['AllowArbitraryServer']或设置为false
  3. 设置$cfg['ServerDefault']为1
  4. 限制phpMyAdmin的访问权限
  5. 定期检查服务器上的session文件

七、技术总结

该漏洞本质是一个二次编码导致的文件包含漏洞,利用phpMyAdmin对URL参数处理的不严谨性,通过编码绕过白名单检查,最终实现任意文件包含。漏洞利用需要一定条件,但一旦成功可导致服务器被完全控制。


:本文档仅供学习研究使用,请勿用于非法用途。进行安全测试前请确保已获得系统所有者授权。

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/ 查看当前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参数处理的不严谨性,通过编码绕过白名单检查,最终实现任意文件包含。漏洞利用需要一定条件,但一旦成功可导致服务器被完全控制。 注 :本文档仅供学习研究使用,请勿用于非法用途。进行安全测试前请确保已获得系统所有者授权。