abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
类别: SQLi 可达性: 远程
phpMyAdmin 5.2.3(标签 RELEASE_5_2_3,提交 962857e)。Central columns 在控制用户连接上,将 POST 的 extra 和 attribute 拼接进一个单引号 SQL 字面量来写入 col_extra。相邻字段都经过 escapeString。这两个没有。
已登录用户 POST index.php?route=/database/central-columns,带上 multi_edit_central_column_save=1,并在 field_attribute(或 col_extra)中放入一个引号。随后 getInsertQuery / updateOneColumn 会以 pma 控制用户身份对 pma__central_columns 执行该字符串。该账户是配置存储用户,而非已登录的 SQL 实例。
CVE-2016-5703 是 central columns 中的数据库名。这些 extra 和 attribute 字段并非那个漏洞。
| ID | 暂无 CVE |
| 类别 | SQLi(控制用户在 pma__central_columns 上) |
| 可达性 | 远程(已认证 cookie 登录;已启用 pmadb central columns) |
| CWE | CWE-89 |
| CVSS | 高危:8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| 产品 | phpMyAdmin |
| 受影响版本 | 5.2.3 标签 RELEASE_5_2_3(962857e) |
| 认证 | 已认证 cookie 登录。已启用 pmadb central columns。 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1:19210 |
一个已登录的 phpMyAdmin 用户,只要能打开 Central columns,就能以控制用户身份在 pma__central_columns 上注入 SQL。
| 权限 | 方法 / 路径 | 实验验证或推断 |
|---|---|---|
| 破坏控制用户的 INSERT/UPDATE 字符串(pmadb SQL 的完整性) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1,在 field_attribute / col_extra 中放入引号 | 实验验证。#1064 JSON 错误。控制用户错误中出现见证串 PMA-PMADB-CENTRAL-SQLI-WITNESS |
| 让相邻字段保持带内 | 同一 POST,在 field_name 中放入引号 | 实验验证。行存储为 neg'col。escapeString 生效 |
| 读取或覆盖其他用户的 central-column 行 | 同一汇聚点,一旦字符串被闭合 | 推断。实验止于语法错误;无堆叠查询 |
| 以控制用户身份执行额外语句 | 同一汇聚点,若控制 mysqli 连接允许多语句 | 推断。默认 mysqli::query 为单语句。此处未启用 |
触达其他 pmadb 表(bookmarks、history、pma__userconfig) | 仅当堆叠查询或 INTO 式写入可行时 | 推断。本实验中的控制用户仅有 phpmyadmin.* DML |
本实验已排除:未认证访问、已登录 appuser 的 SQL 实例(仅 appdb)、OS shell 以及堆叠查询。若 pmadb / central columns 关闭,该功能不生效(那是 FAIL,而非此遗留问题)。
对 RELEASE_5_2_3 进行了八路并行源码排查。CentralColumns.php 中的相邻字段都经过 escapeString。Extra 和 attribute 则被 implode 进一个单引号字面量。CVE-2016-5703 是数据库名,而非这些列。
走过的弯路:把 field_name 中的引号当作遗留问题(它存储为 neg'col;那是反例);期望 general log 显示未转义的见证串(INSERT 在成功写入前就以 #1064 失败);把 pmadb 关闭当作此遗留问题(功能不生效)。
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
或
cd lab
./run.sh
仅限回环:http://127.0.0.1:19210。镜像 phpmyadmin:5.2.3 和 mysql:8.0。Compose 项目 phpmyadmin-pmadb-central-sqli。见证串 PMA-PMADB-CENTRAL-SQLI-WITNESS。
SUCCESS phpmyadmin-pmadb-central-sqli how=live insert-syntax=yes field-name-escaped=yes general-log-unescaped=false error-has-witness=true PMA-PMADB-CENTRAL-SQLI-WITNESS
对 extra 和 attribute 使用 escapeString / quoteString(..., CONNECT_CONTROL)。将 auto_increment、UNSIGNED、BINARY、UNSIGNED ZEROFILL 和 on update CURRENT_TIMESTAMP 加入允许列表。phpMyAdmin 6.x 中对 designer JSON blob 使用 quoteString 是此类 pmadb 拼接的已修复形态。
962857e)libraries/classes/Database/CentralColumns.php getInsertQuery / updateOneColumnControllers/Database/CentralColumnsController.php POST multi_edit_central_column_saveGET|POST /database/central-columnsGNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无任何担保。