授权的 SQL 注入利用框架,针对 phpMyAdmin 中的 CVE-2020-5504,具备自动化数据库枚举、盲注、代理支持以及结构化报告功能,适用于渗透测试与安全研究。
用于识别和验证 phpMyAdmin 部署中 CVE-2020-5504 的授权安全测试与研究框架
负责任使用声明: 本项目仅适用于您拥有或明确授权评估的系统。未经书面许可和明确的测试范围,请勿将其用于公共、第三方或生产系统。
| CLI 输出 | 使用方法 |
|---|---|
![]() | ![]() |
CVE-2020-5504 是一个影响 phpMyAdmin 用户账户页面的 SQL 注入漏洞。根据 phpMyAdmin 官方公告,phpMyAdmin 4.x 系列中早于 4.9.4 的版本以及 phpMyAdmin 5.0.0 均受影响;公告建议 4.x 系列升级至 4.9.4 或更高版本,5.x 系列升级至 5.0.1 或更高版本。[1] 国家漏洞数据库记录显示,利用该漏洞需要有效的 MySQL 账户才能访问服务器。[2]
本项目为授权渗透测试、受控验证和安全研究提供了结构化的工作流程。它旨在帮助评估人员对目标进行指纹识别、验证目标是否疑似受影响、记录证据,并生成结构化报告以用于修复跟踪。
该框架围绕四个目标进行组织:
识别 phpMyAdmin 安装并收集与版本相关的指标。
验证 在可能的情况下,使用受控、非破坏性的检查来验证疑似暴露。
评估 使用可配置的限制、重试行为和可选代理来评估授权目标。
报告 以易于审查、归档和集成到工作流程中的格式呈现发现结果。
本项目不能替代补丁修复、供应商指导、安全配置或正式的渗透测试授权流程。它不保证能检测到每种部署、配置、版本或网络状况。所有结果都应人工审查,并作为评估证据而非自动安全结论来处理。
仅当您获得资产所有者的明确授权时,才可对资产运行此工具。授权应明确目标、允许的测试时间窗口、允许使用的技术、源 IP、数据处理要求、升级联系人和停止条件。
切勿仅仅因为互联网系统可访问就对其进行测试。 可访问性不等于许可。
评估模式可能会产生有关数据库、表、列或记录的信息。将所有输出视为潜在敏感信息。使用适当的访问控制存储报告,避免在 shell 历史记录中留下机密信息,在参与规则要求时加密报告,并在参与结束后安全删除临时数据。
在开始评估之前,请确认您拥有已知良好的备份或恢复流程、与系统所有者的沟通渠道,以及记录在案的回滚或停止计划。只要有可能,优先使用隔离的测试环境。使用能够回答评估问题的最低侵入性模式。
| 领域 | 能力 | 描述 |
|---|---|---|
| 发现 | 自动化指纹识别 | 识别可能的 phpMyAdmin 部署并收集版本指标。 |
| 验证 | 漏洞验证 | 执行受控检查,并以面向置信度的方式处理结果。 |
| 工作流程 | 多种操作模式 | 支持检测、验证、研究和试运行工作流程。 |
| 会话处理 | CSRF 令牌管理 | 提取并管理应用程序流程所需的 CSRF 相关值。 |
| 认证 | 多信号验证 | 使用多个指标以减少错误的认证结果。 |
| 评估 | 数据库枚举 | 支持对数据库、表、列和选定数据进行授权枚举。 |
| 注入研究 | 盲注技术 | 在实现允许的情况下,支持基于布尔和基于时间的盲注研究工作流程。 |
| 报告 | JSON、HTML 和 TXT | 为不同受众生成结构化、样式化和纯文本输出。 |
| 可靠性 | 重试和退避 | 以可配置的行为重试瞬时请求。 |
| 集成 | 代理支持 | 可与 Burp Suite 或其他 HTTP 拦截代理配合使用。 |
| 可用性 | 丰富的终端界面 | 提供彩色输出、进度指示器和可读的状态消息。 |
| 诊断 | 详细日志记录 | 为授权的故障排除提供额外的诊断信息。 |
推荐的工作流程有意采用分阶段方式,以便评估人员可以从影响最小的活动开始,仅在获得授权后才扩大范围。``` ┌──────────────────┐ │ Define scope │ Confirm written authorization and test boundaries └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Detect │ Identify phpMyAdmin and collect version indicators └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Verify │ Perform controlled vulnerability checks └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Assess, if │ Continue only when explicitly authorized │ approved │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Report │ Preserve evidence, limits, timestamps, and conclusions └──────────────────┘
阳性结果应结合目标版本、认证上下文、请求证据及参与范围进行复核。阴性结果并不能证明部署是安全的;它可能反映出版本差异、访问控制、路由、应用定制、速率限制或可见性不足等问题。
---
## 要求
### 运行时要求
| 要求 | 支持的基线 |
| --- | --- |
| 操作系统 | Linux、macOS 或 Windows |
| Python | 3.6 或更高版本,受依赖兼容性约束 |
| 包管理器 | `pip` |
| 版本控制 | Git(从仓库安装时) |
| 网络访问 | 可连接到明确授权的评估目标 |
### Python 依赖
项目目前预期使用以下包:```
requests>=2.31.0
rich>=13.7.0
colorama>=0.4.6
dataclasses>=0.6; python_version < "3.7"
对于可复现的安装,建议优先使用仓库中的 requirements.txt 文件,而不是逐个安装软件包。
git clone https://github.com/CerberusMrXi/phpMyAdmin-CVE-2020-5504-Exploit cd phpMyAdmin-CVE-2020-5504-Exploit
python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements.txt
chmod +x start.sh quick.sh exploit.py
启动引导式界面:```bash
./start.sh
git clone https://github.com/CerberusMrXi/phpMyAdmin-CVE-2020-5504-Exploit Set-Location phpMyAdmin-CVE-2020-5504-Exploit
py -m venv .venv ..venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install -r requirements.txt
.\start.bat
如果 PowerShell 执行策略阻止启动器运行,请在授权环境中使用该仓库文档中记载的 PowerShell 入口点:```
powershell -ExecutionPolicy Bypass -File .\start.ps1
仅在 requirements.txt 不可用,或您有意自行管理依赖时,才使用此方法:```bash
python -m pip install "requests>=2.31.0" "rich>=13.7.0" "colorama>=0.4.6"
---
## 使用方法
以下示例使用 `https://authorized.example/phpmyadmin` 作为占位符。请仅将其替换为明确属于您授权范围内的目标。
### 检测模式
检测模式是推荐的起点。它旨在对应用程序进行指纹识别并收集版本信息,而不会尝试进行漏洞利用。```bash
python exploit.py \
--url https://authorized.example/phpmyadmin \
--mode detect
原始界面中的短格式标志在适用时同样受支持:```bash python exploit.py -u https://authorized.example/phpmyadmin -m detect
### 验证模式
验证模式旨在用于受控的漏洞测试。仅在参与方明确允许验证活动,且所需凭据已通过批准的方式提供时,方可使用。```bash
python exploit.py \
--url https://authorized.example/phpmyadmin \
--mode verify \
--username "$PMADB_USERNAME" \
--password "$PMADB_PASSWORD"
避免在命令中直接放置真实密码,因为命令行可能会被存储在 Shell 历史记录中,或暴露给本地进程检查。
研究模式可能会执行更广泛的授权评估活动和数据枚举。它应仅限于专用测试环境,或已获得针对所请求范围明确书面批准的参与项目。```bash
python exploit.py
--url https://authorized.example/phpmyadmin
--mode research
--username "$PMADB_USERNAME"
--password "$PMADB_PASSWORD"
--max-databases 20
--max-tables 50
### 试运行模式
试运行模式可用于验证命令构造、审查工作流行为以及测试配置,而无需执行侵入性操作。```bash
python exploit.py \
--url https://authorized.example/phpmyadmin \
--dry-run
在测试期间需要检查请求和响应时,可通过经授权的拦截代理路由流量:```bash
python exploit.py
--url https://authorized.example/phpmyadmin
--mode verify
--proxy http://127.0.0.1:8080
仅在交战规则允许且代理配置为避免收集或保留不必要敏感数据时,才使用代理。
### 定向数据库评估
当范围文档指定了特定数据库时,在实现支持的情况下,将评估限制在该数据库范围内:```bash
python exploit.py \
--url https://authorized.example/phpmyadmin \
--mode research \
--database target_database \
--max-tables 25
在排查连接失败、意外响应或配置问题时,启用详细输出:```bash
python exploit.py
--url https://authorized.example/phpmyadmin
--mode verify
--verbose
### 交互式界面
交互式启动器推荐给首次使用的用户,因为它提供引导式提示、模式选择、进度指示器以及彩色编码的状态输出。```bash
# Linux/macOS
./start.sh
# Windows
start.bat
| 模式 | 用途 | 预期影响 | 推荐使用场景 |
|---|---|---|---|
detect | 对应用程序进行指纹识别并确定版本指标。 | 无或极小 | 在授权范围内进行初步侦察。 |
verify | 通过受控检查测试目标是否存在漏洞。 | 低 | 在授权评估期间进行确认。 |
research | 开展更广泛的评估和授权枚举。 | 高 | 专用实验室或获得明确批准的测试项目。 |
dry-run | 模拟工作流行为,不执行侵入性操作。 | 无 | 配置和命令验证。 |
模式名称描述的是预期工作流,而非每种配置下的行为保证。在对任何在线系统使用任何模式之前,请先审查实现方式和测试规则。
以下选项由当前项目接口提供。运行 python exploit.py --help 以确认您当前版本中可用的确切选项名称。