Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
phpmyadmin-importldi — phpMyAdmin 5.2.3 - 高危 - 远程 - SQLi - ImportLdi TERMINATED BY 残留 | Kitploit
工具/GitHubGitHub/abraxas/phpmyadmin-importldi
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试实验室与实践
GitHubabraxas/phpmyadmin-importldi

phpmyadmin-importldi

phpMyAdmin 5.2.3 - 高危 - 远程 - SQLi - ImportLdi TERMINATED BY 残留

查看仓库
28天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - phpmyadmin-importldi

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-importldi

技术分析文章:https://abraxaslabs.tech/research/phpmyadmin-importldi

phpmyadmin-importldi

类别: SQLi 可达性: 远程

phpMyAdmin 5.2.3(RELEASE_5_2_3 / 962857e)- phpMyAdmin

ImportLdi.php 使用 POST 参数 ldi_terminated 和 ldi_new_line 构建带有 FIELDS/LINES TERMINATED BY 的 LOAD DATA。这两个字符串被拼接进单引号包裹的 SQL 中。ldi_enclosed 和 ldi_escaped 则经过 escapeString 处理。phpMyAdmin 在 /import 上设置了 PMA_ENABLE_LDI,因此 MYSQLI_OPT_LOCAL_INFILE 处于开启状态。

已登录用户在 ldi_terminated 中携带引号 POST format=ldi。生成的 LOAD DATA 在 TERMINATED BY 内包含原始 POST 内容。SQL 注入作用于用户连接,而非控制用户连接。

ID暂无 CVE
类别SQLi
可达性远程(已认证的 cookie 登录;表导入,格式 ldi)
CWECWE-89
CVSS中危:6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
产品phpMyAdmin
受影响版本5.2.3 标签 RELEASE_5_2_3(962857e4f63d42e38f11ff4d63f5e722018add76)
认证已认证的 cookie 登录。表导入,格式 ldi
许可证GNU Affero GPL v3.0
实验环境仅限 127.0.0.1

攻击者能做什么

能够打开表导入功能的已登录 phpMyAdmin 用户,可以在其自身的 MySQL 连接上向 LOAD DATA ... TERMINATED BY 注入 SQL。

权限方法 / 汇聚点侦察 / 完整性 / 可用性实验验证或推断
突破 FIELDS TERMINATED BY 字面量POST index.php?route=/import format=ldi ldi_terminated 携带引号PMA 所构建语句的完整性实验验证。HTML SQL 框:TERMINATED BY '',PMA-IMPORTLDI-WITNESS'
保持 ENCLOSED BY 在带内同一 POST,ldi_enclosed 中携带引号阴性对照实验验证。ENCLOSED BY 已被转义
在用户连接上执行额外 SQL(INTO OUTFILE / 若允许则堆叠查询)字符串闭合后的同一汇聚点用户连接的完整性推断。实验止步于被破坏的分隔符。默认 mysqli::query 为单语句
MySQL 侧文件读写若账户拥有 FILE 权限或可对 Web 服务器使用 LOCAL INFILE,则同一 LOAD DATAmysqld 可触及文件的完整性推断。此处未授予该权限。不作声明

本实验已排除:未认证访问、控制用户 / pmadb、操作系统 include LFI,以及受 FILE 权限限制的读写。已登录用户本就拥有一个 SQL 框;此遗留问题只是 PMA 为其构建的语句中未转义的分隔符。

同一版本固定点:WebAuthn CustomServer 遗留问题。

我是如何发现的

我固定了 phpMyAdmin RELEASE_5_2_3。手工构建 LOAD DATA 的导入插件是引号审计的重点。四个分隔符字段中有两个被转义,两个没有:

$sql .= ' FIELDS TERMINATED BY \'' . $ldi_terminated . '\'';
...
$sql .= ' LINES TERMINATED BY \'' . $ldi_new_line . '\'';

ldi_enclosed / ldi_escaped 调用 $dbi->escapeString。Common.php 在 /import + format=ldi 时设置 PMA_ENABLE_LDI。路由 GET|POST /import 和 GET|POST /table/import。

已记录的误判:在没有 FILE 权限的情况下声称存在 LFI;将 SQL 输入框本身当作发现点(真正的遗留问题是 PMA 拼接的未转义分隔符);声称存在 control-user / pmadb;反弹 shell。纯属表演。

实验环境

python3 phpmyadmin-importldi-Abraxas-Labs.py
# or: cd lab && ./run.sh

仅针对 http://127.0.0.1:19290。镜像为 phpmyadmin:5.2.3 和 mysql:8.0。Compose 项目为 phpmyadmin-importldi。运行结束后栈会被拆除。

Cookie 登录。向 /import 发送 POST 请求,携带 format=ldi,并在 ldi_terminated 中放入一个引号。生成的语句为 LOAD DATA LOCAL INFILE ... INTO TABLE \ldi_target` FIELDS TERMINATED BY '',PMA-IMPORTLDI-WITNESS'。同一个引号放入 ldi_enclosed后,会被存储为转义后的ENCLOSED BY。5.2.3 镜像上的固定源码中仍然包含 '.$ldi_terminated.'和$dbi->escapeString($ldi_enclosed)`。

SUCCESS phpmyadmin-importldi pin=RELEASE_5_2_3 how=live TERMINATED-BY-raw ENCLOSED-escaped PMA-IMPORTLDI-WITNESS

修复方案

对 ldi_terminated 和 ldi_new_line 调用 escapeString,与 enclosed 和 escaped 的处理方式相同。对 skip_queries 进行整数强制转换。

参考资料

  • github.com/phpmyadmin/phpmyadmin 标签 RELEASE_5_2_3(962857e4f63d42e38f11ff4d63f5e722018add76)
  • libraries/classes/Plugins/Import/ImportLdi.php
  • 同一固定版本:PMA-5.2.3-WebAuthn-2FA
  • CWE-89

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境使用。不提供任何担保。

下载工具